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

打印 上一主题 下一主题

主题 1012|帖子 1012|积分 3036

绪论​

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

  
表的束缚:

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

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

  • 如果班级没有名字,你不知道你在哪个班级
  • 如果课堂名字可以为空,就不知道在哪上课
  以是就班级和教书就肯定不能为空,以是就要设置不为空的束缚:
  1. create table myclass(
  2. -> class_name varchar(20) not null,
  3. -> class_room varchar(10) not null
  4. -> other varchar(20);
复制代码
查看表结构:desc myclass;

此时就是对班级和课堂举行非空束缚,也就是这两个属性不能为空:
详细如下图:


2. 默认值default

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



  • 当有对该属性设置默认值后,当你插入数据时不写该属性的值时就会自动的给你填写为默认的值(如上图默认给年龄:18、性别:男)那么:

  • 当把一个属性设置为非空,同样还能 同时的 设置默认值束缚。
    详细如下图(设置了gender为非空并且默以为男):


  • 如果我们没有明白指定一列要插入,用的是default

  • 如果建表中,对应列默认没有设置default值,无法直接插入。
证实如下图(default 和 NOT NULL 不冲突,而是相互增补的)

  • 因为设定了非空,他就不能插入NULL。
  • 但忽略不写,且有默认值,它就会直接使用默认值。
  • 而如果没有默认值,就会报错。
详细如下图:

细节:


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

3. 列形貌

列形貌:comment,没有现实寄义,专门用来形貌字段,会根据表创建语句生存,是用来给程序员或DBA来举行相识。
使用比较简单就直接上实操图了:
详细如:

当直接看不到,需要使用sql中的:show来查看结构(desc也看不到)


4. zerofill



  • 刚开始学习数据库时,很多人对数字范例后面的长度很渺茫。通过show看看t17表的建表语句:
详细如下图(int 范例 在查看结构时 发现 酿成了int(10))

向a、b中插入值(发现没啥标题):

当把b的范例加上zerofill

就能发现2变了。
也就是说zerofill束缚的作用:如果宽度小于设定的宽度(这里设置的是10),当不足10位时,就会自动填充0。
要注意的是,这只是末了显示的结果,在MySQL中现实存储的还是1。
详细如下图:



  • 而unsigned int为啥默认时10位呢:因为:一个无符号的整形最大的值也就是42亿多,用10位就能存下全部整形了,而此中如果时 有符号的整形,他会酿成11,这是因为前面的符号位

  • zerofill一般可用于编号的地方

5. 主键

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

  • 若该属性为主键在key列下会设置为PRI、并且会自动设为非空束缚

  • 主键的值还不能重复

  • 这样有了主键后,就能通过主键快速的找到唯一的一列值
  • 添加主键的方式:

    • 在构建表时直接设置为primary key
    • 在构建完表后,再设置主键
    • alter table test_key add primary key(指定属性)
    • 但注意的是,你选择的属性他要修改为主键,那么他就必须提前满足主键的要求,否则就无法修改为主键

如下图他重复出现了2,因此就不满足从而报错。

修改方法(也就是删除重复的主键值):



  • 复合主键:
   在创建表的时间,在全部字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。
  使用方法如下:
在构建表后写成 primary key(属性1,属性2)

明白:此中主键的属性是在这两个属性合并上影响的,也就是说他们单独的并是主键,而是合并起来看的:
详细如下:

上图若再次插入复合主键上重复的值就会报错(也就是 ( 1234 , 40 )这俩个属性合起来才称为一个主键!)

本章完。预知后事如何,暂听下回分解。
如果有任何标题欢迎讨论哈!
如果以为这篇文章对你有所帮助的话点点赞吧!
持续更新大量MySQL细致内容,早关注不迷路。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表