1.定義基本表語句
語法:
USE 數據庫名 CREATE TABLE 表名 (列名 類型(大小) DEFAULT'默認值',
列名 類型(大小) DEFAULT'默認值',
列名 類型(大小) DEFAULT'默認值',
... ...);
注:綠色部份是可以省略的。
例:CREATE TABLE S (SNO char(2), SNAME char(8), AGE decimal(2), SEX char(2) DEFAULT'男', DEPT char(2));
創建了一個五列的表,其中第四列的默認值為‘男’。
--------------------------------------------------------------------------------
2.定義完整性約束
語法:
USE 數據庫名 CREATE TABLE 表名 (列名 類型(大小) DEFAULT'默認值' CONSTRAINT 約束名 約束定義,
列名 類型(大小) DEFAULT'默認值' CONSTRAINT 約束名 約束定義,
列名 類型(大小) DEFAULT'默認值' CONSTRAINT 約束名 約束定義,
... ...);
注:(1) 綠色部份是可以省略的。
(2) 一個列是可以有多個約束的。
約束定義:
(1)NULL | NOT NULL 用于定義列的空值約束。(定義列) (下面的藍色部份是單選其中之一)
語法:CONSTRAINT 約束名 NULL | NOT NULL
注意:
a. NOT NULL 約束強制列不接受 NULL 值。
b. NOT NULL 約束強制字段始終包含值。這意味著,如果不向字段添加值,就無法插入新紀錄或者更新記錄。
例:
下面的 SQL 語句強制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
(2)UNIQUE 約束唯一標識數據庫表中的每條記錄。(即可以定義列也可能定義表)
語法:CONSTRAINT 約束名 UNIQUE (列名, 列名, ... ...);
說明:用于指定基本表在某一個列或多個列的組合上取值必須唯一。定義了UNIQUE約束的那些列稱為唯一鍵。如果為基本表的革一列或多個列的組合指定了UNIQUE約束,則系統將為這些列建立唯一索引,從而保證在表中的任意兩行記錄在指定的列或列組合上不能取同樣的值。
注意:
a. UNIQUE 約束唯一標識數據庫表中的每條記錄。
b. UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證。
c. PRIMARY KEY 擁有自動定義的 UNIQUE 約束。
d.請注意,每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。
例:
下面的 SQL 在 "Persons" 表創建時在 "Id_P" 列創建 UNIQUE 約束:
MySQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
SQL Server / Oracle / MS access:
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名 UNIQUE 約束,以及為多個列定義 UNIQUE 約束,請使用下面的 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 UNIQUE (Id_P,LastName)
)
(3)PRIMARY KEY 約束唯一標識數據庫表中的每條記錄。(即可以定義列也可能定義表)
語法:CONSTRAINT 約束名 PRIMARY KEY (列名, 列名, ... ...);
說明:用于定義基本表的主鍵。與UNIQUE約束類似,PRIMARY KEY 約束也是通過建立唯一索引來保證基本表在主鍵列(某一個列或多個列的組合)上取值的唯一性。然而它們之間也存在著很大差別:在一個基本表中只能定義一個 PRIMARY KEY 約束,卻能定義多個UNIQUE約束。如果為基本表的某一個列或多個列的組合指定了 PRIMARY KEY 約束,那么其中在任何一個列都不能出現空值;而 UNIQUE 約束允許出現空值。
注意:
a. 主鍵必須包含唯一的值。
b. 主鍵列不能包含 NULL 值。
c. 每個表應該都一個主鍵,并且每個表只能有一個主鍵。
例:
下面的 SQL 在 "Persons" 表創建時在 "Id_P" 列創建 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)
)
(4)FOREIGN KEY 外鍵 (即可以定義列也可能定義表)
語法:CONSTRAINT 約束名 FOREIGN KEY (列名, 列名, ... ...) REFERENCES (列名, 列名, ... ...) ;
說明:指定某一個列或多個列的組合作為外部鍵,并在外部鍵和它所引用的主鍵或唯一鍵之間建立聯系。在這種聯系中,包含外部鍵的基本表稱為從表,包含外部鍵引用的主鍵或唯一鍵的表稱為主表。一旦為一列或列的組合定義了 FOREIGN KEY 約束,系統將保證從表在外部鍵上的取值要么是主表中某一個主鍵值或唯一鍵值,要么取空值。
注意:
a.在REFERENCES 中引用的列必須和 FOREIGN KEY 的外部鍵列一一對應,即列數目相等并且相應列的數據類型相同。
例:
下面的 SQL 在 "Orders" 表創建時為 "Id_P" 列創建 FOREIGN KEY:
MySQL:
CREATE TABLE Orders
(
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)
)
(5)CHECK 約束用于限制列中的值的范圍。 (即可以定義列也可能定義表)
語法:CONSTRAINT 約束名 CHECK (約束條件);
說明:用于指定基本表中的每一條記錄必須滿足的條件,可以對基本表在各個列上的值做進一步的約束,如成績列的取值既不能大于100,也不能小于0。
注意:
a. 如果對單個列定義 CHECK 約束,那么該列只允許特定的值。
b. 如果對一個表定義 CHECK 約束,那么此約束會在特定的列中對值進行限制。
例:
下面的 SQL 在 "Persons" 表創建時為 "Id_P" 列創建 CHECK 約束。CHECK 約束規定 "Id_P" 列必須只包含大于 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),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)
--------------------------------------------------------------------------------
例:USE lijintao CREATE TABLE S2
(SNO CHAR(2) CONSTRAINT S_PRIM PRIMARY KEY,
SN CHAR(8) CONSTRAINT SN_CONS NOT NULL,
AGE NUMERIC(2) CONSTRAINT AGE_CONS NOT NULL CONSTRAINT AGE_CHK CHECK(AGE BETWEEN 15 AND 45),
SEX CHAR(2) DEFAULT '男' CONSTRAINT SEX_CHK CHECK(SEX = '男' OR SEX = '女'),
DEPT CHAR(2) CONSTRAINT DEPT_CONS NOT NULL);
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Qingqinglanghua/archive/2009/12/21/5051563.aspx