双引号:"
单引号:'
倒引号:`

MySQL标准例子:

-- ----------------------------
-- Table structure for yveshe
-- ----------------------------
DROP TABLE IF EXISTS `yveshe`;
CREATE TABLE `yveshe` (
  `id` varchar(36) NOT NULL,
  `name` varchar(200) NOT NULL,
  `desc` varchar(4096) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of yveshe
-- ----------------------------
INSERT INTO `yveshe` VALUES ('4ce1395c-5a05-48be-bc8e-6a5e8adad8d4', 'yveshe', 'desc');


SELECT `id`,`name`,`desc` FROM `yveshe`
SELECT `yveshe`.id, `yveshe`.`name`, `yveshe`.`desc` FROM `yveshe`;  # 建议

引号的说明

  • 单引号
    用来限定字符串。如果将值与字符串类型的列进行比较,则需要限定符号(也就是是单引号)。用来与数值列进行比较的值不需要用引号.不管使用何种形式的字符串类型,值都必须括在引号内(通常单引号更好)。

  • 双引号
    在SQL标准中是不存在双引号的,往往是数据库对SQL的扩展,当前大部分数据库系统也是接受双引号的,作为字符串类型的限定符效果等同于单引号.在MySQL数据中当单引号被用作限定符使用时,使用双引号和使用单引号效果是等价的.

  • 倒引号
    说到倒引号,我们先来执行一下SQL来试试

    DROP TABLE IF EXISTS `yveshe`;
    CREATE TABLE `yveshe `(
      `id` varchar(36) NOT NULL,
      `name` varchar(200) NOT NULL,
      desc varchar(4096),
      PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    在这里插入图片描述

    我们可以发现创建表失败了,为什么呢?因为desc在mysql中是关键字也是保留字,在官方文档中有说明

    Keywords are words that have significance in SQL. Certain keywords, such as SELECT, DELETE, or BIGINT, are reserved and require special treatment for use as identifiers such as table and column names. This may also be true for the names of built-in functions.
    Nonreserved keywords are permitted as identifiers without quoting.
    参考:https://dev.mysql.com/doc/refman/5.5/en/keywords.html


    翻译一下:
    也就是说在Mysql中一些保留字在用作表名,列名的时候需要使用倒引号`这种标识符来特殊的标识.注意只是保留字需要特殊,不包括一般的关键字,比如BEGINBEGIN是关键字但不保留,因此使用它们作为标识符的使用不需要倒引用。

    所以我们只需要将desc加上倒引号就可以正常创建表了,细心的我们会发现在使用Navicat导出Mysql语句时,都会自动在表名列名上都加上倒引号`了.
    比如:

    DROP TABLE IF EXISTS `yveshe`;
    CREATE TABLE `yveshe `(
      `id` varchar(36) NOT NULL,
      `name` varchar(200) NOT NULL,
      `desc` varchar(4096),
      PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    这里说个题外话: 在使用mybatis生成的mapper.xml中,我们发现列名和表名是没有添加倒引号的,所有如果在设计表结构的时候使用了保留关键字,往往在运行程序的时候就会出现问题了,所以在设计数据库的时候我们还是尽量的避免使用这些保留关键字吧,比如desc用description来代替等等.

在字符类型中使用引号

当Mysql中字符串的值中包含(双引号,单引号,无引号,倒引号)是的SQL语句书写与结果展示如下:

DROP TABLE IF EXISTS yveshe;
CREATE TABLE yveshe (
  id varchar(36) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO yveshe VALUES ('\"yveshe\"');
INSERT INTO yveshe VALUES ('\'yveshe\'');
INSERT INTO yveshe VALUES ('yveshe');
INSERT INTO yveshe VALUES ('`yveshe`');

对应结果,倒引号是不需要转义的:
在这里插入图片描述

在MySQL数据中当单引号被用作限定符使用时,使用双引号和使用单引号效果是等价的:

INSERT INTO yveshe VALUES ("`yveshe2`");
INSERT INTO yveshe VALUES ("\"yveshe2\"");
INSERT INTO yveshe VALUES ("\'yveshe2\'");
INSERT INTO yveshe VALUES ("yveshe2");

在这里插入图片描述

关于MySQL中的转义字符\可以用来转义特殊字符,单引号'在某些场景下也有类似的功能比如:

INSERT INTO yveshe VALUES (''"yveshe'"');  # 不支持
INSERT INTO yveshe VALUES ('''yveshe''');  # 支持
Logo

更多推荐