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是无所谓的。
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. 数据类型