MySQL之实体完整性和多表查询

本文介绍了数据完整性概念及其三个主要方面:实体完整性、域完整性和参照完整性。探讨了如何使用主键确保实体唯一性,以及非空和唯一约束来维护域完整性,并展示了如何通过外键约束实现参照完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

九、数据完整性

1、数据完整性是为了保证插入到数据中的数据是正确的,它防止了用户可能的输入错误

2、分为三类

l  实体完整性

l  域完整性

l  参照完整性

9.1实体完整性

规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现

 

主键的特点:不能为null,必须有值,且不能重复。

主键分类:

逻辑主键:不代表实际意义,只是区分不同记录用的。比如id

业务主键:代表者具体的实际意义。比如身份证号  用户名

CREATE TABLE t2(

           idint PRIMARY KEY,#PRIMARY KEY 声明id是主键

           namevarchar(100)

);

 

CREATE TABLE t4(

           idint,

           namevarchar(100),

PRIMARY KEY(id)

);

 

 

CREATE TABLE t3(

           idint PRIMARY KEY auto_increment,#auto_increment 数据库自动增长

           namevarchar(100)

);

 

9.2域完整性

指数据库表的列(即字段)必须符合某种特定的数据类型或约束。

 

非空约束:not null

唯一约束:unique

 

CREATE TABLE t6(

           idint PRIMARY KEY auto_increment,

           usernamevarchar(100) not null unique, 非空和唯一约束

           gendervarchar(10) not null  非空约束

);

9.3参照完整性(多表)

表间的关系:

一对多(用的最多)

多对多(用的很多)

一对一(几乎不用)

 

9.3.1一对多:部门和员工的关系

CREATE TABLE department(

           idint primary key,

           namevarchar(100)

);

 

CREATE TABLE employee(

           idint primary key,

           namevarchar(100),

           salaryfloat(8,2),

           department_idint,

           CONSTRAINTdepartment_id_fk FOREIGN KEY(department_id) REFERENCES department(id)

);

 

9.3.2多对多:老师和学员

CREATE TABLE teacher(

           idint primary key,

           namevarchar(100),

           salaryfloat(8,2)

);

CREATE TABLE student(

           idint primary key,

           namevarchar(100),

           gradevarchar(10)

);

CREATE TABLE teacher_student(

           t_idint,

           s_idint,

           CONSTRAINTt_id_fk FOREIGN KEY(t_id) REFERENCES teacher(id),

           CONSTRAINTs_id_fk FOREIGN KEY(s_id) REFERENCES student(id),

           PRIMARYKEY(t_id,s_id)

);

 

9.3.3一对一(了解)

l  按照外键关联:

CREATE TABLE person(

           idint primary key,

           namevarchar(100)

);

CREATE TABLE idcard(

           idint primary key,

           numbervarchar(20),

           person_idint unique,

           CONSTRAINTperson_id_fk FOREIGN KEY(person_id) REFERENCES person(id)

);

 

l  按照主键关联:

CREATE TABLE person(

           idint primary key,

           namevarchar(100)

);

CREATE TABLE idcard(

           idint primary key,

           numbervarchar(20),

           CONSTRAINTperson_id_fk FOREIGN KEY(id) REFERENCES person(id)

);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值