NOT NULL约束
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
下面的 SQL 强制表"Customers" 的"客户ID" 列和 "姓名" 列不接受 NULL 值:
CREATE TABLE Customers( 客户ID INT NOT NULL, 姓名 VARCHAR(10) NOT NULL, 地址 VARCHAR(50) NULL, 城市 VARCHAR(20) NULL, 邮编 CHAR(6) NULL, 省份 VARCHAR(20) NULL ) ;
一旦这两列有空值NULL被插入,系统就会报错提示,例如我们插入如下信息:
INSERT INTO dbo.Customers ( 姓名, 地址, 城市, 邮编, 省份 ) VALUES (NULL,'花城大道1号','广州市','51000',NULL)
结果:
UNIQUE约束
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
CREATE TABLE 时的 SQL UNIQUE 约束
下面的 SQL 在 "Orders" 表创建时在 "订单ID" 列上创建 UNIQUE 约束:
MySQL:
CREATE TABLE dbo.Orders( 订单ID INT NOT NULL, 客户ID INT NULL, 员工ID INT NULL, 订单日期 DATETIME NULL, 发货ID INT NULL, UNIQUE (订单ID) ) ;
SQL Server / Oracle / MS Access:
CREATE TABLE dbo.Orders( 订单ID INT NOT NULL UNIQUE, 客户ID INT NULL, 员工ID INT NULL, 订单日期 DATETIME NULL, 发货ID INT NULL ) ;
唯一约束是被约束的列在插入新数据时,如果和已经存在的列有相同的值,则会报错。
INSERT INTO dbo.Orders ( 订单ID, 客户ID, 员工ID, 订单日期, 发货ID ) VALUES ( 1001,1,2,'2018-11-21 19:21:32',1), ( 1001,2,3,'2018-11-22 11:22:32',5)
结果:
如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE dbo.Orders( 订单ID INT NOT NULL , 客户ID INT NULL, 员工ID INT NULL, 订单日期 DATETIME NULL, 发货ID INT NULL, CONSTRAINT uc_OrderID UNIQUE (订单ID,发货ID) ) ;