MySQL学习5-数据完整性

目录

数据库完整性约束作用

完整性分类

实体完整性

主键约束 (PRIMARY KEY)

唯一约束 (UNIQUE)

自动增长列 (AUTO_INCREMENT)

域完整性

非空约束

默认值约束

引用完整性(外键约束)

表间关系

一对一关系

一对多/多对一关系

多对多关系

数据库完整性约束作用

确保用户输入的数据正确保存到数据库中,保证数据完整性。实现方式通过在创建表时添加约束来实现数据完整性。

完整性分类

  • 实体完整性
  • 域完整性
  • 引用完整性

实体完整性

概念:表中的每一行代表一个实体,实体完整性用于标识每行数据不重复。
约束类型:主键约束 (PRIMARY KEY)、唯一约束 (UNIQUE)、自动增长列 (AUTO_INCREMENT)

主键约束 (PRIMARY KEY)

特点:数据唯一且不能为NULL

添加方式:
方式一:

CREATE TABLE student(
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

方式二(支持联合主键):

CREATE TABLE student(
    id INT,
    name VARCHAR(50),
    PRIMARY KEY(id)
);

CREATE TABLE student(
    classid INT,
    stuid INT,
    name VARCHAR(50),
    PRIMARY KEY(classid, stuid)
);

方式三:

CREATE TABLE student(
    id INT,
    name VARCHAR(50)
);
ALTER TABLE student ADD PRIMARY KEY (id);

唯一约束 (UNIQUE)

特点:数据不能重复

CREATE TABLE student(
    id INT PRIMARY KEY,
    name VARCHAR(50) UNIQUE
);

自动增长列 (AUTO_INCREMENT)

用途:为主键自动生成递增值(仅限整数类型)

CREATE TABLE student(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50)
);
INSERT INTO student(name) VALUES('tom');

域完整性

作用:限制单元格数据的正确性(不与其他单元格比较)
约束类型:数据类型约束、非空约束 (NOT NULL)、默认值约束 (DEFAULT)、CHECK约束(MySQL不支持)

非空约束
CREATE TABLE student(
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    sex VARCHAR(10)
);
INSERT INTO student VALUES(1,'tom',NULL);

默认值约束
CREATE TABLE student(
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    sex VARCHAR(10) DEFAULT '男'
);
INSERT INTO student VALUES(1,'tom','女');
INSERT INTO student VALUES(2,'jerry',DEFAULT);

引用完整性(外键约束)

作用:确保表间关系的一致性

CREATE TABLE student(
    sid INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    sex VARCHAR(10) DEFAULT '男'
);
CREATE TABLE score(
    id INT,
    score INT,
    sid INT, -- 外键类型必须与主键一致
    CONSTRAINT fk_score_sid FOREIGN KEY (sid) REFERENCES student(id)
);

第二种添加方式:

ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(id);

表间关系

一对一关系

示例:人员表(t_person)和身份证表(t_card)
实现方案:在从表添加外键列并设置唯一约束,使从表的主键同时作为外键

一对多/多对一关系

特点:最常见的表关系,在"多方"创建外键

多对多关系

示例:学生表(t_stu)和教师表(t_teacher)
实现方式:创建中间表包含两个外键

CREATE TABLE t_stu_tea(
    stu_id INT FOREIGN KEY REFERENCES t_stu(id),
    tea_id INT FOREIGN KEY REFERENCES t_teacher(id)
);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值