一.表的創建:
CREATE TABLE [database_name.[schema_name].|schema_name.]table_name
(column_name1 data_type --列名
[ DEFAULT constant_expression] --約束類型
[ IDENTITY ( SEED, INCREMENT )] --列標識
[ NULL | NOT NULL ][ ,…n] --是否允許為空
)
[ON { filegroup | DEFAULT } ] --所在文件組
例.為sales數據庫在文件組USER1上創建Category種類表
use sales
CREATE TABLE Category
(CategoryID int NOT NULL,
CategoryName nvarchar(15),
Description nvarchar(200),
NodeID char(8) IDENTITY(1,1) --標識列標識從1開始遞增,每次增幅為1
)
ON USER1
二.表結構的修改--增加、刪除、修改列:
ALTER TABLE table_name
{ ADD column_name date_type [DEFAULT contant_expression]
[IDENTITY(SEED,INCREMENT)] [NULL | NOT NULL] [ ,…n]
| DROP COLUMN column_name
| ALTER COLUMN column_name new_datetype [NULL | NOT NULL ]
}
例.在數據庫test的表Custom中增加Address列
ALTER TABLE Custom
ADD Address char(20)
刪除xx列
ALTER TABLE Custom
DROP COLUMN xx
修改列:將Custom表中的Address字段的長度改為30,且不能為空
ALTER TABLE Custom
ALTER COLUMN Address char(30) not null
三.修改表中的內容--插入、刪除:
1.在表中插入數據:
INSERT [ INTO ] table_name [ ( column_name [,…n] ) ]
VALUES ( expression | NULL | DEFAULT [,…n] )--expression為要插入的值,字符型與日期類型要加 ' ' 號
例.在表Seller中插入下面數據
INSERT INTO Seller(SaleID,SaleName,Sex,Birthday,HireDate,Address,Telephone,Notes)
VALUES('01','張三',DEFAULT,'1974-07-25',NULL,NULL,NULL,DEFAULT)
--其中空值(null)可以不寫出來,對應的列名也不必列出,對有默認值的可以使用DEFAULT使用默認值
--具有IDENTITY屬性的列,其值由系統給出,用戶不必向表中插入數據。
2.修改表中數據:
UPDATE table_name
SET column_name=expression [,…n]
[ WHERE search_conditions ]
3.刪除表中數據:
DELETE [ FROM ] table_name
[ WHERE search_conditions]
四.創建表的約束:
總的語法格式:
CREATE TABLE table_name
( column_name data_type [ [ CONSTRAINT constraint_name ] constraint_type ]
[,…n] )
在已經創建的表中添加約束:
ALTER TABLE table_name
[ WITH CHECK | WITH NOCHECK ]
ADD [ CONSTRAINT constraint_name ] constraint_type
--WITH CHECK | WITH NOCHECK代表新加入的約束對表中現有的數據是否進行檢查。
刪除約束:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name
1.創建主鍵約束:主鍵用於唯一地標識表中每一條記錄。可以定義表中的一列或多列為主鍵。主鍵列的值不能重復,也不能為空值。
[ CONSTRAINT constraint_name ] PRIMARY KEY [ CLUSTERED | NONCLUSTERED ]
( col_name [,…n])
2.創建唯一約束:指定列上不可以有重復值
[ CONSTRAINT constraint_name ] UNIQUE [ CLUSTERED | NONCLUSTERED ]
( col_name [,…n])
3.創建CHECK約束:用來指定某列的可取值的范圍。
[ CONSTRAINT constraint_name ] CHECK (exp) --exp是表達式(表示條件、范圍)
--作用:當向該表執行插入或更新操作時,SQL Server會檢查插入的新列值是否滿足CHECK約束的條件,若不滿足,系統會報錯,並拒絕執行插入或更新操作。
--注意:不能在具有IDENTITY屬性的列上設置CHECK約束。
4. 創建DEFAULT約束:給表中指定列賦予默認值,當向該表插入數據時,如果用戶沒有明確給出該列的值,SQL Server會自動為該列輸入默認值。每列只能有一個DEFAULT約束。
[ CONSTRAINT constraint_name ] DEFAULT (expression | NULL) FOR column_name
5.外鍵約束(Foreign key): 用於與其他表(主鍵表)中的列(稱為主鍵列)建立連接。
[ CONSTRAINT constraint_name ]
FOREIGN KEY (col_name1[,…n])
REFERENCES table_name(column_name1[,…n])
其中:
col_name1[,…n]:是要實現外鍵約束的列。
table_name:是主鍵表(參照表)表名。
column_name1[,…n]:是主鍵列(參照列)列名。
例.
例3.31 若sales數據庫中包含Seller表和Customer表。
Seller(SaleID、SaleName)
Customer(CustomerID、Company)
新建表Orders(OrderID、CustomerID、SaleID,OrderDate)
其中CustomerID、SaleID為外鍵。
CREATE TABLE Orders
(Orderid int PRIMARY KEY,
CustomerID char(3) REFERENCES Customer(CustomerID),
SaleID char(3) CONSTRAINT fk_sid REFERENCES Seller(SaleID),
OrderDate datetime DEFAULT getdate())
例. 修改OrderDetail表,在OrderID列上創建外鍵約束。
ALTER TABLE OrderDetail
ADD CONSTRAINT fk_orderid
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
ALTER TABLE OrderDetail
WITH NOCHECK
ADD CONSTRAINT fk_orderid
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
五.查看約束名:
sp_help student
或者:
sp_helpconstraint student
六.刪除約束:
alter table_name
drop constraint 約束名