nSQLServer与MySQL约束/索引命名的一些差异总结

Posted wy123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nSQLServer与MySQL约束/索引命名的一些差异总结相关的知识,希望对你有一定的参考价值。

 

在SQL Server中的约束与索引:

CREATE TABLE TestTable1
(
  --1,系统会默认对主键/唯一约束创建主键/唯一索引,索引的名字会与约束的名字一致
  Id int identity(1,1) not null constraint pk_Id primary key (Id),
  Name varchar(100) constraint uq_testtable1_name unique,
  --2,对主键/唯一约束,如果没有指定约束的名字,按照某种规则+随机生成索引名字
  Alias varchar (100) unique,
  CreateDate datetime not null constraint df_createdate default getdate(),
  --3,对于非空约束,不管是否指定了约束的名称,系统都不会为NOT NULL约束生成约束的名字
  LastUpdate datetime constraint notnullconstraint not null
)

技术分享图片

1,系统会默认对主键/唯一约束创建主键/唯一索引,索引的名字会与约束的名字一致
2,对主键/唯一约束,如果没有指定约束的名字,按照某种规则生成随机的索引名字
3,对于非空约束,不管是否指定了约束的名称,系统都不会为NOT NULL约束生成约束的名字
4,约束或者索引的名字,在数据库级别是唯一的,也就是说A表的约束的名字不能跟B表的约束采用同一个名字
5,在sqlserver中,如果删除一个存在约束的字段,必须要先删除约束,否则报错
如果让约束随机命名,删除约束的时候会比较麻烦,所以建议对于约束要显式命名

技术分享图片

sqlserver中,不管是对于约束或者索引,都强烈建议使用显式指定名字的方式命名,不使用系统默认生成的(随机)名字

 

 

mysql的约束与索引

CREATE TABLE TestTable1
(
  Id int auto_increment not null ,
  Name varchar(100) ,
  Alias varchar (100) ,
  CreateDate datetime not null default now(),
  LastUpdate datetime,
 
  unique key uq_TestTable1_name(Name),
  unique key (Alias),
  key (Name,CreateDate)
 );

对应的约束信息

 技术分享图片

对应的索引信息

技术分享图片

1,系统会默认对主键/唯一约束创建主键/唯一索引,
   对于主键约束,不管是否显式给予命名,系统都会忽略这个主键名字,使用PRIMARY替代
   对于非主键约束,如果显式给予命名,系统会采用这个命名,否则使用字段名来当做索引的名字
2,MySQL中,索引的名字仅限于表级别不重复,库级别无要求,
  也就是说一个库中不同的表,可以使用相同的索引名称,当然这里并不是建议或者支持这种方式的使用
3,对于非空约束,系统都不会为NOT NULL约束生成约束的名字
4,对于复合索引(多个字段组成),如果没有显式命名,会采用第一个字段命名
5,删除存在约束的字段的时候,无需先删除约束,直接删除字段即可

技术分享图片

从第4点看,未显式命名的情况下,无法做到见名知意,
也就是说看到索引的名字能够大概知道是一个什么字段的索引,因此在MySQL中,对于非主键索引,建议使用显式命名的方式进行管理

 

以上是关于nSQLServer与MySQL约束/索引命名的一些差异总结的主要内容,如果未能解决你的问题,请参考以下文章

Mysql数据唯一约束与唯一索引案例总结及踩坑记(含NULL值与唯一约束唯一索引的搭配使用)

MySQL学习总结索引

公司用的 MySQL 团队开发规范,非常详细,建议收藏!

公司用的 MySQL 团队开发规范,非常详细,建议收藏!

索引与慢查询优化

mysql约束与索引的区别