精华内容
下载资源
问答
  • 如何用sql语句创建具有多个主键(--联合主键)的表阿
    千次阅读
    2021-01-19 07:53:15

    完全可以create tabletabCheck

    (

    check_idint not null,

    check_noint not null,

    startdatedatetime,

    enddatedatetime.......................CONSTRAINT [PK_tabCheck] PRIMARY KEY CLUSTERED (check_id,check_no) ON [PRIMARY]

    --上面這句一定要用到

    )

    check_id,check_no是这个表的联合主键

    一个表只允许有一个主键

    但一个主键可以允许由多个字段构成复合主键

    所以楼主的写法是不行的,用了多个主键

    冒牌的可以,由多个字段构成一个主键

    而一个表允许多个唯一键,所以如果仅仅是为了限制字段的记录不重复的话,可以用一个主键,多个唯一键的方式.--如果楼主是要 paper_name+author_id 构成复合主键

    create tablepaper (

    paper_namevarchar(50) not null,

    author_idchar(10) not null,constraint PK_paper primary key(paper_name,author_id) --复合主键

    )--如果楼主是要 paper_name 与 author_id 的值都不重复,则:

    create tablepaper (

    paper_namevarchar(50) not null primary key, --用主键做限制

    author_id char(10) not null constraint UQ_paper_author_id unique --用唯一键做限制

    )

    我们在create table时经常会碰到这样的语句,例如:CityNamenvarchar(10)collate chinese_prc_ci_as null,那它到底是什么意思呢?不妨看看下面:

    首先,collate是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影。

    语法是collate collation_name

    collation_name ::={windows_collation_name}|{sql_collation_name}

    参数collate_name是应用于表达式、列定义或数据库定义的排序规则的名称。collation_name 可以只是指定的 Windows_collation_name 或 SQL_collation_name。

    Windows_collation_name 是 Windows 排序规则的排序规则名称。参见 Windows 排序规则名称。

    SQL_collation_name 是 SQL 排序规则的排序规则名称。参见 SQL 排序规则名称。

    下面简单介绍一下排序规则:

    什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server2000中,

    字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存

    储和比较字符所使用的规则。"

    在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则。select * from::fn_helpcollations()

    排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。

    如:

    Chinese_PRC_CS_AI_WS

    前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。

    排序规则的后半部份即后缀 含义:

    _BIN 二进制排序

    _CI(CS) 是否区分大小写,CI不区分,CS区分

    _AI(AS) 是否区分重音,AI不区分,AS区分

    _KI(KS) 是否区分假名类型,KI不区分,KS区分

    _WI(WS) 是否区分宽度 WI不区分,WS区分

    区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。

    区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,

    比较还将重音不同的字母视为不等。

    区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。

    区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项

    更多相关内容
  • 但是如果我们不传值,那么他默认为null的话,可以多个吗? 伟大的毛主席告诉我们:实践是检验真理的唯一标准! 本次测试使用的是数据库时MySQL 5.5 首先创建一张表将username字段设置成unique约束 CREATE TABLE test_...

    我们都知道unique约束,限制此字段在数据库表中此字段值唯一
    但是如果我们不传值,那么他默认为null的话,可以有多个吗?
    伟大的毛主席告诉我们:实践是检验真理的唯一标准!
    本次测试使用的是数据库时MySQL 5.5

    1. 首先创建一张表将username字段设置成unique约束
    CREATE TABLE test_unique (
    	#主键
    	uid INT PRIMARY KEY auto_increment,
    	#用户名,设置默认值为null
    	username VARCHAR (10)DEFAULT NULL ,
    	upassword VARCHAR (10),
    	#添加唯一约束,名字叫unique_username
    	CONSTRAINT unique_username UNIQUE (username)
    )
    
    1. 新增一条数据,这里只是新增了密码,并未新增username
    INSERT INTO test_unique(upassword)VALUES("1");
    

    新增成功

    1. 再插入一条数据,也不插入username列
    	INSERT INTO test_unique(upassword)VALUES("2");
    

    依然插入成功!
    插入成功
    4. 多插入几条
    插入成功
    没有任何问题
    5. 测试插入username
    在这里插入图片描述
    再插入一条重复的
    在这里插入图片描述

    发现重复了,违反唯一约束!

    结论:在mysql中unique约束列可以含有多个null!

    展开全文
  • 列属性又称之为字段属性,在mysql中一共有6属性:null,默认值,列描述,主键,唯一键和自动增长列属性又称之为字段属性,在mysql中一共有6属性:null,默认值,列描述,主键,唯一键和自动增长是其它几篇的合篇...

    列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长是其它几篇的合篇

    Null属性

    NULL属性:代表字段为空

     

    如果对应的值为YES表示该字段可以为NULL,如下许多字段默认都可以为null,下面的d4是timestamp类型不能为null,

    插入null时会自动插入当前时间

    注意:

    1、 在设计表的时候,尽量不要让数据为空(设计时在类型后加not null即可)

    2、 Mysql的记录长度为65535个字节,如果一个表中有字段允许为NULL,那么系统就会设计保留一个字节来存储NULL,最终有效存储长度为65534个字节。

    默认值

    Default:默认值,当字段被设计的时候,如果允许默认条件下,用户不进行数据的插入,那么就可以使用事先准备好的数据来填充:通常填充的是NULL

     

    测试:不给当前字段提供数据值

     

    没有填充的字段显示为默认值18

    Default关键字的另外一层使用:显示的告知字段使用默认值:在进行数据插入的时候,对字段值直接使用default

     

    列描述

    列描述:comment,是专门用于给开发人员进行维护的一个注释说明

    基本语法:comment ‘字段描述’;

    查看Comment:必须通过查看表创建语句

    主键

    顾名思义:主要的键,primary key,在一张表中,有且只有一个字段,里面的值具有唯一性

    创建主键

    随表创建

    系统提供了两种增加主键的方式

    1、 方案1:直接在需要当做主键的字段之后,增加primary key属性来确定主键

    2、 方案2:在所有字段之后增加primary key选项:primary key(字段信息)

    表后增加

    基本语法:alter table 表名 add primary key(字段);

    查看主键

    方案1:查看表结构

    语法:desc 表名;

    方案2:查看表的创建语句

    show create table 表名;

    删除主键

    基本语法:alter table 表名 drop primary key;

    复合主键

    案例:有一张学生选修课表:一个学生可以选修多个选修课,一个选修课也可以由多个学生来选:但是一个学生在一个选修课中只有一个成绩。

    创建表并定义复合主键

    插入数据:

    复合主键的组合不能完全一样,比如小明不可能在历史考试中考了100分与59分!!

    主键约束

    主键一旦增加,那么对对应的字段有数据要求

    1、 当前字段对应的数据不能为空;

    2、 当前字段对应的数据不能有任何重复

     

    主键分类

    主键分类采用的是主键所对应的字段的业务意义分类

    业务主键:主键所在的字段,具有业务意义(学生ID,课程ID)

    逻辑主键:自然增长的整型(应用广泛)

     

    自动增长

    自动增长:auto_increment,当给定某个字段该属性之后,该列的数据在没有提供确定数据的时候,系统会根据之前已经存在的数据进行自动增加后,填充数据。

    通常自动增长用于逻辑主键。

    原理

    自动增长的原理:

    1、 在系统中有维护一组数据,用来保存当前使用了自动增长属性的字段,记住当前对应的数据值,再给定一个指定的步长

    2、 当用户进行数据插入的时候,如果没有给定值,系统在原始值上再加上步长变成新的数据

    3、 自动增长的触发:给定属性的字段没有提供值

    4、 自动增长只适用于数值

    使用自动增长(自动增长的列必须是个key,主键外键唯一键都行,且一张表只有能有一个自增长的字段(列))

    基本语法:在字段之后增加一个属性auto_increment

    插入数据:触发自动增长,不能给定具体值

     

    修改自动增长

    1、 查看自增长:自增长一旦触发使用之后,会自动的在表选项中增加一个选项(一张表最多只能拥有一个自增长)

    另外几个表选项前面讲了,还多出了个 auto_increment=2:意思就是下次不向自增长列插入指定数值(如null)的话就插入2

    注:可以像前面修改字符集那样修改自增长的值,但是自增长的值必须大于当前自增长列最大值,否则修改无效

    2、 表选项可以通过修改表结构来实现

    Alter table 表名 auto_increment = 值;

     

    此时我再插入数据,自增长的值本应该为2变为了8

    删除自动增长

    删除自增长:就是在字段属性之后不再保留auto_increment,当用户修改自增长所在字段时,如果没有看到auto_increment属性,系统会自动清除该自增长

     

    初始设置

    在系统中,有一组变量用来维护自增长的初始值和步长

    Show variables like ‘auto_increment%’;

    第一个1为增量,第二个1为初始值

    唯一键(唯一键是索引一种

     

    唯一键:unique key,用来保证对应的字段中的数据唯一的

     

    主键也可以用来保证字段数据唯一性,但是一张表只有一个主键。

    1、 唯一键在一张表中可以有多个。

    2、 唯一键允许字段数据为NULL,NULL可以有多个(NULL不参与比较)

    创建唯一键

    创建唯一键与创建主键非常类似

    1、 直接在表字段之后增加唯一键标识符:unique[ key]

    2、 在所有的字段之后使用unique key(字段列表);

    3、 在创建完表之后也可以增加唯一键
    alter table 表名 add unique key(字段列表);

    这里只演示第2种

     

    查看唯一键

    唯一键是属性,可以通过查看表结构来实现

    desc 表名(上图中已查看)

    唯一键效果:在不为空的情况下,不允许重复

    在查看表创建语句的时候,会看到与主键不同的一点:多出一个“licenseId”

    为什么唯一键创立后会自动创建一个名字?其实是索引,后续文章会讲解索引

    删除唯一键

    一个表中允许存在多个唯一键:假设命令为主键一样:alter table 表名 drop unique key;//错误的

    Index关键字:索引,唯一键是索引一种(提升查询效率)

    删除的基本语法:alter table 表名 drop index 唯一键名字;

     

    修改唯一键:先删除后增加

     

    复合唯一键

    唯一键与主键一样可以使用多个字段来共同保证唯一性;

    一般主键都是单一字段(逻辑主键),而其他需要唯一性的内容都是由唯一键来处理。

     

    展开全文
  • mysql个人学习笔记——主键、唯一键

    千次阅读 2019-03-26 21:48:50
    在总结主键和唯一键之前,先简单介绍一下索引。 索引 对目标数据单独建立一索引文件,使得对这些数据的查询可以通过索引文件进行快速查询。 意义: 1、提高查询效率 2、约束数据的有效性(唯一性[主键、唯一键]等...

    在总结主键和唯一键之前,先简单介绍一下索引。

    索引

    对目标数据单独建立一个索引文件,使得对这些数据的查询可以通过索引文件进行快速查询。
    意义:
    1、提高查询效率
    2、约束数据的有效性(唯一性[主键、唯一键]等)

    但是由于索引文件可能比数据本身还大,使用索引需综合考虑内存和查询效率问题。

    索引种类:

    1、主键索引:primary key
    2、唯一键索引:unique key
    3、全文索引:fulltext key
    4、普通索引: index

    primary key主键

    在表中主键字段的每个数据都唯一,如(学号,id等),主键不允许该字段为空,创建主键后自动把该字段的属性改成not null
    在这里插入图片描述

    创建主键

    语法:
    1、创建表时:字段名 字段类型 字段属性 primary key
    如:

    create table my_pri1(id int primary key,name char(2));
    

    2、创建表时:所有字段后,primary key(字段名)
    如:

    create table my_pri2(id int,name char(2),primary key(id));
    

    3、创建表后:alter table 表名add primary key(字段名);
    如:

    alter table my_pri3 add primary key(id);
    

    查看主键

    语法:
    1、desc 表名
    在这里插入图片描述
    2、show create table 表名
    在这里插入图片描述

    删除主键

    语法:alter table 表名drop primary key;
    在这里插入图片描述

    复合主键

    用多个字段组合成一个主键唯一识别一条记录。
    (如:1个学生可以有多门课程,1门课程可以有多个学生,但1个学生1门课程只有1个成绩,这里学生的学号和课程名共同组成唯一组合(主键),确定成绩)

    创建复合主键

    语法:
    1、创建表时:所有字段后,primary key(字段名,字段名,..);
    如:

    create table my_pri4 (id int,course int,primary key(id,course));
    

    2、创建表后:alter table 表名add primary key(字段名,字段名,…);
    如:

     alter table my_pri3 add primary key(id,course);
    

    在这里插入图片描述

    主键约束

    作为主键的字段不能为空,且在表中该字段中的每个数据唯一,不能重复。

    主键分类

    1、业务主键:有业务意义的主键(如学号,名字(不考虑重名情况))
    2、逻辑主键:自然增长的整型(没有业务意义,仅是作为唯一识别每条记录的标号,应用广泛)

    主键冲突

    主键冲突即向表中插入记录,该记录中主键字段的数据与表中原有数据重复。
    在这里插入图片描述
    解决方法:发生冲突时,用新数据替换旧数据
    语法:
    1、insert into 表名 values(值列表) on duplicate key update 字段名 = 新值, 字段名 = 新值, 字段名 = 新值,…;
    update后面没出现的字段,将沿用旧值
    在这里插入图片描述
    2、replace into 表名 values(值列表);
    直接覆盖原有记录
    在这里插入图片描述

    auto_increment 自动增长(列属性)

    auto_increment 只使用用数值类型(如:int、double等)
    字段添加自动增长属性后,当插入数据时,没有给定该字段的数据,系统将根据原有数据自动增长后填充到该字段中。常用于逻辑主键。
    语法:字段名 字段类型 [字段属性] auto_increment
    如:

    alter table my_pri3 modify id int not null auto_increment;
    

    在这里插入图片描述

    增长原理

    系统中有一组数据用来保存自动增长属性的字段,当插入数据时,自动增长字段没有给定值,则将保存的数据(0或上一个插入的数值)加上指定步长(默认为1)作为该字段的数值(可通过查看表的创建语句直接查看将要插入的数据)。
    在这里插入图片描述
    下一个将要插入的自增长(假如下一次插入依然没有给定数据)
    在这里插入图片描述
    在这里插入图片描述

    删除记录时,自增长不改变
    当需要删除全部记录后重置自增长,可使用指令:truncate 表名;
    注意:truncate 表名;相当于删除表后重新新建一个结构一样的表。指令执行后,将清空所有数据
    在这里插入图片描述
    在这里插入图片描述

    修改增长

    语法:alter table 表名 auto_increment=x;
    在这里插入图片描述
    ps:一个表中只能有一个自增长,且将要设定成自增长的字段必须是键
    在这里插入图片描述

    查看自增长初始设定

    语法:show variables like ’auto_increment%’;

    修改自增长初始设定(不能设置为0)

    指令:set 变量名 = xx;
    在这里插入图片描述
    在这里插入图片描述
    当试图把步长设置为0时,系统将会把步长自动设为1。
    在这里插入图片描述

    unique key唯一键

    唯一键,保证字段内每个数据具有唯一性,但null可以有多个。
    与主键区别:唯一键可以有多个,允许有空值null。
    在这里插入图片描述

    创建唯一键

    语法(与主键类似):
    1、创建表时:字段名 字段类型 字段属性 unique [key]
    如:

    create table my_uni1(id int unique );
    

    2、创建表时:所有字段后,primary key(字段名)
    如:

    create table my_uni2(id int,unique key(id));
    

    如果括号内为字段列表,将组成复合唯一键,以第一个字段名作为唯一键名字。
    在这里插入图片描述

    若需要多个唯一键,需要分开写。
    在这里插入图片描述

    3、创建表后:alter table 表名add unique key(字段名);
    如:

    alter table my_uni3 add unique key(id);
    

    查看唯一键

    语法:
    1、desc 表名;
    在这里插入图片描述

    2、show create table 表名;
    在这里插入图片描述

    删除唯一键

    语法:alter table 表名 drop index 唯一键名字;
    如:

    alter table my_uni3 drop index course;
    

    复合唯一键

    语法:unique(字段列表)
    在这里插入图片描述

    ps:一般主键用作逻辑主键,其他需要确保唯一性的字段用唯一键。

    展开全文
  • 唯一键唯一键:每张表往往有多个字段需要具有唯一性,数据不能重复,但是在每张表中,只能有一个主键,因此唯一键就是用来解决表中多个字段需要具有唯一性的问题。唯一键的本质与主键差不多,唯一键默认的允许字段为...
  • (super key):在关系中能唯一标识元组的属性集称为关系模式的超 候选(candidate key):不含有多余属性的超称为候选...–这里可以看出,超的组合是唯一的,但可能不是最小唯一的 身份证唯一,而且没有多余属性
  • 一、列属性概述 1、真正约束字段的是数据类型,但数据类型的约束很单一,需要一些额外的...在MySQL中,一共有6列属性:null/not null、comment、default、primary key、auto_increment、unique key 二、空属性 ...
  • hibernate 批量保存数据时存在唯一键unique重复时报错的解决方式 ( 主键策略为indentity时可用) 测试的数据库:mysql 其中Teacher的主键策略分别为以下几种 //Teacher1 -- native //Teacher2 -- hilo //...
  • 今天在开发的时候因为要讲角色表和用户表通过一个id进行绑定,也就是一个角色对于一个角色id,但一个角色可以对于多个用户,比如角色表有管理员、审核员、记录员等等,他们分别对于一个角色id,但管理员可以是张三、...
  • 唯一键与主键的本质相同:唯一的区别就是唯一键默认允许为空而且可以多个为空。 插入数据 -- 首先进行查看 desc my_unique1; -- 插入数据 insert into my_unique1 values(null,'lzg'),('itcast0001','cs'),(null,'ls...
  • mysql学习一:唯一键约束

    千次阅读 2018-01-30 10:24:19
    唯一键:每张表往往有多个字段需要具有唯一性,数据不能重复,但是在每张表中,只能有一个主键,因此唯一键就是用来解决表中多个字段需要具有唯一性的问题。 唯一键的本质与主键差不多,唯一键默认的允许字段为空...
  • 在mysql中一共有6属性:null,默认值,列描述,主键,唯一键和自增长. NULL属性 NULL属性代表字段为空. 如果对应的为yes表示该字段允许为null, 注意: 1. 设计表的时候尽量不要让数据为空. 2. mysql记录长度为...
  • 数据库表的主键、唯一约束和索引

    千次阅读 2021-11-23 17:31:46
    1、MySQL 的 主键。...(2)主键必须唯一标识表中的每一行,且不能为 NULL,即同一表中不可能存在两行数据有相同的主键值。 2、MySQL 的 唯一约束。  MySQL唯一约束(Unique Key)是指所有记录中字
  • 主键约束和唯一约束

    千次阅读 2019-03-07 21:30:59
    主键约束和唯一约束主键约束和唯一约束的区别普通索引和唯一索引Mysql中的索引普通索引(非...不同之处在于主键约束的索引(唯一索引)在定义上不允许为NULL,而唯一约束的索引(唯一索引)在定义上允许为NULL; ...
  • primary key,在一张表中,有且只有一字段,里面的值具有唯一性 创建主键 系统提供了两种增加主键地方式 1、直接在需要当作主键的字段之后,增加primary key属性来确定主键 2、在所有字段之后增加primary ...
  • 本文代码实现基本按照《数据结构》课本目录顺序,外加大量的复杂算法实现,一篇文章足够。能换你一收藏了吧?
  • CREATE TABLE IF NOT EXISTS `ppserver`.`eventTable`( `userId` INT UNSIGNED NOT null, `taskId` INT UNSIGNED NOT null, `date` TIMESTAMP DEFAULT CURREN
  • 列属性 列属性又称之为字段属性,在mysql中一共有6属性:null,默认值,列描述,主键,唯一键和自动增长Null属性NULL属性:代表字段为空如果对应的为YES表示该字段可以NULL 注意:1、 在设计表的时候,尽量...
  • 逻辑删除与唯一约束冲突问题的一解决方案

    千次阅读 多人点赞 2020-08-27 21:19:41
    一、问题 现在很系统都不允许真正删除数据库中的数据,而是通过引入删除标记字段的方式进行假删除,...但是逻辑删除会面临一违反唯一约束的问题。比如一商品表: create table goods ( id bigint primary...
  • MySQL中列属性(主键、唯一键和自增等)使用实践

    万次阅读 多人点赞 2017-05-12 09:26:29
    数据表中,真正约束字段的是数据类型。但是数据类型的约束很单一,需要有一些额外的约束,来更加保证数据的合法性。查看表数据结构 红色表示数据类型;...COMMENT【1】空属性其有两个值null(默认值) 和 not nul
  • null值介绍  NULL是数据库中特有的数据类型,当一条记录的某个列为NULL,则表示这列的值是未知的、是不确定的。既然是未知的,就有无数种的可能性。因此,NULL并不是一确定的值。  这是NULL的由来、也是NULL...
  • MySQL避免插入重复记录:唯一性约束

    万次阅读 2018-03-26 08:31:55
    mysql在存在主键冲突或者唯一键冲突的情况下,根据插入策略不同,一般有以下三种避免方法。1、insert ignore2、replace into3、insert on duplicate key update注意,除非表有一PRIMARY KEY或UNIQUE索引,否则,...
  • .net的通用Dictionary集合类有一唯一约束。考虑这样一种情况:你想在Dictionary中存Author Name以及Articles。首先,你想加入Bob->Article_Good_One,而当你想加入Bob->Article_Good_Second,你将得
  • 1、简单属性 1.1、NULL和default null就是空,default就是默认值,在创建表的时候使用的 create table my_default( name varchar(10) NOT NULL,--...--只增加一名字 insert into my_default(name) values('Tom'...
  • mysql 主键,外键,唯一键,索引的区别

    千次阅读 2016-07-23 10:02:53
    转载:http://blog.csdn.net/duck_arrow/article/details/8264686 ... 主键(primary key) 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以多个候选索引。主键常常与外键构成参照完整性约束,
  • Mysql主键和唯一键的区别点总结

    千次阅读 2019-09-25 23:20:42
    主键是表中唯一标识该表中每元组(行)的列。主键对表实施完整性约束。表中只允许使用一主键。主键不接受任何重复和空值。表中的主键很少更改,因此在选择主键是需要小心,要选择很少发生更改的地方。一表...
  • mysql索引(七)唯一索引

    千次阅读 2021-07-19 11:17:54
    唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的必须唯一,但允许有空值。 主键索引(PRIMARY):它 是一种特殊的唯一索引,不允许有空值。 全文索引(FULLTEXT ):可用于 MyISAM 表,mysql5.6之后也可...
  • 主键约束、唯一性约束、唯一索引

    千次阅读 2018-07-22 00:23:40
    3) 主键列上没有任何两行具有相同(即重复),不允许空(NULL). 4) 主健可作外健,唯一索引不可; 2.唯一性约束(UNIQUE) 1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可...
  • SQL_UNIQUE 约束 关键字解析

    千次阅读 2021-01-20 04:12:04
    SQL UNIQUE 约束语法:MySQL:CREATE TABLE Persons(Id_P int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),UNIQUE (Id_P))SQL Server / Oracle / MS ...
  • 唯一约束和唯一索引区别

    千次阅读 2017-09-21 21:02:55
    1) 主键用于唯一地标识表中的每一条记录,可以定义一列或列为主。 2) 是不可能(或很难)更新. 3) 主键列上没有任何两行具有相同(即重复),不允许空(NULL).4) 主健可作外健,唯一索引不可; 2....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,114
精华内容 34,845
关键字:

唯一键可以具有多个null值