马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
概念引入:真正的束缚表字段的是数据范例,但是数据范例的束缚方式比力单一的,以是须要一些额外的一些束缚,用于表现数据的合法性,在只有数据范例一种束缚的情况下,我们比力难包管数据是百分百合法。通过添加差别的束缚,我们就可以确保将来插入数据库表中的数据是符合预期的。而束缚的本质着实就是通过技能本领让步伐员插入精确的数据。反过来,站在数据库的角度,凡是插入进来的数据,均为符合数据束缚的。而束缚的终极目标就是包管数据的完备性和可推测性,由于数据库是生存用户数据的末了一道防线。
1 、束缚的常用范例
1.1 空属性
空属性束缚着实还是比力常见的,我们在表中就经常可以望见,好比
上图中的NUll,着实就是空属性,如果没有设置,我们一样寻常默以为可以空。
在我们存储的数据中许多着实是不可以为空的,以是这就是为什么许多网页须要你注册身份信息时,许多项着实是必填项。数据库在存储这类数据时,也会设置空属性的束缚,确保一些信息不为空。下面用一些图来演示一下
a.创建表
设置三个变量,班级和课堂不为空,其他可以为空
b.插入正常数据
这里我们插入非空数据,发现没有题目。
c.插入缺失的数据
这里我们不插入others ,阐明others默认就是可以不为空
d.继续插入缺失数据
当我们继续插入缺失数据时,我们可以发现,如果将设置为not null 范例的数据空插会导致数据对其举行拦截。
1.2 默认值
默认值这条束缚着实非常简朴,就是在插入的时间,设置某一行的值,体系会主动资助补上。设置default值也非常简朴,只须要在创建表时,在范例后加上设置的默认值,例:create table t1 ( age tinyint unsigned default 18);别的我们还可以将not null与default搭配使用,确保插入数据不为空,不外这两个一样寻常不一起使用
1.3 列形貌
这种束缚着实无法通过desc下令来表现,现实上这就相称于是一种表明,用于给步伐员或DBA举行相识。
在上图显着可以发现,desc下令表现不出comment的内容.想要望见就须要使用show create table name /G下令,结果如下图
1.4 zerofill
这种束缚着实是用于改变表中的数字表现情势,就好比,数据范例为int(10)这里的10就表现插入表时,如果插入数据不敷十位的话会主动补零,但是如果凌驾十位了,那么该是多少就是多少。
插入后
须要注意的是,如果我们没有表现的设定命据范例的宽度但是加了zerofill属性,这里int会默认的表现宽度是11,unsigned int 是10,符号位也占一个宽度。这种表现方式并不会影响数据库对数据的存储与使用。
1.5 主键
主键在一张表中具有唯一属性,通常我们就可以当作和使用体系的pid一样,用于标识数据,我们在创建表时,可以在表后加上primary表现设置该范例为主键。比方下图:
这里的id Key就是PRI,表现唯一。当我们插入同样的id值时,就会出现一些题目。同时,当原有的表中没有主键束缚的时间,可以插入多个重复id数据,假云云时你想要为id加上束缚,数据库就会对你的使用举行拦截,只有你把类似的id数据删除时,才可以重新设置束缚<,以是我们一样寻常约定,在表创建的时间就设定主键
我们可以发现,当再次插入id为2的数据时,我们就会发现,数据库会举行拦截。那么是不是没有办法插入类似的id数据了呢?固然不是,这里固然主键只能有一个,但是一个主键可以附加在多列上。比方,我们可以让id和sore一起作为键值,如许id为2的数据就可以重复地插入。
下面把原来的主键删除,设置新的主键
实行插入类似的id/score值,两列数据做键值时,也不能插入两列一样的值。
1.5.1 自增长
自增长这个属于主键的一种额外特性,这个自增长须要和主键搭配使用,而且只能有一列享有自增长这个属性。自增长顾名思义就是主动会增长,当我们第一次插入了数据。如果有一列有是主键并有自增长属性,那么背面假设不插入这列数据,数据库也会主动帮你补上。比方: 当我们将id设置成主键并加上自增长这个特性的话,我们会发现,哪怕我们第一次插入数据时没有设定id值,数据库也会默认帮我们补上0(一样寻常默认是零,可以别的设置)。后续插入数据还没有设置的话,会主动补上并增长巨细,以确保唯一性。固然,如果你中心突然表现插入一个id = 1000 的数据,那么下次默认补齐的id就从1001开始,这是由于表中会主动记载下次自增长的值。下面用几张图来举例,方便明确
先创建一个带自增长属性的表
不绝插入数据,观察是否带此中一列数据是否自增长
我们可以发现,数据确着实自行增长,并在我们主动设置数据后,会在主动设置的数据后增长。
数据库会主动记载下次的auto_increment须要增长到的值
1.5.2 唯一键
唯一键和主键在功能上非常类似,唯一键是用于办理表中的唯一性束缚题目。重要是由于每一张表只能拥有一个主键,但是我们另有许多的属性都须要唯一性的束缚。以是唯一键的存在就变得公道了,唯一键和主键固然在功能上非常相似,但在一些细节上还是有差异的。比方主键是不能为空,而唯一键可以为空。唯一键的重要作用就是为了包管反面别的信息出现重复。 一样寻常我们在创建表时,在一条数据范例后加上unique即可即可
1.5.3 外键
外键(Foreign Key)是数据库中用于创建表之间关系的一种束缚,这种束缚着实还优劣经常见的,如下图
外键的存在可以确保数据之间存在较好的关联性,就好比上图中,我们是没有办法在最上面那张表中插入别的球员,由于下面的表中并没有其他球员的信息。固然,外键也是可以为NULL,如果外键列允许NULL,则子表中的记载可以不与主表中的任何记载相干联。一旦主从表关联了,对应关联的数据中,子表中插入的主表必须存在,否则会报错,下面用一小段代码来演示主从表之间怎样创建接洽。- -- 主表(父表)
- CREATE TABLE departments (
- department_id INT PRIMARY KEY,
- department_name VARCHAR(255)
- );
- -- 子表(从表)
- CREATE TABLE employees (
- employee_id INT PRIMARY KEY,
- employee_name VARCHAR(255),
- department_id INT,
- FOREIGN KEY (department_id) REFERENCES departments(department_id)
- );
复制代码 外键也是可以著名称的,如果没有设置,数据库会主动设置。
|