CREATE TABLE 时的FOREIGN KEY 约束
下面的 SQL 在 "Orders" 表创建时在 "客户ID" 列上创建 FOREIGN KEY 约束:
MySQL:
CREATE TABLE Orders ( 订单ID INT NOT NULL, 客户ID INT NULL, 员工ID INT NULL, 订单日期 DATETIME NULL, 发货ID INT NULL, PRIMARY KEY (订单ID), FOREIGN KEY (客户ID) REFERENCES Customers(客户ID) )
SQL Server / Oracle / MS Access:
CREATE TABLE Orders ( 订单ID INT NOT NULL PRIMARY KEY, 客户ID INT NULL, 员工ID INT NULL, 订单日期 DATETIME NULL, 发货ID INT NULL, FOREIGN KEY (客户ID) REFERENCES Customers(客户ID) )
如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders ( 订单ID INT NOT NULL, 客户ID INT NULL, 员工ID INT NULL, 订单日期 DATETIME NULL, 发货ID INT NULL, PRIMARY KEY (订单ID), CONSTRAINT fk_CusOrders FOREIGN KEY (客户ID) REFERENCES Customers(客户ID) )
ALTER TABLE 时的FOREIGN KEY 约束
当 "Orders" 表已被创建时,如需在 "客户ID" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders ADD FOREIGN KEY (客户ID) REFERENCES Customers(客户ID)
如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders ADD CONSTRAINT fk_CusOrders FOREIGN KEY (客户ID) REFERENCES Persons(客户ID)
删除 FOREIGN KEY 约束
如需删除FOREIGN KEY 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Orders DROP FOREIGN KEY fk_CusOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders DROP CONSTRAINT fk_CusOrders
DEFAULT约束
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
CREATE TABLE 时的DEFAULT 约束
下面的 SQL 在 "Customers" 表创建时在 "城市" 列上创建 DEFAULT 约束:
My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE dbo.Customers( 客户ID INT NOT NULL, 姓名 VARCHAR(10) NULL, 地址 VARCHAR(50) NULL, 城市 VARCHAR(20) NULL DEFAULT '北京市', 邮编 CHAR(6) NULL, 省份 VARCHAR(20) NULL ) ;
SQL Server中通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
CREATE TABLE dbo.Orders( 订单ID INT NOT NULL, 客户ID INT NULL, 员工ID INT NULL, 订单日期 DATETIME NULL DEFAULT GETDATE(), 发货ID INT NULL ) ;
ALTER TABLE 时的DEFAULT 约束
当表已被创建时,如需在 "城市" 列创建 DEFAULT 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Customers ALTER 城市 SET DEFAULT '北京市'
SQL Server / MS Access:
ALTER TABLE Customers ADD CONSTRAINT DF_Customers DEFAULT('北京市') FOR 城市
--注释
--Customers为表名
--城市 为列名
--DF_Customers 为我们创建的默认约束的名称 约束名称一般为:约束类型简称_表名
Oracle:
ALTER TABLE Customers MODIFY 城市 DEFAULT '北京市'
删除DEFAULT 约束
如需删除DEFAULT 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Customers ALTER 城市 DROP DEFAULT
SQL Server / Oracle / MS Access:
ALTER TABLE Customers ALTER COLUMN 城市 DROP DEFAULT
CHECK约束
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
CREATE TABLE 时的CHECK 约束
下面的 SQL 在 "Customers" 表创建时在 "客户ID" 列上创建 CHECK 约束。CHECK 约束规定 "客户ID" 列必须只包含大于 0 的整数。
MySQL:
CREATE TABLE dbo.Customers( 客户ID INT NOT NULL, 姓名 VARCHAR(10) NULL, 地址 VARCHAR(50) NULL, 城市 VARCHAR(20) NULL, 邮编 CHAR(6) NULL, 省份 VARCHAR(20) NULL, CHECK (客户ID>0) ) ;
SQL Server / Oracle / MS Access:
CREATE TABLE dbo.Customers( 客户ID INT NOT NULL CHECK (客户ID>0), 姓名 VARCHAR(10) NULL, 地址 VARCHAR(50) NULL, 城市 VARCHAR(20) NULL, 邮编 CHAR(6) NULL, 省份 VARCHAR(20) NULL ) ;
如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE dbo.Customers( 客户ID INT NOT NULL, 姓名 VARCHAR(10) NULL, 地址 VARCHAR(50) NULL, 城市 VARCHAR(20) NULL, 邮编 CHAR(6) NULL, 省份 VARCHAR(20) NULL, CONSTRAINT chk_Customers CHECK (客户ID>0 AND 城市='北京市') ) ;
ALTER TABLE 时的CHECK 约束
当表已被创建时,如需在 "客户ID" 列创建 CHECK 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Customers ADD CHECK (客户ID>0)
如需命名 CHECK 约束,并定义多个列的 CHECK 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Customers ADD CONSTRAINT chk_Customers CHECK (客户ID>0 AND 城市='北京市')
删除CHECK 约束
如需CHECK 约束,请使用下面的 SQL:
SQL Server / Oracle / MS Access:
ALTER TABLE Customers DROP CONSTRAINT chk_Customers
MySQL:
ALTER TABLE Customers DROP CHECK chk_Customers
批注
以上六种约束是工作中经常使用到的,主要还是用来规范数据,随着数据量的增多,如果不对表结构加以约束,那么会有越来越多的“脏数据”进入到数据库,这对业务系统来说是非常不愿意碰到的。所以为了能够高效的使用数据库,请从表结构的设计上下更多的功夫。