中山网站开发,公司企业信息查询,南通市城乡和住房建设局网站,电商网站开发合同MySQL学习#xff1a;
https://blog.csdn.net/2301_80220607/category_12971838.html?spm1001.2014.3001.5482
前言#xff1a; 在上一篇我们已经学习了关于表操作的基础知识#xff0c;比如创建表、删除表等#xff0c;但是还有几个重点知识没有讲解#xff0c;比如表…MySQL学习
https://blog.csdn.net/2301_80220607/category_12971838.html?spm1001.2014.3001.5482
前言 在上一篇我们已经学习了关于表操作的基础知识比如创建表、删除表等但是还有几个重点知识没有讲解比如表的约束问题今天这篇我们就重点讲解一下表的约束的原理和使用 目录 1. 表的约束的概念
2. 表的约束的类型
2.1 空属性
2.2 默认值
2.3 列描述
2.4 zerofill
2.5 主键
2.6 自增长
2.7 唯一键约束
2.8 外键
3. 总结 1. 表的约束的概念
在上篇的有些示例中我们已经注意到有一些列后面会跟着一些额外的内容比如unique、comment等等这些被称为表的约束表的约束其实就是对数据的输入等做一定的要求比如非空唯一等好比我们在登录一些软件时有些选项比如密码等后面会加上*告诉我们这个选项是必填的也就是非空的如果不填就点击提交登录就无法成功这就是一种约束
所以说表的约束就是对数据库中的各项内容做出一定的约束条件以确保用户输入的数据更合理合法更具逻辑性
2. 表的约束的类型
2.1 空属性
两个值null默认的和not null(不为空)
默认的是null也就是可以为空但是在很多情况下有些字段是不能为空的所以就需要not null来约束 案例 创建一个班级表包含班级名和班级所在的教室。 站在正常的业务逻辑中 如果班级没有名字你不知道你在哪个班级 如果教室名字可以为空就不知道在哪上课 所以我们在设计数据库表的时候一定要在表中进行限制满足上面条件的数据就不能插入到表中。这就是 “ 约束 ” 。 create table myclass(- class_name varchar(20) not null,- class_room varchar(10) not null); 此时我们创建的表中两个列都有非空属性如果我们在插入数据时没填数据就会报错 如图如果我们只插入班级名不插入班级所在教室就会报错 插入空值也会报错所以说非空约束是必须要求我们插入值的但是如果没有添加非空约束的话就不是必须要插入值且不插入时该列会默认为空值
2.2 默认值 默认值某一种数据会经常性的出现某个具体的值可以在一开始就指定好在需要真实数据的时候用户可以选择 性的使用默认值 create table t1(- name varchar(20) not null,- age tinyint unsigned default 0,- sex char(2) default 男- );比如这个案例我们将age和sex设置了默认值此时我们再插入数据时如果这两个属性没有被插入值就会使用默认值 默认值和空属性是可以同时使用的两者并不冲突比如 name varchar(20) not null default 张三; 这就是一个典型的默认值和空属性同时使用的案例当我们插入数据时如果name属性没有插入值时就会默认为张三但是我们不能插入空值 2.3 列描述 列描述comment没有实际含义专门用来描述字段会根据表创建语句保存用来给程序员或DBA来进行了 解。 create table t2(- name varchar(32) not null,- age tinyint unsigned default 18 comment 这是年龄,- sex char(2) default 男 comment 这是性别- );比如这个示例我们创建的表t2中有列描述但需要注意的是列描述只在表创建语句中保存所以我们直接通过desc查看时是查看不到什么的
desc t2; 查看表创建语句时可以看到我们的描述字段
show create table t2; 2.4 zerofill
前面我们在定义很多列时列类型后往往会跟着一个长度比如下面这个案例
create table t3(- a int(10) unsigned,- b int(10) unsigned- );可以看到 int(10), 这个代表什么意思呢整型不是 4 字节码这个 10 又代表什么呢其实没有 zerofill 这个属性括号内 的数字是毫无意义的。 如下我们插入一组数据 插入后我们查看就是插入了两个简单的整数并没有体现出int(10)括号中整数的价值这是因为没有加列约束zerofill的缘故只有加了这个列约束括号中的整数才能体现作用下面我们将列a添上这个约束然后再看一下有什么不同 这次可以看到 a 的值由原来的 1 变成 00001 这就是 zerofill 属性的作用如果宽度小于设定的宽度这里设置的是 5自动填充 0 。要注意的是这只是最后显示的结果在 MySQL 中实际存储的还是 1 。为什么是这样呢我们可以 用hex 函数来证明hex函数的作用就是将我们的数字转为十六进制 select a,hex(a) from t3; 可以看到数据库内部存储的还是100001只是设置了zerofill属性之后的一种格式化输出这可以保证我们的表格是等宽的
2.5 主键
主键primary key用来唯一的约束该字段里面的数据不能重复不能为空一张表中最多有一个主键主键所在的列通常为整数类型
案例
创建表时直接在字段上指定主键 create table t4(- id int unsigned primary key comment 学号不能为空,- name varchar(20) not null- );主键约束主键对应的字段中不能重复一旦重复就会发生错误 追加主键当表创建好但是没有主键时可以追加主键但进行追加主键操作前需要先确保我们的数据库中要确认为主键的这个字段中不要有重复和空值的情况
alter table 表名 add primary key(字段列表); 删除主键
alter table 表名 drop primary key; 复合主键在创建表的时候在所有字段之后使用primary key(主键字段列表)来创建主键如果有多个字段作为主键 可以使用复合主键。
create table t5(- id int unsigned,- course int unsigned comment 课程编码,- source int unsigned comment 成绩,- primary key(id,course) comment id和course为复合主键- );就比如这里两个字段被设置为复合主键那么这两个字段都不能重复或为空
2.6 自增长
auto_increment当对应的字段不给值会自动的被系统触发系统会从当前字段中已经有的最大值1操作得 到一个新的不同的值。通常和主键搭配使用作为逻辑主键
自增长特点
任何一个字段要做自增长前提是本身是一个索引key一栏有值自增长字段必须是整数一张表最多只能有一个自增长
案例
create table t6(- id int unsigned primary key auto_increment,- name varchar(10) not null default - );在这个案例中id被设为主键那它不能为空且不能重复但同时我们也将它设为自增长那么会有什么不同呢我们插入几组数据检验一下 如上我们插入了两组数据但是主键列没有插入值但是没有报错我们查看表中数据发现id自动有了1和2这就是自增长的作用在我们没有往这个字段中写入值时它会自动在前一个值的基础上加1
此外我们也可以查看自增长字段已经到多少了
select last_insert_id(); 我们也可以设置我们自增长的初始值
比如上面那个案例我们可以将我们的id的自增长初始值设为500
create table t7(- id int unsigned primary key auto_increment,- name varchar(20)- )auto_increment500;然后再插入数据我们就会发现我们的自增长是从500开始的 2.7 唯一键约束 一张表中有往往有很多字段需要唯一性数据不能重复但是一张表中只能有一个主键唯一键就可以解决表中有多 个字段需要唯一性约束的问题。 唯一键的本质和主键差不多唯一键允许为空而且可以多个为空空字段不做唯一性比较。 关于唯一键和主键的区别 我们可以简单理解成主键更多的是标识唯一性的。而唯一键更多的是保证在业务上不要和别的信息出现重复。乍 一听好像没啥区别我们举一个例子 假设有50个人在同一所高中的同一个班中高中里每一个人都有一个学号这个学号就是作为主键存在的但是班主任为了方便管理班里的学生他还给每个学生按成绩排了一个序号这个序号也是唯一的此时在设计表时就可以把这个序号加上唯一性约束 通常我们将主键设计为与当前业务相关性不大的字段这样在业务变更时就不需要连续变更主键中的内容比如这里即使又考试了成绩发生了变动我们的主键学号也不需要发生变动 案例
创建一个带唯一性约束字段的表
create table t8(- id int unsigned unique comment 唯一性约束.不能重复但可以为空,- name varchar(20)- );不能重复 可以为空 2.8 外键 外键用于定义主表和从表之间的关系外键约束主要定义在从表上主表则必须是有主键约束或unique约束。当定 义外键后要求外键列数据必须在主表的主键列存在或为null。 语法
foreign key (字段名) references 主表(列)
案例
学生表Stu idnameclass_id100张三10101李四20
班级表myclass idname10高三三班20高三四班 如上两个表它们之间是存在者一些关系的学生表中的班级编号字段class_id是依赖于班级表中的编号字段的id如果一个学生的class_id在班级表的id字段中不存在按理说就是错误的因为一个学生不可能隶属于一个不存在的班也就是说学生表的class_id字段是依赖于班级表中的id字段的这种依赖关系就叫做外键依赖 生活中这种依赖关系是非常常见的我们需要注意的是被依赖的表中是要有主键约束或unique字段的比如上面这个班级表中的id字段实际上就应该作为主键存在的
下面我们来设计一下上面的那个案例
首先先来设计一下主表班级表
create table myclass(- id int unsigned primary key comment 班级id作为主键存在,- name varchar(20)- );再创建从表
create table Stu(- id int primary key,- name varchar(20) not null,- class_id int unsigned,- foreign key(class_id) references myclass(id)- );正常插入数据 注意我们上面的插入顺序一定是要先插入班级表再插入学生表准确点说是插入学生表中的班级id一定是在班级表中已经有的如果班级表中没有这个班级就无法插入
比如插入一个班级id为30的学生因为没有这个班级所以插入会不成功 当我们不知道一个学生所属班级的时候我们可以将他先设为空 有意思的是班级表中的id字段不是主键吗所以按理说它不能为空啊。
所以不管主表中的被依赖字段是主键约束还是唯一性约束从表的约束字段都可以取空值
3. 总结
以上就是关于表的约束问题的全部内容每一个都挺重要的建议大家自己实操一遍 感谢各位大佬观看创作不易还望各位大佬带赞支持
文章转载自: http://www.morning.fysdt.cn.gov.cn.fysdt.cn http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn http://www.morning.ccyns.cn.gov.cn.ccyns.cn http://www.morning.kdhrf.cn.gov.cn.kdhrf.cn http://www.morning.bxyzr.cn.gov.cn.bxyzr.cn http://www.morning.jtkfm.cn.gov.cn.jtkfm.cn http://www.morning.nxbkw.cn.gov.cn.nxbkw.cn http://www.morning.skrh.cn.gov.cn.skrh.cn http://www.morning.ygqjn.cn.gov.cn.ygqjn.cn http://www.morning.bljcb.cn.gov.cn.bljcb.cn http://www.morning.bsqth.cn.gov.cn.bsqth.cn http://www.morning.ktmpw.cn.gov.cn.ktmpw.cn http://www.morning.qrwnj.cn.gov.cn.qrwnj.cn http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn http://www.morning.skqfx.cn.gov.cn.skqfx.cn http://www.morning.fbjqq.cn.gov.cn.fbjqq.cn http://www.morning.zdxss.cn.gov.cn.zdxss.cn http://www.morning.ybgt.cn.gov.cn.ybgt.cn http://www.morning.xmtzk.cn.gov.cn.xmtzk.cn http://www.morning.qbxdt.cn.gov.cn.qbxdt.cn http://www.morning.rfpq.cn.gov.cn.rfpq.cn http://www.morning.cwgn.cn.gov.cn.cwgn.cn http://www.morning.hcgbm.cn.gov.cn.hcgbm.cn http://www.morning.yrxcn.cn.gov.cn.yrxcn.cn http://www.morning.dwrjj.cn.gov.cn.dwrjj.cn http://www.morning.rmtmk.cn.gov.cn.rmtmk.cn http://www.morning.khzml.cn.gov.cn.khzml.cn http://www.morning.jwefry.cn.gov.cn.jwefry.cn http://www.morning.dgng.cn.gov.cn.dgng.cn http://www.morning.nqyzg.cn.gov.cn.nqyzg.cn http://www.morning.lzqdd.cn.gov.cn.lzqdd.cn http://www.morning.cykqg.cn.gov.cn.cykqg.cn http://www.morning.ctsjq.cn.gov.cn.ctsjq.cn http://www.morning.flpjy.cn.gov.cn.flpjy.cn http://www.morning.jkdtz.cn.gov.cn.jkdtz.cn http://www.morning.pftjj.cn.gov.cn.pftjj.cn http://www.morning.nndbz.cn.gov.cn.nndbz.cn http://www.morning.lqqqh.cn.gov.cn.lqqqh.cn http://www.morning.hhxkl.cn.gov.cn.hhxkl.cn http://www.morning.rlzxr.cn.gov.cn.rlzxr.cn http://www.morning.npfrj.cn.gov.cn.npfrj.cn http://www.morning.byjwl.cn.gov.cn.byjwl.cn http://www.morning.xlbyx.cn.gov.cn.xlbyx.cn http://www.morning.burpgr.cn.gov.cn.burpgr.cn http://www.morning.hytqt.cn.gov.cn.hytqt.cn http://www.morning.fwjfh.cn.gov.cn.fwjfh.cn http://www.morning.lmmyl.cn.gov.cn.lmmyl.cn http://www.morning.mdwlg.cn.gov.cn.mdwlg.cn http://www.morning.ymhzd.cn.gov.cn.ymhzd.cn http://www.morning.dnpft.cn.gov.cn.dnpft.cn http://www.morning.mytmx.cn.gov.cn.mytmx.cn http://www.morning.kkzwn.cn.gov.cn.kkzwn.cn http://www.morning.nqwkn.cn.gov.cn.nqwkn.cn http://www.morning.ttcmdsg.cn.gov.cn.ttcmdsg.cn http://www.morning.wgbsm.cn.gov.cn.wgbsm.cn http://www.morning.ktlxk.cn.gov.cn.ktlxk.cn http://www.morning.rrgqq.cn.gov.cn.rrgqq.cn http://www.morning.qtfss.cn.gov.cn.qtfss.cn http://www.morning.bkryb.cn.gov.cn.bkryb.cn http://www.morning.wjpsn.cn.gov.cn.wjpsn.cn http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn http://www.morning.ndhxn.cn.gov.cn.ndhxn.cn http://www.morning.hryhq.cn.gov.cn.hryhq.cn http://www.morning.fzqfb.cn.gov.cn.fzqfb.cn http://www.morning.clndl.cn.gov.cn.clndl.cn http://www.morning.mcjrf.cn.gov.cn.mcjrf.cn http://www.morning.wjqbr.cn.gov.cn.wjqbr.cn http://www.morning.kflbf.cn.gov.cn.kflbf.cn http://www.morning.ckhyj.cn.gov.cn.ckhyj.cn http://www.morning.cbnlg.cn.gov.cn.cbnlg.cn http://www.morning.kdpal.cn.gov.cn.kdpal.cn http://www.morning.bftr.cn.gov.cn.bftr.cn http://www.morning.gydth.cn.gov.cn.gydth.cn http://www.morning.gpmrj.cn.gov.cn.gpmrj.cn http://www.morning.bpmtx.cn.gov.cn.bpmtx.cn http://www.morning.dfckx.cn.gov.cn.dfckx.cn http://www.morning.jghqc.cn.gov.cn.jghqc.cn http://www.morning.bchhr.cn.gov.cn.bchhr.cn http://www.morning.rxnr.cn.gov.cn.rxnr.cn http://www.morning.dndjx.cn.gov.cn.dndjx.cn