1. 程式人生 > >為已存在的表新增約束(練習1)

為已存在的表新增約束(練習1)

1、建立資料庫表:

--將當前資料庫設定為E_Market,以便在E_Market資料庫中建立表
USE E_Market
GO

--建立會員資訊表
IF EXISTS(SELECT * FROM sysobjects WHERE name='UserInfo')
DROP TABLE UserInfo
GO
CREATE TABLE UserInfo
(
	UserId VARCHAR(20) NOT NULL,--會員號
	UserPwd VARCHAR(50) NOT NULL,--會員密碼
	UserName VARCHAR(50) NOT NULL,--會員名
	Gender INT NOT NULL,--性別
	Email VARCHAR(50),--郵箱
	UserAddress VARCHAR(200),--聯絡地址
	Phone VARCHAR(20) NOT NULL--聯絡電話
)
GO

--建立訂單表
IF EXISTS(SELECT * FROM sysobjects WHERE name='OrderInfo')
DROP TABLE OrderInfo
GO
CREATE TABLE OrderInfo
(
	OrderId INT IDENTITY(1,1) NOT NULL,--訂單編號
	UserId VARCHAR(20) NOT NULL,--外來鍵,引用UserInfo表的主鍵
	CommodityId INT NOT NULL,--外來鍵,引用商品資訊表的主鍵
	Amount INT NOT NULL,--數量
	PayMoney BIGINT NOT NULL,--付貨總金額
	PayWay VARCHAR(50) NOT NULL,--付款方式
	OrderTime DATETIME NOT NULL,--下單日期
	Confirm INT NOT NULL,--是否確認收,1表示確認,0表示沒有確認,預設0
	SendGoods INT NOT NULL --是否發貨,0沒發,1發貨,預設0
)
GO

--建立商品類別表
IF EXISTS(SELECT * FROM sysobjects WHERE name='CommoditySort')
DROP TABLE CommoditySort
GO
CREATE TABLE CommoditySort
(
	SortId  INT IDENTITY(1,1) NOT NULL,--商品類別編號,主鍵,自動增長
	SortName VARCHAR(50) NOT NULL--商品類別名稱
)
GO

--建立商品資訊表
IF EXISTS(SELECT * FROM sysobjects WHERE name='CommodityInfo')
DROP TABLE CommodityInfo
GO
CREATE TABLE CommodityInfo
(
	CommodityId int IDENTITY(1,1) NOT NULL,--商品編號
	SortId int NOT NULL,--商品類別編號,外來鍵
	CommodityName varchar(50) NOT NULL,--商品名稱
	Picture image ,--商品圖片
	InPrice float NOT NULL,--商品進貨價
	OutPrice float NOT NULL,--商品銷售價格
	Amount int --商品庫存量	
)
GO

--查詢各張表
SELECT * FROM CommoditySort
SELECT * FROM CommodityInfo
SELECT * FROM UserInfo
SELECT * FROM OrderInfo
2、為以上表新增約束:
USE E_Market-- 指向當前所操作的資料庫
GO
--為使用者表UserInfo新增約束
ALTER TABLE UserInfo
ADD CONSTRAINT PK_UserId PRIMARY KEY (UserId),
	CONSTRAINT CK_UserPwd CHECK(LEN(UserPwd)>=6), --密碼長度約束
	CONSTRAINT CK_Gender CHECK(Gender=0 OR Gender=1), --為性別新增檢查約束
	CONSTRAINT DF_Gender DEFAULT(0) FOR Gender, --性別預設為“0”(男)
	CONSTRAINT CK_Email CHECK(Email LIKE '%@%') --郵箱賬號中必須包含“@”
GO

--為商品資訊表CommodityInfo新增約束
ALTER TABLE CommodityInfo
ADD CONSTRAINT PK_CommodityId PRIMARY KEY (CommodityId)
GO

--為訂單表OrderInfo新增約束
ALTER TABLE OrderInfo
ADD CONSTRAINT PK_OrderId PRIMARY KEY (OrderId),
	CONSTRAINT FK_UserId FOREIGN KEY(UserId) REFERENCES UserInfo(UserId), --新增外來鍵約束:OrderInfo(UserId)作為外來鍵關聯到UserInfo(UserId)(主鍵).
	CONSTRAINT FK_CommodityId FOREIGN KEY(CommodityId) REFERENCES CommodityInfo(CommodityId),
	CONSTRAINT DF_PayWay DEFAULT('網上銀行') FOR PayWay, --為PayWay新增預設約束
	CONSTRAINT CK_Confirm CHECK(Confirm=0 OR Confirm=1), 
	CONSTRAINT DF_Confirm DEFAULT(0) FOR Confirm, --預設為數字0
	CONSTRAINT CK_SendGoods CHECK(SendGoods =0 OR SendGoods=1),
	CONSTRAINT DF_SendGoods DEFAULT(0) FOR SendGoods
GO

--[1]外來鍵約束注意:型別、長度必須與引用的主鍵列的型別、長度必須完全一致
--[2]外來鍵約束注意引用的表中必須要有主鍵列

--為商品類別表新增約束
ALTER TABLE CommoditySort
ADD CONSTRAINT PK_SortId PRIMARY KEY (SortId)
GO

--為CommodityInfo表中新增沒有添完的約束
ALTER TABLE CommodityInfo
ADD CONSTRAINT FK_SortId FOREIGN KEY (SortId) REFERENCES CommoditySort(SortId)
GO