SQL PRIMARY KEY Constraint on CREATE TABLE
下面的 SQL 在 \表创建时在 \列创建 PRIMARY KEY 约束: MySQL:
CREATE TABLE Persons (
Id_P int NOT NULL,
LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (Id_P) )
SQL Server / Oracle / MS Access: CREATE TABLE Persons (
Id_P int NOT NULL PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
Id_P int NOT NULL,
LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255),
CONSTRAINT uc_PersonID PRIMARY KEY (Id_P,LastName) )
SQL PRIMARY KEY Constraint on ALTER TABLE
如果在表已存在的情况下为 \列创建 PRIMARY KEY 约束,请使用下面的 SQL: MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
31
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
注释:如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。
撤销 PRIMARY KEY 约束
如需撤销 PRIMARY KEY 约束,请使用下面的 SQL: MySQL:
ALTER TABLE Persons DROP PRIMARY KEY
SQL Server / Oracle / MS Access: ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
SQL FOREIGN KEY 约束
SQL FOREIGN KEY 约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。 让我们通过一个例子来解释外键。请看下面两个表: \表: Id_P 1 2 3 \表: Id_O 1 2 3 4 OrderNo 77895 44678 22456 24562 Id_P 3 3 1 1 LastName Adams Bush Carter FirstName John George Thomas Address Oxford Street Fifth Avenue Changan Street City London New York Beijing 请注意,\中的 \列指向 \表中的 \列。 \表中的 \列是 \表中的 PRIMARY KEY。 \表中的 \列是 \表中的 FOREIGN KEY。 FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。 SQL FOREIGN KEY Constraint on CREATE TABLE
下面的 SQL 在 \表创建时为 \列创建 FOREIGN KEY: MySQL:
CREATE TABLE Orders (
32
O_Id int NOT NULL, OrderNo int NOT NULL, Id_P int,
PRIMARY KEY (O_Id),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) )
SQL Server / Oracle / MS Access:
CREATE TABLE Orders (
O_Id int NOT NULL PRIMARY KEY, OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P) )
如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access: CREATE TABLE Orders (
O_Id int NOT NULL, OrderNo int NOT NULL, Id_P int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P) REFERENCES Persons(Id_P) )
SQL FOREIGN KEY Constraint on ALTER TABLE
如果在 \表已存在的情况下为 \列创建 FOREIGN KEY 约束,请使用下面的 SQL: MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Orders
ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
撤销 FOREIGN KEY 约束
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
33
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders SQL Server / Oracle / MS Access: ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
SQL CHECK 约束 SQL CHECK 约束
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
SQL CHECK Constraint on CREATE TABLE
下面的 SQL 在 \表创建时为 \列创建 CHECK 约束。CHECK 约束规定 \列必须只包含大于 0 的整数。 My SQL:
CREATE TABLE Persons (
Id_P int NOT NULL,
LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CHECK (Id_P>0) )
SQL Server / Oracle / MS Access: CREATE TABLE Persons (
Id_P int NOT NULL CHECK (Id_P>0), LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法: MySQL / SQL Server / Oracle / MS Access: CREATE TABLE Persons (
Id_P int NOT NULL,
LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255),
34
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') )
SQL CHECK Constraint on ALTER TABLE
如果在表已存在的情况下为 \列创建 CHECK 约束,请使用下面的 SQL: MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Persons ADD CHECK (Id_P>0)
如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法: MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes') 撤销 CHECK 约束
如需撤销 CHECK 约束,请使用下面的 SQL: SQL Server / Oracle / MS Access: ALTER TABLE Persons
DROP CONSTRAINT chk_Person
SQL DEFAULT 约束 SQL DEFAULT 约束
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新纪录。
SQL DEFAULT Constraint on CREATE TABLE
下面的 SQL 在 \表创建时为 \列创建 DEFAULT 约束: My SQL / SQL Server / Oracle / MS Access: CREATE TABLE Persons (
Id_P int NOT NULL,
LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255),
City varchar(255) DEFAULT 'Sandnes' )
通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值: CREATE TABLE Orders (
Id_O int NOT NULL, OrderNo int NOT NULL, Id_P int,
OrderDate date DEFAULT GETDATE()
35