79 lines
3.6 KiB
Transact-SQL
79 lines
3.6 KiB
Transact-SQL
Use TPCH;
|
||
Go
|
||
-- (1) 创建表时定义实体完整性(列级实体完整性)
|
||
-- 定义供应商表的实体完整性。
|
||
CREATE TABLE Sales_Exp3.Supplier(
|
||
suppkey INT CONSTRAINT PK_Supplier PRIMARY KEY,
|
||
name CHAR(25),
|
||
address VARCHAR(40),
|
||
nationkey INT,
|
||
phone CHAR(15),
|
||
acctbal REAL,
|
||
comment VARCHAR(101)
|
||
);
|
||
Go
|
||
DROP TABLE Sales_Exp3.Supplier;
|
||
Go
|
||
-- (2) 创建表时定义实体完整性(表级实体完整性)
|
||
-- 定义供应商表的实体完整性。
|
||
CREATE TABLE Sales_Exp3.Supplier (
|
||
suppkey INT,
|
||
name CHAR(25),
|
||
address VARCHAR(40),
|
||
nationkey INT,
|
||
phone CHAR(15),
|
||
acctbal REAL,
|
||
comment VARCHAR(101),
|
||
CONSTRAINT PK_Supplier PRIMARY KEY (suppkey)
|
||
);
|
||
Go
|
||
DROP TABLE Sales_Exp3.Supplier;
|
||
Go
|
||
-- (3) 创建表后定义实体完整性
|
||
-- 定义供应商表。
|
||
CREATE TABLE Sales_Exp3.Supplier (
|
||
suppkey INT NOT NULL,
|
||
name CHAR(25),
|
||
address VARCHAR(40),
|
||
nationkey INT,
|
||
phone CHAR(15),
|
||
acctbal REAL,
|
||
comment VARCHAR(101)
|
||
);
|
||
ALTER TABLE Sales_Exp3.Supplier /* 再修改供应商表,增加实体完整性 */
|
||
ADD CONSTRAINT PK_Supplier PRIMARY KEY (suppkey);
|
||
Go
|
||
-- (4) 定义实体完整性(主码由多个属性组成)
|
||
-- 定义供应关系表的实体完整性。
|
||
CREATE TABLE Sales_Exp3.PartSupp (
|
||
partkey INT,
|
||
suppkey INT,
|
||
availqty INT,
|
||
supplycost REAL,
|
||
comment VARCHAR(199),
|
||
PRIMARY KEY (partkey, suppkey)
|
||
);
|
||
/* 主码由多个属性组成,实体完整性必须定义在表级 */
|
||
Go
|
||
-- (5) 有多个候选码时定义实体完整性
|
||
-- 定义国家表的实体完整性,其中nationkey和name都是候选码,选择nationkey作为主码,name上定义唯一性约束。
|
||
CREATE TABLE Sales_Exp3.nation (
|
||
nationkey INT CONSTRAINT PK_Nation PRIMARY KEY,
|
||
name CHAR(25) UNIQUE,
|
||
regionkey INT,
|
||
comment VARCHAR(152)
|
||
);
|
||
Go
|
||
-- (6) 删除实体完整性
|
||
-- 删除国家实体的主码。
|
||
ALTER TABLE Sales_Exp3.nation
|
||
DROP CONSTRAINT PK_Nation;
|
||
Go
|
||
-- (7) 增加两条相同记录,验证实体完整性是否起作用
|
||
/* 插入两条主码相同的记录就会违反实体完整性约束 */
|
||
INSERT INTO Sales_Exp3.Supplier (suppkey, name, address, nationkey, phone, acctbal, comment)
|
||
VALUES (11, 'test1', 'test1_addr', 101, '12345678', 0.0, 'test1_comment');
|
||
INSERT INTO Sales_Exp3.Supplier (suppkey, name, address, nationkey, phone, acctbal, comment)
|
||
VALUES (11, 'test2', 'test2_addr', 102, '23456789', 0.0, 'test2_comment');
|
||
Go
|
||
/* [23000][2627] 行 5: 违反了 PRIMARY KEY 约束“PK_Supplier”。不能在对象“Sales_Exp3.Supplier”中插入重复键。重复键值为 (11)。 */ |