唯一的区别就是:
前者:不允许有空值
后者:可以有一个空值
对后者实验:
前者:不允许有空值
后者:可以有一个空值
对后者实验:
[db2inst@rhel5 ~]$ db2 "create table nnull(aaa varchar(7))" --建表
DB20000I The SQL command completed successfully.
[db2inst@rhel5 ~]$
[db2inst@rhel5 ~]$ db2 "create unique index x on nnull(aaa)" --建索引
DB20000I The SQL command completed successfully.
[db2inst@rhel5 ~]$
[db2inst@rhel5 ~]$ db2 "insert into nnull values('')" --insert空值
DB20000I The SQL command completed successfully.
[db2inst@rhel5 ~]$ db2 "commit"
DB20000I The SQL command completed successfully.
[db2inst@rhel5 ~]$ db2 "insert into nnull values('')" --再insert空值就失败了
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0803N One or more values in the INSERT statement, UPDATE statement, or
foreign key update caused by a DELETE statement are not valid because the
primary key, unique constraint or unique index identified by "1" constrains
table "DB2INST.NNULL" from having duplicate values for the index key.
SQLSTATE=23505