الخلية:@المتغير مقابلعامل.ماهو الفرق؟(الجزء 2)

StackOverflow https://stackoverflow.com/questions/1010397

  •  06-07-2019
  •  | 
  •  

سؤال

حسنًا ، البناء من السؤال الأخير الذي طرحته, كيف يتعامل Mysql مع بيان المكان في الكود التالي:

DELIMITER ;//
DROP PROCEDURE IF EXISTS `test`;//
CREATE PROCEDURE `test`
(
  id INT
)
BEGIN
  SELECT *
    FROM some_table
   WHERE id = id;
END;//

ماذا تفعل MySQL في هذه الحالة؟هل يعامل جملة حيث كما

some_table.id = id

أو هل يعاملها هكذا

some_table.id = some_table.id 

الآن أفعل شيئًا مثل

WHERE id = @id

لأنني لم أكن أعلم أن هناك متغيرات جلسة في MySQL ولم أشتكي واعتقدت أنها طريقة صريحة لقول "حيث يساوي هذا العمود هذا المتغير".

قد يقول البعض "دوه..بالطبع يعامله على أنه عمود = متغير" ولكن كان من الممكن أن أقول بسهولة حيث "متغير = عمود." فكيف يتعامل مع هذا؟

هل كانت مفيدة؟

المحلول

يعد مخطط تسمية المتغيرات في MySQL غريبًا بعض الشيء، عند إلقاء نظرة عليه لأول مرة.بشكل عام، تفرق MySQL بين ثلاثة أنواع من المتغيرات:

لذا فإن تعارضات الأسماء، مثل تلك التي ذكرتها أعلاه، تنشأ فقط داخل البرامج المخزنة.لذلك يجب عليك أولاً محاولة تجنب تعارض الأسماء هذا عن طريق تعيين أسماء معلمات لا لبس فيها، على سبيل المثال.عن طريق بادئة المعلمات مع p مثل pId.إذا واجه MySQL غموضًا فإنه سيتم تفسير المرجع كاسم متغير (انظر هنا):

...] يجب ألا تكون أسماء المتغيرات المحلية هي نفس أسماء الأعمدة.إذا كان بيان SQL ، مثل أ SELECT ... INTOالبيان ، يحتوي على إشارة إلى عمود ومتغير محلي معلن مع نفس الاسم ، يفسر MySQL حاليًا المرجع كاسم للمتغير. [...]

الصياغة حالياً بطريقة ما يعطي الانطباع بأن هذا السلوك يمكن أن يتغير في الإصدارات المستقبلية.

نصائح أخرى

وأنا متأكد من أن @ يعني أنه متغير في الإجراء، بدلا من الرجوع إلى عمود الجدول. هناك واحد فقط عمود جدول يسمى id، وذلك في هذه الحالة هو لا لبس فيه. إذا كنت تفعل في الانضمام، فإنك سوف تحتاج إلى بادئة ما يلي:

select *
from table1, table2
where table1.id = @id
and table2.some_field = table1.id

لا يهم أين هو، فإن المتغير يحتاج دائما @ البادئة، كما هو الحال في هذا الاستعلام:

select id, @id
from table1

وهوية الأول هو لا لبس فيها عمود الجدول table1.id، وid مراجع متغير الإجراء المخزن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top