前言
数据库是用户数据的最后一道保护屏障,所以数据库存在大量的约束,保证数据库中数据的完整性和可预期性。数据库中,数据类型本身就是一种约束,除此在外还有: null/not null,default, comment,zerofill,primary key,auto_increment,unique key。
一、空属性 和default
空属性包含两个值:null(默认的),not null(不为空)。在mysql中,默认的字段大多为null。并且在数据库中,null和空串不同,null表示什么东西都没有;而空串有东西,只不过内容为空!并且null不参与计算!我们可以直接在列类型后指明空属性。如果指明not null,此时插入数据时此列不能为空!
default默认值可以在创建时指定,不知道为null。一旦指定后,用户在不显示插入数据时就是要默认值。
- 在表中列字段设置为为no null,如果用户显示指定了数据,就插入用户自身输入数据;否则使用默认值。但如果默认值没有,为null,此时mysql会报错拦截该行为!
二、comment(列描述)
comment本身是没有任何意义,任何约束的。comment类似于注释,用来给程序员看的。所以也可以认为是一种软约束,让程序员看到后约束自身尽量插入符合要求的数据!
三、zerofill
我们在创建表时,类型int
在表中的默认格式为int(10)
。而数字10本身是没有任何意义的,但添加zerofill
就不一样了。添加zerofill
字段后,数字10表示输出结果的最小宽度。如果插入数据宽度比指定数字大,没有任何影响;但如果小于,剩余宽度会用0来填充!
四、primary key(主键)
主键用来约束字段中的数据唯一性(不重复,并且不能为空)。在一张表中只能存在一个主键,并且主键列一般为整数类型!
当表创建好后没有主键,可以采用如下方式再次追加主键
alter table 表名 add primary key(字段列表)
当然也可以删除主键!
alter table 表名 drop primary key;
除此之外,我们还可以将多个字段作为主键,设置复合主键!但复合主键中,只有当复合主键的所有字段的数据都冲突时,mysql才会拦截!
mysql> create table tt14(
-> id int unsigned,
-> course char(10) comment '课程代码',
-> score tinyint unsigned default 60 comment '成绩',
-> primary key(id, course) -- id和course为复合主键
-> );
五、auto_increment(自增长)
auto_increment修饰的对应字段不给值时,系统会从该字段当前字段中已有值的最大值进行+1,将结果作为当前该字段对应数据进行插入!auto_increment通常配合主键使用,作为逻辑主键!
- 一张表最多只能有一个自增长,并且自增长字段必须是整数。
- 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
六、 唯一键(unique key)
在一张表中,往往存在很多值需要保证为唯一性,主键虽然可以保证唯一性,但一张表中只能存在一个主键。所以mysql增加了唯一键,也用来约束字段保证数据的唯一性。
- 一张表中,主键只能存在一个;而唯一键可以存在多个。
- 主键修饰的字段不能为null,而唯一键可以。
- 在业务中,我们通常将一些和业务无关的字段作为主键,用来标识唯一性;而唯一键更多用来保证业务数据的唯一性!