持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流
作者简介:
- CSDN java领域新星创作者blog.csdn.net/bug..
- 掘金LV3用户 juejin.cn/user/bug..
- 阿里云社区专家博主,星级博主,developer.aliyun.com/bug..
- 华为云云享专家 bbs.huaweicloud.com/bug..
写在前面
我们上篇博客,学习了MySQL的基础增删查改操作!
当我们需要将多张表的数据组织在一起或是多张表多有联系,那么该如何去创建表!
如何实现增删查改功能呢!
我们本篇博客就带大家来学习一下mysql表的一些稍微复杂的操作!
数据库约束
not null- 指示某列不能存储NULL值。unique- 保证某列的每行必须有唯一的值。default- 规定没有给列赋值时的默认值。primary key-not null和nuique的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。foreign key- 保证一个表中的数据匹配另一个表中的值的参照完整性。check- 保证列中的值符合指定的条件。对于MySQL数据库,对check子句进行分析,但是忽略check子句。
null约束
创建表时可以指定某列不为空!
我们指定了
student_1表中name和score不能为空!
当我们插入一个空值时:
可以看到但我们
name为空时,插入失败!
正确插入方式是要将name和score都赋予值,不能为空!
注意:
这里的指定列不为空语法是:
属性 类型 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表!