MySQL表的增删改查(进阶)

一、数据库约束

约束就是数据库在使用的时候,对于里面能够存的数据提出的要求和限制.

1.1 NULL约束

  • not null-指示某列不能存储NULL值.

在这里插入图片描述
id这一列设为not null之后,上图中紫色框里的值就变成NO了.

如果尝试往这里插入空值,就会直接报错:
在这里插入图片描述
注意:NOT NULL是可以给任意个列来进行设置,不仅仅是这一个列.

1.2 UNIQUE:唯一约束

  • unique-保证某列的每行必须有唯一的值,即数据唯一.
    在这里插入图片描述

如果尝试插入重复的值,就会报错.
在这里插入图片描述

1.3 DEFAULT:默认值约束

  • default-规定没有给列赋值时的默认值,即约定一个默认值.

如果没有将名字设置为默认,只插入id的值,此时name就采取了默认值null.
在这里插入图片描述
添加名字的默认值约束为匿名:
在这里插入图片描述
如果未修改只添加id,name处会显示为null,添加默认值约束之后,此时name处显示为"匿名".
在这里插入图片描述

1.4 PRIMARY KEY:主键约束

  • primary key -NOT NULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录
    主键约束是最常使用的一个约束,相当于数据的唯一身份标识,类似于身份证号码/手机号码.
    对于一个表来说,只能有一个列被指定为主键.
    在这里插入图片描述
    关于主键,典型的用法,就是直接使用1,2,3, 4整数递增的方式来进行表示MySQL里面对于这种递增的主键,是有内置支持的,称为"自增主键".
    对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1.
create table student(ia int primary key auto_increment,name varchar(50));

在这里插入图片描述
当设定好自增主键之后,此时插入的记录,就可以不指定自增主键的值了(直接使用null来表示),交给mysql自行分配即可.
在这里插入图片描述
自增主键也可以手动指定id ,一旦指定过之后,后续新插入的数据就都是从8之后来排了.2-8之间的就用不了.再次插入的时候就从8之后开始计数.
在这里插入图片描述

1.5 FOREIGN KEY:外键约束

  • foreign key-保证一个表中的数据匹配另一个表中的值的参照完整性。
    外键用于关联其他表的主键或唯一键.

语法

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

外键约束,针对两张表,进行了关联。

在这里创建两张表:
学生表(id,name,classId)
班级表(classId,name)
学生表依赖了班级表,就把学生表称为"子表",班级表称为"父表".

  • 首先创建班级表:
    在这里插入图片描述
  • 然后创建学生表:
create table student(studentId int primary key auto_increment,name varchar(30),classId int,foreign key(classId) references class(classId));

references:叫作(表示依赖关系,当前这个表的classld列就得引用自/依赖于class表的classld这一列)
class(classId):引用的父表的名字叫做class表,引用的父表的列是classld这一列。
在这里插入图片描述
在创建好表之后就可以往student学生表里面插入数据,在插入记录之前, mysql会先拿着这个classldclass表里查一下,看看是否存在,存在才能插入成功。
在这里插入图片描述
因为班级classId里面并没有4班,所以下面那条插入不成功。
不仅仅是新增的时候要考虑到外键约束,新增成功的数据如果进行修改,也一样是会存在问题。因为并没有这个班级存在。
在这里插入图片描述

student表中的classld是可以重复的,只要是在class表中存在即可。
在这里插入图片描述
外键约束,同样也在约束着父表.当父表中的某个记录被子表中依赖着的时候,此时尝试进行删除或者修改,都会失败。
在这里插入图片描述
如果有的classId没有在student表中被依赖到,则就可以进行删除。

外键约束的工作原理:
在子表中插入新的记录的时候,就会先根据对应的值,在父表中先查询,查询到之后,才能够执行后续的插入。
这里的查询操作,可能是一个成本较高的操作(比较耗时),外键约束其实要求,父表中被依赖的这一列,必须要有索引,有了索引就能大大的提高查询速度。

1.6 CHECK约束

  • check-保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。

MySQL使用时不报错,但忽略该约束。

drop table if exists test_user;
create table test_user (
   id int,
   name varchar(20),
   sex varchar(1),
   check (sex ='男' or sex='女')
);

二、表的设计

如何设计数据库,如何设计表?
一个典型的通用的办法:先找出这个场景中涉及到的“实体",然后再来分析"实体之间的关系"。

实体之间的关系

一对一

在这里插入图片描述

一对多

1.5中学生和班级的例子。
在这里插入图片描述

多对多

在这里插入图片描述

在这里插入图片描述
可以使用一个关联表来表示两个实体之间的关系。

  • 34
    点赞
  • 165
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值