sql小结2

•为什么要保证数据库完整性?

为了防止垃圾数据的产生,从而影响数据库的执行效率

数据库完整性概述

•数据完整性的分类
–1.实体完整性
•保证一行数据是有效的
–2.域完整性
•保证一列数据是有效的
–3.引用完整性
•保证引用的编号是有效的
–4.用户自定义完整性
•保证自定义规则
实体完整性
•为什么要保证实体完整性
–保证每行所代表的实体能互相区别
•什么是实体完整性
–表中的一行数据如果与它所代表的实体完全一致,则具备实体完整性。
•实现方法
–主键约束(Primary Key)
•主键(PrimaryKey)是表中的一到多个列,主键列不能为空,也不能重复。
–唯一约束(Unique)
•唯一约束是指给定列的所有值必须唯一,该列在表中每一行的值必须唯一。它和主键约束的区别在于该列可以为空,并且可以在一张表中给多个列设置唯一约束。
实体完整性---主键约束
•设置主键约束
设置主键约束可以在创建表时指定

CREATE TABLE t_student(

  s_id INTPRIMARY KEY, -- 指定主键约束


CREATE TABLE t_student_bak(

  s_id INT ,

  s_nameVARCHAR(50) NOT NULL,

  PRIMARY KEY(s_id)-- 指定主键约束)

  s_nameVARCHAR(50) NOT NULL)

•设置唯一约束
–设置唯一约束可以在创建表时指定,

CREATE TABLE t_student(

  s_id INTPRIMARY KEY,

  s_nameVARCHAR(50) UNIQUE NOT NULL

域完整性

•为什么要域完整性
–保证指定列的数据的有效性
•什么叫域完整性
–域完整性是指定列的输入有效性
•实现方法
–非空约束:Not Null
–默认约束:Default
–检查约束:Check(MySQL不支持)
域完整性---非空约束
•设置非空约束
设置非空约束可以在创建表时指定

CREATE TABLE t_student(

  s_id INTPRIMARY KEY,

  s_nameVARCHAR(50) UNIQUE NOT NULL,

  s_age INT NOTNULL

域完整性---默认约束

•设置默认约束
设置默认约束可以在创建表时指定,

CREATE TABLE t_student(

  s_id INTPRIMARY KEY,

  s_nameVARCHAR(50) UNIQUE NOT NULL,

  s_age INT,

  s_gendar CHAR(2)DEFAULT '男')

设定了默认值后,可以再添加此列时不指定值,或使用default关键字让数据库自动填充设定的默认值。

下面两条SQL语句均可使用默认值

INSERT INTO t_studentVALUES(1,'阿强',20,DEFAULT);

INSERT INTO t_student(s_id,s_name,s_age)VALUES(2,'阿呆',21);

域完整性---受检查约束

•设置受检查约束
–受检查约束是最灵活的约束类型,它允许我们再更改或插入行到数据库时有一个较宽访问的限制。比如设置只允许插入年龄大于18岁的数据,

如:s_age INT check(s_age>18)

但是在MySQL数据库中没有提供对该约束的支持。

引用完整性---外键约束
•为什么要引用完整性约束
–例如,在录入学生成绩时,所使用的学号必须是在学生表中作为主键存在的编号。
•什么叫引用完整性
–参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系。
•方法:
–外键约束
•外键与外键约束
–二者是不同概念,常常被混淆
–外键是指从表的某列与主表的某列存在依附关系,比如学生表与班级表啊,学生表中有一列为班级编号,此列与班级表的班级编号相对应。此关系是设计这两张表时根据业务而建立的,此时我们可以认为学生表有一个外键与班级表的主键相关联,但是此关系并没有强制性依赖。
外键约束是指在外键关联主键上强制加上一个约束,如果违反该约束,则不允许该条数据的修改
•关系型数据库的原则之一就是必须确保数据完整性,即数据的可靠性和准确性。
•根据数据完整性实施的方法,我们可以将其分为四类:实体完整性、域完整性、引用完整性及自定义的完整性。
实体完整性保证表中的每一行都是不同的实体。域完整性保证输入到每一列数据的正确性和准确性。引用完整性保证表间关系的正确性和准确性






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值