数据的完整性(实体完整性、域完整性、引用完整性)

1 数据库的完整


  1. 用来保证存入数据库中的数据是有效的,即有效性和准确性;

  2. 确保数据的完整性 ≠ 给数据添加约束

  3. 完整性的分类:

    • 实体完整性,即行完整性
    • 阈完整性,即列完整性
    • 引用完整性(关联表完整性);
      1. 主约束键: primary key
      2. 唯一约束: unique [key]
      3. 非空约束: not null
      4. 默认约束: default
      5. 自动增长: auto_increment
      6. 外键约束: foreign key
  4. 各类约束最好在创建表的时候设置,多个约束条件应用空格隔开

    -- eg
    create table student(
    	stuNum int primary key auto_increment;
    	passwd varchar[12] not null default '123456';
        stuName char[30] not null;
        id int not null;
        phoneNum varchar(20) not null;
        address varchar(30) not null default '学生宿舍';
        birthday datetime;
        emali varchar(30)
    );
    

2 实体完整性


  1. 实体:表中的唯一一行,代表一个实体,
  2. 实体完整性的作用是标识每一行数据都不重复
  3. 约束类型主要包括:
    主键约束:primary key
    唯一约束:unique
    自动增重列:auto_increment

2.1 主键约束(primary key)

  1. 每个表中要有一个主键

  2. 主键的特点:数据唯一(即每行的值都不一样),且不能为null

  3. 添加方式:
    第一种添加方式:在创建表的时候直接添加在属性类型之后添加primary key

    -- 学生的id为主键约束
    create table student(id int primary key, name varchar(10))
    

    第二种方式:先写完所有属性,然后添加一个primary key,这种方式可以创建联合主键

    create table student(id int, name varchar(10), primary key(id) );
    
    create table student(classId int, id int, name varchar(10), primary key(classId, id) );
    

    第三种方式:先正常创建表,然后通过 alter 添加一个primary key

    create table student( id int, name varchar(10) );
    alter table student add primary key(id);
    

2.2 唯一约束(unique)

唯一约束的特点是数据值唯一,与主键约束不同的是,唯一约束可以是null;

create table student(Id int primary key, name varchar(5) unique);

2.3 自动增长序列(auto_increment)

  1. 每新建一个实体,会自动增加1

  2. 该属性类型只能是整数类型

    create table student(id int primary key auto_increment, name varchar(5) );
    -- insert into student(name) values('老大');	-- id为1,自动生成
    -- insert into student(name) values('老二');	-- id为2,无需手动插入,自动生成
    

3 域完整性


  1. 作用:限制此单元格是符合要求的数据
  2. 域完整性约束:
    • 数据类型
    • 非空约束 (not null)
    • 默认值约束(default)
    • check约束

3.1 数据类型约束

  1. 数值类型
    使用方法:直接在属性后面加类型名称即可;

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HtuvcAvb-1629657416487)(../../../../_resources/image-20210820211520891.png)]

  2. 日期类型
    表示时间值的日期和时间类型为DATE、DATETIME、TIMESTAMP、TIME和YEAR。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ls8Y5DX8-1629657416488)(../../../../_resources/image-20210820211632329.png)]

  3. 字符串类型
    字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9QESfMJI-1629657416489)(../../../../_resources/image-20210820211730619.png)]

  4. 二进制类型

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wPrhnmQq-1629657416490)(../../../../_resources/image-20210820212445608.png)]

3.2 非空约束

-- 关键字
not null

-- 在创建实体时便不能将name值置空,必须给其一个值
create table student(name varchar(5) not null);

3.3 默认值约束

-- 关键字
default

-- 在创建实体类时,若没有明确给sex赋值,那么会自动添加默认值'女'
create table student(sex varchar(5) default '女');

4 引用完整性


  1. 外键列:是用来保存别的表中主键值列
  2. 外键约束:foreign key
  3. 作用:保证表与表之间引用的完整性,被定义为外键的列属性用于引用另一个表里的主键列属性
-- 先创建一张学生的信息表
create table student(
	id integer(10) primary key,	-- 学号
	age int,	-- 年龄
    sex varchar(2), -- 性别:男,女,人妖,太监
    address varchar(50),	-- 地址
    email varchar(20)	-- 邮箱
);

-- 学生各科的成绩表
create scores(
    id integer(10),
	java int,
	cplusplus int,
    c int,
	mysql int,
    -- 添加外键约束, 将scores.id列属性 关联到student.id列属性
    foreign key(id) references student(id)
);
-- 可以用 constraint 约束名称  给外键约束取名
constraint abc foreign key(id) references student(id);


-- 或者先创建学生的各科成绩,然后添加一个外键列属性
alter table scores add foreign key(id) references student(id); 
-- 或者 
alter table scores add constraint abc foreign key(id) references student(id);

-- 或者先创建学生的各科成绩,然后添加一个外键列属性
alter table scores add foreign key(id) references student(id); 
-- 或者 
alter table scores add constraint abc foreign key(id) references student(id);

5 如何删除约束


  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值