MySQL—约束

本文详细介绍了数据库设计中的约束类型,包括非空约束、唯一性约束、主键约束和外键约束,强调了它们在确保数据完整性和有效性方面的作用。主键约束作为每个表的唯一标识,而外键约束则用于维护表间的关系。此外,讨论了主键和外键的使用建议,以及在创建和删除表时的顺序。
摘要由CSDN通过智能技术生成

1. 约束(重要)

1.1 概述

约束对应的英文单词:constraint

在创建表的时候,可以给表中的字段加上一些约束,来保证表中数据的完整性,有效性。

作用:保证表中的数据有效

1.2 种类

非空约束 :(not null)

唯一性约束:(unique)

主键约束 :(primary key)PK

外键约束 :(foreign key)FK

检查约束 :(check)MySQL不支持,Oracle支持

1.3 非空约束:not null

非空约束的字段不能为null

create table t_vip(
	id int,
    name varchar(255) not null
);

1.4 唯一性约束:unique

唯一性约束unique约束的字段不能重复,但是可以为null

create table t_vip(
	id int,
    name varchar(255) unique,
    email varchar(255)
);

1.5 两个字段联合唯一

新需求,name和email两个字段联合起来具有唯一性

create table t_vip(
	id int,
    name varchar(255),
    email varchar(255),
    unique(name,email) // 约束没有添加在列的后面,这种约束被称为表级约束
);

需要给多个字段联合起来添加某一个约束的适合,使用表级约束

not null没有表级约束,只有列级约束

1.6 unique和not null联合约束

被unique和not null 约束之后就成为主键约束。(MySQL这样,Oracle不会)

create table t_vip(
	id int,
    name varchar(255) not null unique
);

1.7 主键约束 primary key 重要

1.7.1 概述

相关术语

主键约束:一种约束

主键字段:该字段添加了主键约束,就叫主键字段

主键值:主键字段中的每一个值叫做主键值

  • 什么是主键?
    • 主键值是每一行记录的唯一标识

1.7.2 添加主键约束

create table t_vip(
    // 一个字段主键,叫做单一主键
	id int primary key, // 列级约束
    name varchar(255)
);

create table t_vip(
    // 联合主键
	id int, // 列级约束
    name varchar(255),
    name varchar(255),
    primary key(id,name)
);

1.7.3 主键数量

一个表中主键约束只能添加一个

create table t_vip(
	id int primary key, // 列级约束
    name varchar(255) primary key
);
ERROR;

1.7.4 主键值建议类型

int

bigint

char

等类型

不建议使用varchar。主键值一般都是数字,一般都是定长的。

1.7.5 自然主键和业务主键

自然主键:主键值是一个自然数,和业务没关系。

业务主键:主键值和业务紧密关联。

实际开发中,自然主键使用比较多,因为主键只要做到不重复就行,不需要有意义。

主键自增auto_increment可以自动维护一个主键值,从1开始以1自增

create table t_vip(
	id int primary key auto_increment, // 列级约束
    name varchar(255)
);

1.8 外键约束(foreign key)重要

外键约束相关术语

  • 外键约束:一种约束
  • 外键字段:该字段上添加了外键约束
  • 外键值:外键字段当中的每一个值

业务背景

​ 请设计数据库表,来描述“班级和学生”的信息?

第一种方案:班级和学生存储在一张表中

​ t_student

​ no(pk) name classno classname

缺点:数据冗余,空间浪费

第二种方案:班级一张表,学生一张表

​ t_class

​ classno(pk) classname


​ t_student

​ no(pk) name cno(班级编号)

当cno字段没有任何约束的时候,可能会导致数据无效,所以为了保证cno字段中的值,要给cno添加外键约束。那么cno字段值中的每一个值都是外键值。

删表的顺序:先删子,再删父

创表的书序:先创父,再创子

create table t_class(
	classno int primary key,
    classname varchar(255)
);

create table t_student(
	no int primary key auto_increment,
    name varchar(255),
    cno int,
    foreign key(cno) references t_class(classno)
);

insert into t_class(classno,classname) values (1,"一班");
insert into t_class(classno,classname) values (2,"二班");

insert into t_student(name,cno) values ('jack',1);
insert into t_student(name,cno) values ('lucy',2);

外键可以为空!

子表中的外键引用的父表中的某个字段,这个字段不一定是主键,但至少具有unique约束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值