【MySQL】表的基本约束


1、约束类型

关键字 解释
NOT NULL 指示某列不能存储NULL值
UNIQUE 保证某列的每行必须有唯一的值
DEFAULT 规定没有给列赋值时的默认值
PRIMARY KEY NOT NULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的每一个特定的记录
FOREIGN KEY 保证一个表中的数据匹配另一个表中的值的参数完整性

1.1NOT NULL约束

创建表的时候,指定某列不能为空

 create table student(id int not null, 
                      name varchar(20) not null);

在这里插入图片描述
上图中的NO就表示不允许存储空值

1.2UNIQUE:唯一约束

create table student(id int unique, 
                     name varchar(20) unique);

在这里插入图片描述
上述图片中用红色圈起来的地方就是加上unique约束之后,每次插入/修改都会需要先进行查询,如果发现重复(已经存在)就会插入/修改失败,加上unique之后执行效率就会降低,对数据的校验更严格,有助于写代码的时候减少出错的概率(提高开发的效率)

1.3DEFAULT:默认值约束

create table student(id int, 
                     name varchar(20) default '无名氏');

在这里插入图片描述
设置好之后,后续进行指定列插入的时候,未被指定的列就会保持默认值
在这里插入图片描述

1.4PRIMARY KEY:主键约束

一条记录的身份标识,比较两个东西,看他俩是不是同一个,此时就可以使用身份标识来进行区分
在MySQL中主键还有具体的两个要求:
1.不能为null
2.不能重复

一般给表设置主键,都是使用数字(整数形式),很少会使用字符串
一个表只能有一个主键,一个主键不一定只针对一个列
把多个列的内容联合到一起,共同的构成一个主键叫做联合主键

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

在这里插入图片描述
当某个列集合了not null和unique就成了主键
在这里插入图片描述
MySQL中提供了 “自增主键” 每次插入新的数据,都可以把主键基于上一条数据的主键+1

 create table student(id int primary key auto_increment, 
                      name varchar(20));

在这里插入图片描述
上述主键的值就不用手动指定
在这里插入图片描述
此处写的的null表示这一列不用手动指定

1.5FOREIGN KEY:外键约束

就是两个表之间相互约束
外键用于关联其他表的主键或唯一键,语法:

foreign key(字段名)references 主表();

创建班级表class,classId为主键

mysql> create table class(classId int primary key auto_increment,
                          className varchar(30));

创建学生表student,一个学生对应一个班级,一个班级对应多个学生
使用id为主键,classId为外键,关联班级表classId

 create table student(id int primary key auto_increment, 
                      name varchar(30), 
                      classId int, 
                      foreign key (classId) references class(classId));

在这里插入图片描述
此时,student的classId就和class表的classId建立了联系student classId中的值,就必须要在class表的classId中存在
class表,就对student表产生了制约
此时,就把class表,制约别人的表,也称为“父表”(parent table)
把student表,被制约的表,称为“子表”(child table)
外键约束和unique类似的效果,都是要在插入和删除之前,进行查询

2、表的设计

表的设计是一个比较抽象的概念,有了一定经验后,会更好理解,结合后期的项目设计,再来理解表的设计,可能会更好,这里我们简单介绍一下常见设计

2.1一对一

每个人都有身份证,每个身份证id就对应一个人,这就是一对一的关系
关于一对一的设计方案有两种
第一种方案:把身份证id和姓名放在一张表里面
第二种方案:把身份证id和姓名放在不同的表里,相互关联

2.2一对多

一个班级对应多个学生,一个学生对应一个班级

2.3多对多

比如学校的一门课程,可以被多名学生选修,而一名学生可以选修多门课程,这就是多对多的关系

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-23 00:34:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-23 00:34:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-23 00:34:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-23 00:34:02       20 阅读

热门阅读

  1. Qt Creator 调试控制台无法查看 log4z 的日志

    2024-04-23 00:34:02       13 阅读
  2. 解决Valid在@RequestParam场景不生效的问题

    2024-04-23 00:34:02       19 阅读
  3. C语言例题(递归、二分查找、冒泡排序)

    2024-04-23 00:34:02       15 阅读
  4. 在nginx配置中返回文本

    2024-04-23 00:34:02       14 阅读
  5. 年轻人选择程序员岗位往往都有哪些原因

    2024-04-23 00:34:02       11 阅读
  6. 若依框架升级SpringBoot3

    2024-04-23 00:34:02       14 阅读
  7. 设计模式|组合模式(Composite Pattern)

    2024-04-23 00:34:02       15 阅读
  8. mybatis使用xml中的if-else/choose

    2024-04-23 00:34:02       15 阅读
  9. c#程序调用c++开发dll库

    2024-04-23 00:34:02       13 阅读