Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在字段名周围使用反勾号_Mysql_Backticks - Fatal编程技术网

Mysql 在字段名周围使用反勾号

Mysql 在字段名周围使用反勾号,mysql,backticks,Mysql,Backticks,在这里阅读了一些关于SQL问题的答案和评论,还听说我的一个朋友在一个有禁止使用这些问题的政策的地方工作,我想知道在MySQL中使用字段名的倒勾是否有什么问题 即: SELECT `id`, `name`, `anotherfield` ... -- vs -- SELECT id, name, anotherfield ... 嗯,据我所知,使用反勾号的全部目的是让您可以使用与保留关键字一致的名称。因此,如果名称没有与保留关键字冲突,我看不出有任何理由使用反勾号。但是,这也不是禁止它们的理由。

在这里阅读了一些关于SQL问题的答案和评论,还听说我的一个朋友在一个有禁止使用这些问题的政策的地方工作,我想知道在MySQL中使用字段名的倒勾是否有什么问题

即:

SELECT `id`, `name`, `anotherfield` ...
-- vs --
SELECT id, name, anotherfield ...

嗯,据我所知,使用反勾号的全部目的是让您可以使用与保留关键字一致的名称。因此,如果名称没有与保留关键字冲突,我看不出有任何理由使用反勾号。但是,这也不是禁止它们的理由。

对我来说,在处理字段名时始终使用它们是很有意义的

  • 首先,一旦你养成了这个习惯,只要按一下后退键就没什么坏处了
  • 其次,对我来说,它更容易查看查询中的字段,以及关键字或方法
  • 最后,它允许您在设计表时使用任何字段名。有时将字段命名为“键”、“顺序”或“值”很有意义。。。所有这些在引用它们时都需要反勾号

    • 反勾号的唯一问题是它们不符合ANSI-SQL标准,例如,它们不能在SQL Server中工作


      如果您可能需要将SQL移植到另一个数据库,请使用双引号。

      使用反勾号可以使用其他字符。在查询编写中,这并不是一个问题,但如果有人假设您可以只使用backticks,那么我会假设它可以让您摆脱诸如

      SELECT `id`, `my name`, `another field` , `field,with,comma` 
      
      这当然会生成名称不正确的表

      如果你只是说得简洁一点我看不出有什么问题, 如果这样运行查询,您会注意到

      EXPLAIN EXTENDED Select foo,bar,baz 
      
      返回的生成警告将具有返回标记完全限定表名。因此,如果您正在使用查询生成功能和自动重新编写查询,反勾号将使解析代码的任何内容都不那么混乱


      然而,我认为,它们应该有一个名称标准,而不是强制规定是否可以使用反勾号。它解决了更多的“真实”问题

      反勾号不是标准ANSI SQL的一部分。发件人:

      如果ANSI_QUOTES SQL模式为 启用后,也允许引用 双引号内的标识符


      因此,如果您使用backticks,然后决定离开MySQL,您会遇到一个问题(尽管您可能也有更大的问题)

      如果您继续使用MySQL,除了查询的视觉模糊性之外,没有任何问题。但它们允许使用保留关键字或嵌入空格作为表名和列名。这对于大多数数据库引擎来说都是不允许的,并且将阻止以后的任何迁移

      为了便于阅读,许多人使用大写的SQL关键字,例如

      SELECT some_fied, some_other_field FROM whatever WHERE id IS NULL;
      

      在代码库中搜索backticks中的内容要容易得多。假设您有一个名为
      event
      的表
      grep-r“event”*
      可能会返回数百个结果
      grep-r“\`event\`”*
      将返回任何可能引用数据库的内容

      如果你问我,应该总是使用反勾号。但是有一些原因可以解释为什么一个团队不愿意使用它们

      优点:

      • 使用它们,没有保留字或禁止字符
      • 在某些情况下,您会收到更多描述性错误消息
      • 如果你避免不良行为,你不在乎,但是。。。实际上,有时候它们是避免SQL注入的一种不错的方法
      缺点:

      • 它们不是标准的,通常不便于携带。但是,只要不将反勾号用作标识符的一部分(这是我能想象到的最糟糕的做法),就可以通过自动删除反勾号来移植查询
      • 如果您的一些查询来自Access,它们可能会引用带有“(并且可能您不能盲目地删除所有的”)的表名。但是,允许混合使用反勾号和双引号
      • 一些愚蠢的软件或函数会过滤你的查询,并且会出现反勾号问题。但是,它们是ASCII的一部分,因此这意味着您的软件/功能非常糟糕

      如果您使用一些字段名作为默认mysql或mssql值,例如“status”,则必须使用反勾号(“从table\u name中选择
      status
      ”或“从table\u name中选择id,其中
      status
      =1”)。
      因为mysql返回错误或无法进行查询。

      关于backtick的简单事情是,`用于表示标识符,如数据库名称、表名称等,而单引号',双引号'用于字符串文本,而用于按原样打印值和“”打印值变量hold,或在另一种情况下打印his拥有的文本

      i.e 1.-> use `model`;   
          here `model` is database name not conflict with reserve keyword 'model'
      2- $age = 27;
      insert into `tbl_people`(`name`,`age`,`address`) values ('Ashoka','$age',"Delhi");
      
      here i used both quote for all type of requirement. If anything not clear let me know..
      
      SQL中backticks(`)的主要用途是在接下来的子句中将再次调用它们的情况下使用它们。建议每隔一次使用双引号(“”)

      比如说

      SELECT CONCAT(Name, ' in ', city, ', ', statecode) AS `Publisher and Location`,
          COUNT(ISBN) AS "# Books",
          MAX(LENGTH(title)) AS "Longest Title",
          MIN(LENGTH(title)) AS "Shortest Title"
      FROM Publisher JOIN Book
      ON Publisher.PublisherID = Book.PublisherID WHERE INSTR(name, 'read')>0
      GROUP BY `Publisher and Location`
      HAVING COUNT(ISBN) > 1;
      
      在上面的语句中,您是否看到了在
      GROUP BY
      子句中如何再次使用
      发布者和位置

      而不是使用

      按名称、城市、州代码分组

      我刚用过

      按发布者和位置分组


      只有在出现这种情况时,才使用反勾号。在所有其他情况下,建议使用双引号。

      是的。使用MySQL的ANSI模式——在MySQL中启用双引号,从而恢复跨数据库兼容性。反勾号/引号也是必要的,因为您永远不知道在未来的DBMS版本中什么将成为保留字。这是千真万确的!我们的一个服务器应用程序运行良好,直到我们对数据库引擎进行了升级,添加了一个新的关键字。突然,查询特定表的所有内容都中断了。@bobince当我刚接触dev时,我命名了一个列
      range
      或类似的东西。当我们升级到MySQL 5时失败了,因为它