数据库--表的约束

   之前我们介绍了数据的类型,今天我们主要介绍数据库中表的约束,虽然数据类型对我们的数据进行了一定程度的约束,但是那些约束很单一,很多情况还是难以处理,所以就有了表的约束。对于表的约束主要有:null、not null、default、comment、primary key、auto_increment、uniqu key。

  这里我们一一进行介绍,首先是null和not null,通过字面意思就可以明白这两个属性是对数据是否可以为空的,数据库中的默认字段基本都是字段为空,但是在实际开发过程中, 要减少空字段的数量,因为空字段是没办法参与运算的。

   

首先我们创建一个名字叫做myclass的表,这个表里我们在设置列的时候将两个列班级名称和班级教室都设置了not null。

当我们在插入数据的时候

如果只插入一项班级名字就会出现问题,因为班级教室不能为空,并且也没有默认值就不能进行插入,这里要注意如果mysql不是在严格模式之下是很有可能能够插入进去的,所以要将mysql开启为严格模式。

   因为上边我们的数据没有默认值,所以在插入空的时候没有候补选项所以不能插入空值,在很多种情况会经常性的出现某个值,我们就可以在建表的时候就初始化好,和我们C语言里边的函数参数缺省值一样的道理。

这里我们创建一个名字叫做tt10的表,因为默认字符类型不是utf8所以第一次创建失败了。原因是sex是2个char大小,但是如果不是utf8的编码类型的话他很有可能是四个字节。

这时候再通过desc来查看数据库中的内容,age和sex的default缺省值就不再是NULL。

当我们只给某一项数据插入姓名的时候,即使不插入age和sex也会有对应的默认值。

之后是comment,comment没有实际意义,只是对当前创建的列进行描述,可以理解成在编写程序时候的注释。

通过desc是看不到desc,需要通过show

我们通过show命令来看一下之前创建过的一个表,这里有个int类型的数据,有个float类型的数据,float后边(4,2)我们之前介绍过,它代表着数据占了4位其中小数点后占了两位,那int类型后边的11代表着什么。其实没有zerofill这个属性的时候括号里的数字是没有意义的。

现在我们将int类型设置的时候括号内的数据设置成5,然后添加zerofill属性。再进行查询的时候就可以看到,本来的100和101变成了00100,00101,增加zerofill属性是如果当前数据长度小于设置长度,就补0之后进行输出。这里和我们在C语言里边格式化输出一样的道理。

 

之后是数据库里边十分重要的概念--主键

设置主键的时候是在对应列后边加primary key就可以,之后通过desc里可以看到key里边对应是pri也就是id是我们当前表的主键。

主键不一定是单个列,也可以多个列组合形成一个主键。

在创建表14的时候将表14中的id和course共同设置为组合主键。

alter table 表名 add primary key(字段列表) 也可以通过alter来增加表中的主键属性。

主键中的字段是不能够进行重复的。当我们插入相同的数据时就会有错误。

通过alter来删除表中的主键。

创建表15,并且把表中id设置成主键和自增长模式,auto_increment模式。

插入操作只在表中插入name数据,就可以看到id数据即使我们并没有插入,但是在每插入一条数据的时候都会自动增长1.

 

之后是唯一键属性。主键确实存在唯一属性,但是通常一个表中往往有很多字段需要有唯一性。这时候就需要用到唯一键。也就是unique,唯一键和主键的本质差不多,不过唯一键允许为空。而且可以多个字段为空,如果是空字段的话就不做唯一性比较。

当我们对有唯一键属性的字段插入数据的时候,如果有相同的数据则会插入失败, 但是可以插入空字段

创建两个表一个主表myclass1一个从表stu1,主表中的id为主键,而从表中的class_id为主表中的主键,这样就可以说class_id是stu1表中的外键。外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

在stu1中插入班号为10、20的数据都是没有问题的,但是如果插入班号为30的数据,因为班号在myclass1表中不存在就会出现插入错误的情况。但是可以在插入数据的时候将班号插入为null

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页