为已存在的表添加约束(练习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

你可能感兴趣的:(SQL,Server)