Mysql 数据库 第八节 数据完整性(数据库表的设计)主键 外键

                                                 数据完整性(数据库表的设计)

 

实体完整性  对应 每一行数据

1. 什么是实体

  •  数数据库一行 就是一个实体

  •  实体完整性 的作用: 标志每一行数据 不重复, 行级约束

2. 约束类型

主键约束    primary key

唯一约束    unique

自动增长列 auto increment

3. 主键约束

每一个表中需要有一个主键

主键约束该列 数据 不能重复, 且 主键   不能为 null

声明方式:

       1.  在字段上面声明:  列名   类型  primary key

       2.  在最后一列 声明:                    primary key(字段...)

       3.  先创建表,然后使用  ALTER  TABLE 表名 ADD CONSTRAINT PRIMARY KEY (字段)

联合主键:  多个字段 作为 一个主键,

所用       :  多个字段 作为 一个主键 ,多个字段 一起相同, 不相同

      

 

4. 唯一约束

特点: 约束 所 修饰的 字段 必须 唯一, 不能重复, 可以为 null

            也就是说  同一列 不能 有相同的字段, 但是  可以有 多个 null

5. 自动增长列

指定列 的数据 自动 增长, 即使删除数据, 还是会从删除的列 继续往下增长,

声明方式: 字段  或  主键 后面加上  auto_increnment  ,一般配合 主键 或者 unique 使用

DROP TABLE student;

CREATE TABLE student(
	sid  int  PRIMARY KEY COMMENT '学生id',
	sname VARCHAR(30) COMMENT '学生姓名'
)

CREATE TABLE student(
	sid  int  COMMENT '学生id',
	sname VARCHAR(30) COMMENT '学生姓名',
	PRIMARY KEY(sid)
)

ALTER TABLE student ADD CONSTRAINT PRIMARY KEY(sid)


CREATE TABLE student(
	sid  int  COMMENT '学生id' UNIQUE,
	sname VARCHAR(30) COMMENT '学生姓名' 
)

CREATE TABLE student(
	sid  int  AUTO_INCREMENT COMMENT '学生id',
	sname VARCHAR(30) COMMENT '学生姓名',
  PRIMARY KEY(sid)	
)


INSERT INTO student VALUES(3, '旺旺')

 

 

 


 

 

 

域完整性:  (列完整性) 对应 每一列 字段

1. 以 单元格 (字段)  为 单位 进行 约束, 针对当前 单元格的数据。也称为 列 完整性。 不去对照其他数据,

    域完整性 主要保证当前 单元格的 不会被 插入 无效数据

2. 域的 完整  约束

     * 数据类型的约束

     * 非空约束(not null)

     * 默认值 约束(default)

 

 

 

 

 

 


 

 

参照完整性: (引用完整性)

1. 指表 与 表 之间的对应 关系

    通常可以建立 两张表 之间的 主键, 外键关系, 或者 编写两张表 的 触发器 来实现

    操作 有引用关系的 数据表格的过程中, 对其一张表做 插入, 更新, 删除 时, 系统都会将 被 修改的 表格 与 另外 一张表格 进行参照, 从而阻止一些 不正确的数据 操作

2. 要求

至少两张表 (主表, 从表

主表用来约束其他表 的表

从表 收约束的表

数据库的 主键 和 外键 类型要 一致

设置 参照完整性 后, 外键中的值, 必须得是 另外一张 表中 主键的内容

3. 外键的声明 方式

建表 添加

工具添加

alter  alter table tab add constraint sc_tc_fk foreign key (sid) references student(sid)

 

 

 

CREATE TABLE student(
 sid INT PRIMARY KEY AUTO_INCREMENT,
 sname VARCHAR(30) UNIQUE
)


CREATE TABLE class(
	cid INT PRIMARY KEY AUTO_INCREMENT,
	cname VARCHAR(30) UNIQUE,
	yname VARCHAR(30)
)




ALTER TABLE student ADD COLUMN cid INT  COMMENT '班级外键'


ALTER TABLE student ADD  CONSTRAINT FOREIGN KEY s_c_id(cid)
REFERENCES class(cid)

 

 

 


 

 

表与表之间的关系:

      1.  一对一关系

           一个人只有一个身份证

 

      2. 一对多关系

          一个人有多张银行卡, 一个银行卡只能 属于一个人

          一个人有多辆汽车, 一辆汽车是属于一个人

         

       3. 多对多的关系   般需要引入第三张 表 作为   关系对照表

           一个老师有多位学生

           一个学生有多位老师

 

 

 

DROP TABLE class;

DROP TABLE  student


CREATE TABLE student(
 sid INT PRIMARY KEY AUTO_INCREMENT,
 sname VARCHAR(30) UNIQUE
)


CREATE TABLE class(
	cid INT PRIMARY KEY AUTO_INCREMENT,
	cname VARCHAR(30) UNIQUE,
	yname VARCHAR(30)
)




ALTER TABLE student ADD COLUMN cid INT  COMMENT '班级外键'


ALTER TABLE student ADD  CONSTRAINT FOREIGN KEY s_c_id(cid)
REFERENCES class(cid)


CREATE TABLE teacher(
 tid INT PRIMARY KEY  AUTO_INCREMENT,
 tname VARCHAR(30) NOT NULL
)

CREATE TABLE student(
 sid INT PRIMARY KEY AUTO_INCREMENT,
 sname VARCHAR(30) UNIQUE NOT NULL
)


CREATE TABLE stu_te_ref(
 sid int,
 tid int
)

ALTER TABLE stu_te_ref ADD CONSTRAINT FOREIGN KEY stu_fr_sid(sid) REFERENCES student(sid)

ALTER TABLE stu_te_ref ADD CONSTRAINT FOREIGN KEY stu_fr_tid(tid) REFERENCES teacher(tid)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nicepainkiller

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值