MySQL基本语法和SQL Server语法的差异小归纳(4)

MySQL在外键上和SQL Server以及Oracle都不同,MySQL在创建外键的时候,会自动在外键列上创建一个索引,且这个索引无法人为删除。在表联接的过程中因为会依赖性的对外表加上锁,如果外键列上没有索引,可能会加上表锁降低并发且容易导致死锁,如果有索引,将会进行范围锁定,增强并发性也减少了死锁的出现几率。在这一点上,MySQL比SQL Server做的要好。

添加唯一性约束

--SQL Server alter table emp10 add constraint uni_name unique nonclustered(name); -- MySQL添加唯一性约束 ALTER TABLE emp10 ADD CONSTRAINT uni_name UNIQUE KEY(`name`); -- MySQL删除唯一性约束 alter table emp10 drop key uni_name

默认值的设置方法
SQL Server的默认值约束和MySQL的默认值约束设置方法相差很大,MySQL的默认值约束不能使用constraint来设置,只能通过修改列属性来设置。另外,MySQL的default关键字后是不能加括号的,而SQL Server是无所谓的。

-- SQL Server设置默认值时可有可没有括号 create table emp10(name int not null default(12)); create table emp10(name int not null default 12); alter table emp10 add constraint def_name default 12 for name; -- MySQL设置默认值时不能使用括号 create table emp(id int not null default 12); alter table test.emp alter id set default 12; /*使用change和modify也行,但是要重定义列属性*/ -- MySQL删除默认值约束 alter table test.emp alter id drop default;

1.9 创建表模板 -- SQL Server select * into table_name1 from table_name2; /*复制表结构和数据*/ select * into table_name1 from table_name2 where 1=0; /*只复制表结构*/ -- MySQL create table table_name1 like table_name2; /*只复制表结构*/ create tbale table_name1 as select * from table_name2; /*复制表结构和数据*/

MySQL中复制表结构时不会复制主键、索引、自增列等任何属性,仅仅只是简单的建立一张表然后插入数据。但SQL Server复制表结构时会复制自增列属性。

1.10 MySQL中的字段显示宽度和zerofill

在MySQL中可以给整数数据类型指定结果的显式宽度,如int(4)表示将显示4位整数,如果实际值的位数小于显示值宽度,则使用空格填充。而结果位数超出时将不影响显示结果。一般该功能都会配合zerofill属性用0代替空格填充,但是使用了zerofill后,该列就会自动变成无符号字段。

zerofill属性的声明必须紧跟在整数数据类型的后面,而不能跟在如not null这样的属性后面。

SQL Server中没有该功能。

要注意的是显示宽度和数据类型限制的字段宽度是不一样的。显示宽度不会影响字段的限制宽度,只是起一个显示作用。

CREATE TABLE test3(id INT(2) ZEROFILL NOT NULL); ALTER TABLE test3 MODIFY id INT(2) ZEROFILL NOT NULL; ALTER TABLE test3 CHANGE id id INT(2) ZEROFILL NOT NULL; INSERT INTO test3 VALUES(1),(2),(11),(111); SELECT id FROM test3; +-----+ | id | +-----+ | 01 | | 02 | | 11 | | 111 | +-----+ 4 rows in set (0.00 sec) 2. 数据类型

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/927ba476bd2b2a083daad0730bac5769.html