MySQL表的CRUD进阶武功(1)

71 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

写在前面

我们上篇博客,学习了MySQL的基础增删查改操作! 当我们需要将多张表的数据组织在一起或是多张表多有联系,那么该如何去创建表! 如何实现增删查改功能呢! 我们本篇博客就带大家来学习一下mysql表的一些稍微复杂的操作!

数据库约束

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

null约束

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

在这里插入图片描述 我们指定了student_1表中namescore不能为空! 当我们插入一个空值时: 在这里插入图片描述 可以看到但我们name为空时,插入失败! 正确插入方式是要将namescore都赋予值,不能为空! 在这里插入图片描述 注意: 这里的指定列不为空语法是: 属性 类型 not null 只需要在某一列后面写上not null 切记:is not null是条件语句!

nuique:唯一约束

指定某一列中的数据,唯一的,不重复! 就比如我们的身份证号:每个人都是唯一的! 在这里插入图片描述我们设置了id为(unique)唯一约束,那么id就不能重复!

default默认值约束

指定插入值时,name为空 ,有默认值! 就相当于,我们不想让对方知道我们的姓名,我们就采用匿名的方式! 在这里插入图片描述 这就好比现在双减政策下,我们不能将学生的成绩排名公之于众,只有采用这种匿名的方式,很好解决了!

primary key:主键约束

指定id为主键! 那么id既不能是null也需要瞒住unique唯一性; 在这里插入图片描述

在这里插入图片描述扩展: 对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1

--主键约束 primary key 是 unique 和 not null的结合!
id int primary key auto_increment

在这里插入图片描述当我们使用了auto_increment时,如果主键没有赋值,那么自动赋值为该表中的最大值加1;

foreign key:外键约束

外键用于关联其他表的主键(primary key)或唯一键(unique) 比如好多表互相有联系时!那么我们就需要用到foreign key外键约束! SQL语句 foreign key (字段名) references 主表(列名)

学生信息和班级信息就需要使用外键约束! 在这里插入图片描述 当我们外键约束的表中插入,主表中不含的数据时,插入数据失败!!! 因为没有103这个班级,所以这个学生信息有误!!!

check约束

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

当我们table表中的某些字段的值含有那么几个默认的选项! 那么我们就可以用check检查是否满足! 比如 性别 属性 只有男或者女!当我们插入的数据性别不为这二者时显然信息错误! 而check便可以很好的检测出! 在这里插入图片描述 在这里插入图片描述然而并未起到作用....这个了解一下即可!!!

表的设计

三大范式

  • 一对一 一个人只有一个身份证号!!!
  • 一对多 一个班级里有好多学生
  • 多对多 一个课程有多个学生上,一个学生要上多个课程

新增

我们可以在一张表中插入其他表的查询结果!!!

student_2表中的数据插入到student_1

必须是两个表对应的字段类型匹配才可以!!!! 在这里插入图片描述在这里插入图片描述 在这里插入图片描述 我们已经成功将student_2表中的名字信息插入到了student_1表!