0


【MySQL】 MySQL的增删改查(进阶)--壹

文章目录

本节目标:

  • 数据库约束
  • 表的关系

🛫数据库约束

🌴约束类型

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句

🎋NOT NULL约束

创建表时,可以指定某列不为空

比如我们先创建一个student表,我们对里面的id列进行约束为不能为null;

创建如下:

DROPTABLEIFEXISTS student;CREATETABLE student (
    id INTNOTNULL,
    sn INT,
    name VARCHAR(20),
    qq_mail VARCHAR(20));

查看表结构如下:
在这里插入图片描述
我们可以看到id行列是显示不可为null的

接下来我们插入数据试一下
在这里插入图片描述
结果也是意料之中,插入null数据时就直接报错了

🎍UNIQUE:唯一约束

指定sn列为唯一的、不重复的

这里我们重新设置一下表结构,对sn进行约束为唯一约束

DROPTABLEIFEXISTS student;CREATETABLE student (
    id INTNOTNULL,
    sn INTUNIQUE,
    name VARCHAR(20),
    qq_mail VARCHAR(20));

我们对表结构进行查询可以看到,sn列发生了明显变化
在这里插入图片描述
接下来我们依旧插入数据进行测试
在这里插入图片描述
发现如果sn相同就会进行报错

🌳DEFAULT:默认值约束

指定插入数据时,若列为空,则为默认值

我们重新设置一下student表,对name进行默认值约束,若为null,则为默认值:遇事问春风乄

设置如下:

-- 重新设置学生表结构
DROPTABLEIFEXISTS student;CREATETABLE student (
    id INTNOTNULL,
    sn INTUNIQUE,
    name VARCHAR(20)DEFAULT'遇事问春风乄',
    qq_mail VARCHAR(20));

我们查看表结构后发现
在这里插入图片描述
Default列的name行不再为null,而为我们设置的默认值

我们来进行测试一下,插入一个name为null的数据
在这里插入图片描述
我们看到查询后name为默认值

注意事项:只适用于指定列插入数据,且该列不是受约束的列

🎄PRIMARY KEY:主键约束

指定列为主键

主键 是关系表中记录的唯一标识

使用主键应注意以下几点:

  • 每个表只能定义一个主键。
  • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。
  • 一个字段名只能在联合主键字段表中出现一次。
  • 联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。

这里我创建以下student表

-- 重新设置学生表结构
DROPTABLEIFEXISTS student;CREATETABLE student (
    id INTPRIMARYKEY,
    sn INTUNIQUE,
    name VARCHAR(20)DEFAULT'遇事问春风乄',
    qq_mail VARCHAR(20));

表结构如下:
在这里插入图片描述
我们发现上述表格可以理解为:主键是 NOT NULL 和 UNIQUE 的结合

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1
使用如下:

-- 主键是 NOTNULL 和 UNIQUE 的结合,可以不用 NOTNULL
id INTPRIMARYKEY auto_increment

注意事项:是当前表里使用的最大值+1

🍀FOREIGN KEY:外键约束

外键用于关联其他表的主键或唯一键

语法如下:

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

MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。

主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

定义外键时,需要遵守下列规则:

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
  • 必须为主表定义主键。
  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
  • 外键中列的数目必须和主表的主键中列的数目相同。
  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

接下来我们设计一个案例如下:

  • 创建班级表classes,id为主键
DROPTABLEIFEXISTS classes;CREATETABLE classes (
    id INTPRIMARYKEY auto_increment,
    name VARCHAR(20),
    desc1 VARCHAR(100));
  • 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id

表结构如下:
在这里插入图片描述

使用注意事项放在上面了,这里博主偷个懒,就不演示了;

🌲CHECK约束

CHECK约束添加规则

  1. CHECK 约束用于限制列中的值的范围。
  2. Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Check约束的条件,否则将无法正确输入。
  3. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
  4. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

使用如下:

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

表结构如下:
在这里插入图片描述
表结构没有什么变化,我们再来看看添加数据吧

添加数据如下:
在这里插入图片描述
查询如下:
在这里插入图片描述
当我们输入其他值时
在这里插入图片描述
就会爆出错误!

🛬表的设计

大概可以分为以下三种

🚩一对一

在这里插入图片描述

🚩一对多

在这里插入图片描述

🚩多对多

在这里插入图片描述

⭕总结

关于《【MySQL】 MySQL的增删改查(进阶)–壹》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

标签: mysql android 数据库

本文转载自: https://blog.csdn.net/m0_71731682/article/details/133138777
版权归原作者 遇事问春风乄 所有, 如有侵权,请联系我们删除。

“【MySQL】 MySQL的增删改查(进阶)--壹”的评论:

还没有评论