我一直在更新 mysql 数据库中的某些字段时遇到问题,我很沮丧,有时 mysql 拒绝允许我查询,除非我用斜引号而不是单个引号将字段包装起来。这样做似乎没有明显的模式,有人可以解释这里发生了什么吗?
此查询不使用任何类型的引号(x 是主键)
UPDATE table SET x = 1821 WHERE x =1820
Run Code Online (Sandbox Code Playgroud)
这两个查询因 o 附近的语法问题而失败。
UPDATE table SET o = 200 WHERE x =1820
UPDATE table SET 'o' = 200 WHERE x =1820
Run Code Online (Sandbox Code Playgroud)
此查询有效。
UPDATE table SET `o` = 200 WHERE x =1820
Run Code Online (Sandbox Code Playgroud)
mysql 坚持使用斜引号有什么正当理由吗?
在几乎所有的 SQL 方言中,字符串(如输入值)使用单引号,标识符(如表或列名)不使用引号:
SELECT column_name, function_name() AS column_alias
FROM table_name
WHERE another_column='The value to match'
Run Code Online (Sandbox Code Playgroud)
这对 MySQL、Oracle、SQL-Server 和长的等等都是有效的。
这是一般规则。然后,有一种特殊情况:当您想对通常无效的标识符使用某个名称时。在这种情况下,MySQL 允许您在名称周围使用反引号(其他 DBMS 使用方括号、双引号或根本不允许您使用此类名称):
SELECT `Full Name` -- Name with spaces
FROM `from` -- Reserved word
Run Code Online (Sandbox Code Playgroud)
一般来说,最好避免使用这些名称,尽管我知道有些情况下已经使用了一个非常好的名称:
SELECT `key`, value
FROM settings
Run Code Online (Sandbox Code Playgroud)
至于您的示例,很明显它们不是真正的查询,因为table用作表名会在它们中触发语法错误;-)
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |