2009-07-15 3 views
5

Мне было интересно, почему MYSQL использует один знак равенства в условных операторах вместо более типичных двух равнозначных знаков. Есть ли для этого техническая/историческая причина? Благодарю.Single Equals in MYSQL

ответ

7

Привет, мне было интересно, почему MYSQL использует один знак равенства в условных операторах вместо более типичных двух знаков равенства. Есть ли для этого техническая/историческая причина? Благодарю.

Сравнение гораздо чаще встречается в SQL, чем при назначении.

Именно поэтому SQL использует более короткий синтаксис, чтобы делать более распространенные вещи.

В классической SQL, сравнение можно отличить от уступки по контексту (назначение может быть только в SET пункте в UPDATE заявлении), поэтому один оператор может быть использован как для операций.

В расширения MySQL «s к SQL, назначение переменной сеанса обозначается :=

+0

SQL не эволюционировал из QUEL. QUEL, хотя, возможно, в некотором смысле лучший дизайн, был вытеснен SQL. – lavinio

+0

@lavinio: правильный, удален эта часть. – Quassnoi

7

Больше похоже на исторический.

Это SQL. Он использовал один знак равенства для сравнения с начала 70-х годов.

+0

Любая идея источника? – Anon

+0

Он был разработан IBM в 70-х годах. Первоначально он был назван Structured English Query Language, поэтому он должен быть близок к регулярному человеческому языку. – Guffa

5

Там никогда не случай двусмысленности в SQL.

В оригинальной Руководство к SQL Standard по C.J.Date (1987 издание), = для назначения используется только в предложении о UPDATESET. Везде, где используется =, используется для сравнения.

Но на других языках, таких как C/C++/C#/Java, = может использоваться как назначение, но оно также возвращает значение. Так a = b означает «установить a, равный b и вернуть a», тогда как a == b означает «возвращение true если a и b равны». (Это приводит к весьма распространенной ошибки в программах на языке Си, потому что if (a = b) и if (a == b) являются действительными, так как результат не должен быть BOOL.)

Некоторые языки, такие как JavaScript/ECMAScript также ввести === в качестве третьего типа сравнения. В этих языках == означает «конвертировать в тот же тип и сравнивать», тогда как === означает «return true, только если они одного типа и того же значения».