盛世宏图 发表于 2024-12-7 05:33:00

Linux放学 〖MySQL 〗表的属性之束缚条件(上)(NULL/NOT NULL, DEFFUAL,

绪论​
https://img-blog.csdnimg.cn/direct/f64fbc1f8aba4123b41fa76b4c830a55.jpeg#pic_center
每日激励:“如果痛恨所处的黑暗,请你成为你想要的光。 —— 顾城”
    绪论​:
本章继承学习MySQL的知识,本章重要讲到mysql的束缚,束缚在表中是非常重要的,它包管了表数据的精确性和正当性,本篇将讲到一些比较简单的束缚,下篇后续更加重要,将快速更新,敬请等待!
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。
表的束缚:

真正束缚字段的是数据范例,但是数据范例束缚很单一,需要有一些额外的束缚,更好的包管数据的正当性,从业务逻辑角度包管数据的精确性。
表的束缚很多,这里重要介绍如下几个: null/not null,default, comment, zerofill,primary key,auto_increment,unique key
   表中肯定要有各种束缚,通过束缚让我们未来插入数据库中的数据符合预期。束缚本质是通过技能手段,倒逼程序员插入精确的数据。反过来站在mysql视角,凡是插进来的数据,都是符合数据束缚的。
束缚终极的目标,包管数据的完整性和可预期性。
1. 空属性(NULL)

两个值:null(默认的)、not null(不为空)
注意区分: ’ '(空串)与 NULL
数据库默认字段基本都是字段为空,但是现实开发时,尽可能包管字段不为空,因为数据为空没办法参与运算。
   例如:
创建一个班级表,包含班级名和班级地点的课堂。
站在正常的业务逻辑中:


[*]如果班级没有名字,你不知道你在哪个班级
[*]如果课堂名字可以为空,就不知道在哪上课
以是就班级和教书就肯定不能为空,以是就要设置不为空的束缚:
create table myclass(
-> class_name varchar(20) not null,
-> class_room varchar(10) not null
-> other varchar(20);
查看表结构:desc myclass;
https://i-blog.csdnimg.cn/direct/545c13e823d54cd5894c4d4a2b35010b.png
此时就是对班级和课堂举行非空束缚,也就是这两个属性不能为空:
详细如下图:https://i-blog.csdnimg.cn/direct/5f8c4f34a47e46c0bbca92ba744319b9.png
2. 默认值default

默认值:某一种数据会常常性的出现某个详细的值,可以在一开始就指定好,在需要真实数据的时间,用户可以选择性的使用默认值。
举例阐明:
create table t13(
-> name varchar(20) not null,
-> age tinyint unsigned default 0,
-> gender char(2) default '男'
-> );
表结构:
https://i-blog.csdnimg.cn/direct/e26a914c9ecf4066be5a73c170445bb2.png


[*]当有对该属性设置默认值后,当你插入数据时不写该属性的值时就会自动的给你填写为默认的值(如上图默认给年龄:18、性别:男)那么:
https://i-blog.csdnimg.cn/direct/fbd2e588fed84a07860ed45b5eacccb6.png
[*]当把一个属性设置为非空,同样还能 同时的 设置默认值束缚。
详细如下图(设置了gender为非空并且默以为男):
https://i-blog.csdnimg.cn/direct/84f9882b43364a419ebf22e4cce2410a.png

[*]如果我们没有明白指定一列要插入,用的是defaulthttps://i-blog.csdnimg.cn/direct/3b42300fdc5743acb60eedd0f543245d.png
[*]如果建表中,对应列默认没有设置default值,无法直接插入。
证实如下图(default 和 NOT NULL 不冲突,而是相互增补的)

[*]因为设定了非空,他就不能插入NULL。
[*]但忽略不写,且有默认值,它就会直接使用默认值。
[*]而如果没有默认值,就会报错。
详细如下图:
https://i-blog.csdnimg.cn/direct/6a0720a4516f419ab13692aac0f7f84c.png
细节:


[*]默认值的生效:数据在插入的时间不给该字段赋值,就使用默认值,而如果也没设置默认值时,体系会自动优化带上默认值为NULL(default null)
[*]以是说:not null和defalut一般不需要同时出现,因为default本身有默认值,不会为空
3. 列形貌

列形貌:comment,没有现实寄义,专门用来形貌字段,会根据表创建语句生存,是用来给程序员或DBA来举行相识。
使用比较简单就直接上实操图了:
详细如:
https://i-blog.csdnimg.cn/direct/1979189029394d7bb9fb2c2770437c9a.png
当直接看不到,需要使用sql中的:show来查看结构(desc也看不到)https://i-blog.csdnimg.cn/direct/df6d7ca588cf45fb907804c50180c270.png
4. zerofill



[*]刚开始学习数据库时,很多人对数字范例后面的长度很渺茫。通过show看看t17表的建表语句:
详细如下图(int 范例 在查看结构时 发现 酿成了int(10))
https://i-blog.csdnimg.cn/direct/ff009bbd542c40e68739a0697afce297.png
向a、b中插入值(发现没啥标题):https://i-blog.csdnimg.cn/direct/4d26eec9439c441687af79127a60fac8.png
当把b的范例加上zerofill
https://i-blog.csdnimg.cn/direct/76849bb11aa84f60b71943cb03543abd.png
就能发现2变了。
也就是说zerofill束缚的作用:如果宽度小于设定的宽度(这里设置的是10),当不足10位时,就会自动填充0。
要注意的是,这只是末了显示的结果,在MySQL中现实存储的还是1。
详细如下图:
https://i-blog.csdnimg.cn/direct/e3d83aa1a80246b6806722a37307f1e8.png


[*] 而unsigned int为啥默认时10位呢:因为:一个无符号的整形最大的值也就是42亿多,用10位就能存下全部整形了,而此中如果时 有符号的整形,他会酿成11,这是因为前面的符号位https://i-blog.csdnimg.cn/direct/8ba5b75f2a4e4ced854b2fb50c18070f.png
[*] zerofill一般可用于编号的地方
5. 主键

主键:primary key用来唯一的束缚该字段内里的数据,不能重复,不能为空,一张表中最多只能有一个(但不意味着一个主键只能在一列上,有复合主键,也就是把多个属性合并看成一个属性举行主键束缚)。
主键:主键通常地点的列通常是整数范例
如下设计:
create table test_key(
-> id int unsigned primary key comment '这个是学生的学号',
-> name varchar(20) not null);

[*]若该属性为主键在key列下会设置为PRI、并且会自动设为非空束缚
https://i-blog.csdnimg.cn/direct/ebe82bc4b3b2407eba262fad4aeff948.png
[*]主键的值还不能重复https://i-blog.csdnimg.cn/direct/83d1318718904b0e9be042c34428b3da.png
[*]这样有了主键后,就能通过主键快速的找到唯一的一列值
[*]添加主键的方式:
[*]在构建表时直接设置为primary key
[*]在构建完表后,再设置主键
[*]alter table test_key add primary key(指定属性)
[*]但注意的是,你选择的属性他要修改为主键,那么他就必须提前满足主键的要求,否则就无法修改为主键

如下图他重复出现了2,因此就不满足从而报错。
https://i-blog.csdnimg.cn/direct/5a864462648d485e8c8a2bd2832800ea.png
修改方法(也就是删除重复的主键值):
https://i-blog.csdnimg.cn/direct/7731f66744df4a9c830bdc5aef95252d.png


[*]复合主键:
   在创建表的时间,在全部字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。
使用方法如下:
在构建表后写成 primary key(属性1,属性2)
https://i-blog.csdnimg.cn/direct/912ba56fd13548f1a50ed57849a0e1a8.png
明白:此中主键的属性是在这两个属性合并上影响的,也就是说他们单独的并是主键,而是合并起来看的:
详细如下:
https://i-blog.csdnimg.cn/direct/a9f67cc091cb4a1f9be83639bd43a3a9.png
上图若再次插入复合主键上重复的值就会报错(也就是 ( 1234 , 40 )这俩个属性合起来才称为一个主键!)
本章完。预知后事如何,暂听下回分解。
如果有任何标题欢迎讨论哈!
如果以为这篇文章对你有所帮助的话点点赞吧!
持续更新大量MySQL细致内容,早关注不迷路。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Linux放学 〖MySQL 〗表的属性之束缚条件(上)(NULL/NOT NULL, DEFFUAL,