SQL语句(七)实体完整性

1.实体完整性

       简单的说,实体完整性就是数据库表的主码唯一且不为空。主码可以是关系的一个属性(即数据库表的一列),也可以是关系的属性组(即表格的多个列),主码可以唯一的标识元组(即数据库表的一行)。

2.实例

1. 创建表时定义列级实体完整性
①定义供应商表的实体完整性
CREATE TABLE supp(/*供应商基本表*/
   suppkey INTEGER CONSTRAINT supp_1 PRIMARY KEY, /*供应商编号*/
   name CHAR(50),                          /*供应商名称*/
   address VARCHAR(80),                    /*供应商地址*/
   nation INTEGER REFERENCES nation(nationkey),/*国家编号*/
   phone CHAR(30),                          /*供应商电话*/
   acctbal REAl,
   comment VARCHAR(101)                     /*备注*/
);
②定义地区表的实体完整性
CREATE TABLE regi(/*地区表*/
  regionkey INTEGER CONSTRAINT regi_1 PRIMARY KEY,/*地区编号*/
  name CHAR(25),                           /*地区名称*/
  comment CHAR(152)                        /*备注*/
);
2. 创建表时定义表级实体完整性
①定义供应商表的实体完整性
CREATE TABLE supp2(/*供应商基本表*/
   suppkey INTEGER ,                        /*供应商编号*/
   name CHAR(50),                          /*供应商名称*/
   address VARCHAR(80),                    /*供应商地址*/
   nation INTEGER REFERENCES nation(nationkey),/*国家编号*/
   phone CHAR(30),                          /*供应商电话*/
   acctbal REAl,
   comment VARCHAR(101) ,                    /*备注*/
   CONSTRAINT supp_2 PRIMARY KEY(suppkey)
);
②定义地区表的实体完整性
CREATE TABLE regi2(/*地区表*/
  regionkey INTEGER ,                       /*地区编号*/
  name CHAR(25),                           /*地区名称*/
  comment CHAR(152),                       /*备注*/
  CONSTRAINT regi_2 PRIMARY KEY(regionkey)
);
3.定义表后定义实体完整性
CREATE TABLE part2(--先定义零件基本表
  partkey INTEGER NOT NULL,                /*零件编号*/
  name VARCHAR(100),                       /*零件名称*/
  mfgr CHAR(50),                           /*制造厂*/
  brand VARCHAR(50),                       /*品牌*/
  type VARCHAR(25),                        /*零件类型*/
  size INTEGER,                            /*尺寸*/
  container CHAR(10),                      /*包装*/
  retailprice REAL,                        /*零售价格*/
  comment VARCHAR (23)                     /*备注*/
);
ALTER TABLE part2--再修改零件基本表,增加实体完整性
ADD CONSTRAINT partkey_1 PRIMARY KEY(partkey);

4.主码由多个属性组成时,定义实体完整性
CREATE TABLE partsupp2(/*零件供应联系表*/
  partkey INTEGER ,/*零件编号*/
  suppkey INTEGER ,/*供应商编号*/
  availqty INTEGER,/*可用数量*/
  supplycost REAL,/*供应价格*/
  comment VARCHAR(199),/*备注*/
  PRIMARY KEY(partkey,suppkey)/*定义主码*/
  );

5.有多个候选码时定义实体完整性
CREATE TABLE nation2(/*国家表*/
  nationkey INTEGER  ,                           /*国家编号*/
  name CHAR(25) UNIQUE,                           /*国家名称*/
  regionkey INTEGER REFERENCES region(regionkey),/*地区编号*/
  comment VARCHAR(152),                     /*备注*/
  CONSTRAINT nationkey_2 PRIMARY KEY(nationkey)
);

6.删除实体完整性
ALTER TABLE part2
DROP CONSTRAINT partkey_1;
7.增加记录,验证实体完整性是否起到作用
SELECT *
FROM nation;

INSERT
INTO nation
VALUES(40,'中华人民共和国',1,'china');

3.注意

可以使用CONSTRAINT 对实体完整性命名,方便对其修改和删除。

你可能感兴趣的:(本科课程)