学习笔记(06):MySQL数据库入门实战精讲-数据完整性

立即学习:https://edu.csdn.net/course/play/27328/362521?utm_source=blogtoedu

数据的完整性--存储在数据库中的数据应该保持一致性和可靠性

数据约束用于保证数据的完整性。

实体完整性-实际生活中的某个对象,保证每个实体都能被区别。如每个人的身份证号不一样。要求每张表都有唯一标识符,每张表中的主键字段不能为空且不能重复。--唯一、主键约束

唯一约束unique:数据库中同一个字段不可能存在相同的值,同一张表中可以加多个unique约束。

create table person(
 id int not null auto_increment primary key comment '主键id',
 name varchar(50),
 sex tinyint default 1,
 phone varchar(20),
id_number char(18) unique comment '身份证号'

) charset=utf8
;
mysql> desc person;

| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| name      | varchar(50) | YES  |     | NULL    |                |
| sex       | tinyint(4)  | YES  |     | 1       |                |
| phone     | varchar(20) | YES  |     | NULL    |                |
| id_number | char(18)    | YES  | UNI | NULL    |                |

 

 

外键约束:主表是学生表,有学号、姓名,从表是成绩表,有学号、foreign key(stu_no) references stu(stu_no) 是指学号引用了学生表的主键。如果要在从表中插入数据,必须先在主表中插入数据,否则从表里的外键不能引用不存在的数据。如果要删除,需要先删除从表中的数据,再删除主表的数据。

mysql> create table stu(
    ->  stu_id int not null auto_increment primary key comment '主键id',
    ->  name varchar(50)
    -> ) charset=utf8;
Query OK, 0 rows affected (0.04 sec)

mysql> create table score(
    ->  id int not null auto_increment primary key comment '主键id',
    -> stu_id int not null,
    ->  course varchar(50),
    ->  grade int,
    ->  foreign key(stu_id) references stu(stu_id)
    -> ) charset=utf8;
Query OK, 0 rows affected (0.03 sec)

mysql> select * from stu;
+--------+------+
| stu_id | name |
+--------+------+
|      1 | zj   |
|      2 | zd   |
+--------+------+
2 rows in set (0.00 sec)

mysql> insert into score(stu_id,course,grade) values(1,'计算机',100),(3,'数学',87);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`score`, CONSTRAINT `score_ibfk_1` FOREIGN KEY (`stu_id`) REFERENCES `stu` (`stu_id`))
 

参照完整性-表与表之间的关系,不允许引用不存在的实体。多表之间,比如成绩表需要插入某科成绩,插入的学号必须在学生表中是真实存在的。学号是成绩表的外键,是学生表的主键,必须存在这个编号才可以插入。

用户自定义完整性-某义打应用所涉及的数据必须满足的语义要求。比如设置了用户账户必须大于0,如果插入金额为负的话无法插入。借助存储过程和触发器实现

域完整性-对数据的列有要求,如数据类型,格式,值的范围等。如年龄不能是几千岁。针对具体关系数据库的约束条件,保证表中某些列不能输入无效的值。--如数据要求不超过8位,超过8位是无法插入的。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值