《数据库系统概论》(第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;

结果如下图:

java unique约束抛出异常 unique约束中不允许出现空值_SQL


在SQL server 2014中,设置Cname为unique null约束,

java unique约束抛出异常 unique约束中不允许出现空值_sql_02


执行代码:

insert into Course values('16020022',null,48,3);

成功,
插入:

insert into Course values('16020024',null,48,3);

失败,错误提示为:

java unique约束抛出异常 unique约束中不允许出现空值_SQL_03


查询显示:

java unique约束抛出异常 unique约束中不允许出现空值_数据库_04


若将属性定义为unique not null,则MySQL和SQL Server中均不允许插入空值。

MySQL中:

java unique约束抛出异常 unique约束中不允许出现空值_SQL_05

SQL Server中:

java unique约束抛出异常 unique约束中不允许出现空值_mysql_06