表的约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如一个人的身份证号,要求是唯一的。
null/not null, default, comment, zerofill,primary key, auto_increment, unique key
1、空属性
null、not null
在建表的时候跟在字段后面,一把不为空
2、默认值
default
在建表的时候跟在字段后面,如果插入数据的时候没有赋值,就使用默认值
3、列描述
comment
在建表的时候跟在字段后面,用于描述字段
4、零填充
zerofill
- 设置零填充--alter table student change id ID int(5) zerofill;
如果宽度小于设定的宽度(这里设置的是5),自动填充0。
- 使用hex函数查看--select id hex(id) from student;
5、主键
primary key--不能为空;不能重复;一张表最多只能有一个主键;一般主键所在列通常是整数类型
- 设置主键--alter table student add primary key(id);
在建表的时候跟在字段后面---id int primary key
在所有字段之后重新定义主键---primary key(id, name)
- 删除主键--alter table student drop primary key;
6、 自增长
auto_increment 当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
一般在建表的时候跟在主键后面---id int primary key auto_increment,批量插入获取的是第一个值
- 查看自增长的程度--last_insert_id();
7、唯一键
unique--不能重复;可以为空;一张表可以建立多个唯一键;
在建表的时候跟在主键后面---name varchar(10) unique,空字段不做唯一性比较
8、外键
foreign key .. references ..
外键用于定义主表和从表的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
- 先建主表,再建从表
- 设置外键--foreign key(cno) references student(sno);
create table if not exists goods(
goods_id int primary key auto_increment comment '商品编号',
goods_name varchar(10) not null comment '商品名称',
unitprice float(7, 2) not null default 0 comment '商品单价',
category varchar(10) comment '商品类别',
provider varchar(10) not null comment '供应商'
);
create table if not exists customer(
customer_id int primary key auto_increment comment '客户id号',
customer_name varchar(10) not null comment '客户姓名',
address varchar(10) unique comment '客户邮箱',
sex enum('男', '女') default '男' comment '客户性别',
card_id char(10) unique comment '客户身份证号码'
);
create table if not exists purchase(
order_id int primary key auto_increment comment '购买订单号',
customer_id int not null comment '客户编号',
goods_id int not null comment '商品号',
nums int not null default 0 comment '购买数量',
foreign key(customer_id) references customer(customer_id),
foreign key(goods_id) references goods(goods_id)
);