MySQL唯一约束(Unique Key)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。
MySQL 非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。
非空约束(Not Null Constraint)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
在定义完列之后直接使用 UNIQUE 关键字指定唯一约束,语法规则如下:
<字段名> <数据类型> UNIQUE
创建表时可以使用 NOT NULL 关键字设置非空约束,具体的语法规则如下:
<字段名> <数据类型> NOT NULL;
示例:创建一个学生表,设名字不能为空值且唯一
CREATE TABLE student4 (
CODE INT PRIMARY KEY,
NAME VARCHAR (50) NOT NULL UNIQUE, -- 加非空约束 -- 唯一约束
sex CHAR (2) DEFAULT '男',
phone CHAR (18),
age INT CHECK (age BETWEEN 17 AND 22),
enter_time date
);
DESC student4;
INSERT INTO student4(CODE,NAME,sex,phone,age,enter_time)
VALUES(
1112,
'王健林',
'男',
'19887678767',
21,
now()
);
INSERT INTO student4
VALUES(
1113,
'王健林',
'男',
'13886787679',
20,
now()
);
和默认值约束一样,修改约束条件的语法相似
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
<字段名> <数据类型> NOT NULL;
ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);
比如我现在想把上面的手机号修改成非空且唯一,操作如下:
ALTER TABLE student4
CHANGE COLUMN phone
phone CHAR(18) NOT NULL UNIQUE;
DESC student4;
INSERT INTO student4(CODE,NAME,sex,phone,age,enter_time)
VALUES(1118,'刘强东','男','19887678767',21,now());
INSERT INTO student4
VALUES(1119,'李彦宏','男','19887678767',20,now());
删除操作就是将他们的条件赋空值或者清除掉
ALTER TABLE <表名> DROP INDEX <唯一约束名>;
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;
感兴趣的读者可以自行调试,这里不再展开