| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Mysql学习日记:L22-约束 -> 正文阅读 |
|
[大数据]Mysql学习日记:L22-约束 |
目录 一、约束概述约束:constraint 在创建表的时候,我们可以给表中的字段添加一些约束,来保证数据的完整性、有效性。 约束的作用就是保证数据有效。 二、常见的约束1.1 非空约束:not nullnot null 约束的字段不能为null ?在以上测试中not null 约束的是name字段,而在第三条数据的插入中并没有name,所以报错。 1.2 唯一性约束:uniqueunique约束的字段不能重复但是可以为null ?上图unique约束的字段为name,所以name不能出现重复,所以报错。 1.2.1 两个字段联合唯一需求:使name和id两个字段联合起来具有唯一性 错误方法: 以上的表示id具有唯一性,name具有唯一性,两者各自唯一。? 正确方法: ?可以重复一个,但不能两个都重复。 约束添加在列后面的,称为列级约束;约束没有添加在列后面的,称为表级约束。 何时使用表级约束? 在需要将多个字段联合起来添加某一个约束时,使用表级约束。 1.3 主键约束:primary key1.3.1 主键约束的相关术语主键约束:就是一种约束 主键字段:该字段上添加了主键约束 主键值:主键字段中的每一个值都叫做主键值 1.3.2 什么是主键?有什么用??主键值是每一行记录的唯一标识 主键值是每一行记录的身份证号 例如下图name和sex都一样,出现了重名的情况,所以要依靠身份证号来区分 记住:每一个表都应该有主键,没有主键,表无效。 1.3.3 主键的特征not null + unique(主键值不能是null,同时也不能重复) 1.3.4 如何添加主键约束?在添加主键约束后,id就不能重复或者为空了 ?1.3.5 复合主键一个字段做主键叫做单一主键,多个字段联合起来做主键,叫做复合主键。 ?被联合的字段不能一起重复 注意:①一张表主键约束只能添加一个 ②主键值建议使用int bigint char,不建议使用varchar来做主键。主键值一般都是数字,是定长的。 ③复合主键用的少,大部分使用单一主键。 1.3.6 自然主键和业务主键自然主键:主键是一个自然数,和业务没关系。 业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值,这就是业务主键。 在实际开发中,自然主键使用的比较多,因为主键只要做到不重复就行,不需要有意义。 在mysql中有一个机制,可以自动维护主键值 auto_increment表示自增,从1开始以1递增,自动生成主键 1.4 外键约束:foreign key1.4.1 外键约束的相关术语外键约束:一种约束 外键字段:该字段添加上了外键约束 外键值:外键字段当中的每一个值 1.4.2 外键约束的业务背景再添加了外键约束后,就不能随便写了,必须是来自某张表中的某个字段的数据。 例:请设计数据库,来描述班级和学生的信息 第一种方案:将学生和班级创建在一张表中 no? ? ? ? name? ? ? ? classno? ? ? ? classname -------------------------------------------------------------------------- 1? ? ? ? ?wangwu? ? ? 100? ? ? ? ? ? ? 十一中学高三1班 2? ? ? ? ?lisi? ? ? ? ? ? ? ?100? ? ? ? ? ? ? 十一中学高三1班 3? ? ? ? ?wangwei? ? ?101? ? ? ? ? ? ? 十一中学高三2班 4? ? ? ? ?zhangsan? ? 101? ? ? ? ? ? ? 十一中学高三2班 缺点:数据冗余,空间浪费 第二种:班级一张表,学生一张表? t_class 班级表 classno(pk)? ? ? ? ? ? ? ? classname ------------------------------------------------------------- 100? ? ? ? ? ? ? ? ? ? ? ? ? ? ??十一中学高三1班 100? ? ? ? ? ? ? ? ? ? ? ? ? ? ??十一中学高三1班 101? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 十一中学高三2班 101? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 十一中学高三2班 t_student 学生表 no(pk)? ? ? ? ? ? ? ? ? ? ? ? name? ? ? ? ? ? ? ? ? ? ? ? cno(fk)(班级编号) ----------------------------------------------------------- 1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wangwu? ? ? ? ? ? ? ? ? ? ? ? 100 2? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lisi? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?100 3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wangwei? ? ? ? ? ? ? ? ? ? ? ? 101 4? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? zhangsan? ? ? ? ? ? ? ? ? ? ? 101 当cno字段没有添加任何约束的时候,可能会导致数据无效,可能出现一个102,但是102班级不存在,所以为了保证cno字段都是100和101,需要给cno字段添加外键约束 那么cno字段就是外键字段,cno字段中的每一个值都是外键值. 注意: t_class是父表,被外键约束引用 t_student是子表,引用的 删除表的顺序:先删子,再删父 创建表的顺序:先创父,再删子 删除数据的顺序:先删子,再删父 插入数据的顺序:先插父,再插子 create table t_student( no int?primary key auto_increment, name varchar(255), cno int, foreign key(cno) references t_class(classno)); 思考1:子表中的外键引用的父表中的某个字段,被引用的这个字段必须是主键吗? 不一定是主键,但必须具有唯一性。 思考2:外键可以为null吗? 外键值可以为null。 检查约束:check(mysql不支持) 三、not null和unique联合约束可以既非空又唯一 ?如果一个字段同时被unique和not null约束的话,该字段自动变成主键字段 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 1:08:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |