《数据库系统概论》(第5版)P120:
空值的约束条件
属性定义(或者域定义)中有NOT NULL约束条件的不能取空值,码属性不能取空值。
课件中:空值的约束条件为:
有NOT NULL约束条件的不能取空值
加了UNIQUE限制的属性不能取空值
码属性不能取空值
关于“加了UNIQUE限制的属性不能取空值”,创建表时,将属性设置为unique null约束。
MySQL8.0.22版本:
create table Book
(
Bookid varchar(20) primary key not null,
Bookname varchar(40) unique,
Typeid int,
Author varchar(30),
Price varchar(10),
Regdate datetime,
State varchar(10),
constraint fk_图书分类 foreign key (Typeid) references Booktype(Typeid)
);
INSERT INTO book VALUES ('141701', null, '1', '乔斯坦·贾德', '38', '20171010', '可借');
INSERT INTO book VALUES ('141702', null, '1', '乔斯坦·贾德', '38', '20171010', '可借');
两个插入语句均执行成功,查询:
select * from book;
结果如下图:
在SQL server 2014中,设置Cname为unique null约束,
执行代码:
insert into Course values('16020022',null,48,3);
成功,
插入:
insert into Course values('16020024',null,48,3);
失败,错误提示为:
查询显示:
若将属性定义为unique not null,则MySQL和SQL Server中均不允许插入空值。
MySQL中:
SQL Server中: