本文目录:
1. 和SQL server语法主要不同的地方
1.1 大小写敏感性
1.2 注释符
1.3 自增列
1.4 查看表的属性
1.5 修改表名
1.6 删除表
1.7 修改字段属性
1.8 添加、删除字段和约束
1.9 创建表模板
1.10 MySQL中的字段显示宽度和zerofill
2. 数据类型
3. 数据类型属性
3.1 unsigned
3.2 zerofill
4. 操作符
4.1 安全等于运算符(<=>)
4.2 正则表达式运算符(regexp或者rlike)
4.3 连接操作符
4.4 异或运算符XOR
4.5 MySQL中的转义
因为一早就接触过SQL Server,所以对SQL Server的语法比较熟悉,后来转学MySQL,还有些不适应,所以大致总结了一些MySQL和SQL Server语法不同的地方。
因为本文是SQL Server和MySQL语法差异性的总结,所以内容比较杂,没什么逻辑也不详细,还请见谅。在后面的文章中将只说明MySQL的语法。
1. 和SQL Server语法主要不同的地方 1.1 大小写敏感性MySQL和SQL Server一样,对大小写不敏感。但不同的是,在MySQL中对部分对象的引用是大小写敏感的,如数据库名、表名,但对字段、索引、函数、存储过程等的引用不敏感。
1.2 注释符在MySQL中支持三种注释方法:以下都可以是行内注释。
使用#作为开头,后面的全是注释。
使用--作为注释开头,但要注意,MySQL中这种注释方法和SQL Server等其他标准数据库注释语法稍有不同,MySQL要求第二个短线后面必须跟一个空白字符,如空格、制表符等。
使用/**/注释符。
1.3 自增列MySQL中设置自增列(auto_increment)的列必须是有索引的列,且创建表时要显式指定的种子值需要在建表语句之后。另外MySQL一张表只能有一个自增列。而SQL Server中可以有多个自增列。且MySQL中向自增列插入数据时必须使用null来表示插入的是自增列,除非显式指定插入列表中不包含自增列,而SQL Server向自增列插入数据时可以且必须无视该列,除非设置显示插入模式。
-- SQL Server直接使用identity,但必须有非自增列之外的列才能插入,除非显式开启手动插入自增列 create table emp1(id int not null identity(1,2),name CHAR(20)); insert into emp1 VALUES('malongshuai'); insert into emp1 values('gaoxiaofang'); select * from emp1; -- MySQL中自增列必须为索引列,并且只能设置种子值而不能直接设置步长 create table emp1(id int not null primary key AUTO_INCREMENT); create table emp2(id int not null primary key AUTO_INCREMENT) auto_increment=100; insert into emp1 values(null); insert into emp2 values(null);设置自增列的步长,分为全局级别和会话级别。但它们都是临时生效的,重启实例后效果就消失,要永久生效可以将其写入配置文件中。如果是会话级别,那么当用户新建一个会话的时候,那么步长又回到了全局级别。
mysql不能设置为表级别的步长!!
设置和查看全局和会话级别的变量时,分别使用如下语句:
set [session] auto_increment_increment=100; -- 会话级的步长设置 set global auto_increment_offset=12; -- 全局级的种子值 show [session] variables like 'auto_inc%'; show global variables like 'auto_inc%';