6.自增长
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键
默认值为1。
我们可以发现id直接从一开始,并且往后插入的都自己自增一。
是不是和我们描述的一样呢?从当前字段中已有的最大值增加一。
7.唯一键
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性较。
unique
加入主键看看。
新建一个表k。
正式是因为有了唯一键,也限制了名字必须唯一,后面的名字数据不可以重复,当然,现实中名字是可以重复的,在数据库中我们对名字也不应该设置为唯一键,仅做演示。
唯一键是允许为空的。
8.外键
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
语法:
foreign key (字段名) references 主表(列)
对于什么是主表,什么是从表,我们先举例说明:
我们插入几个数据后是这样的。
有了班级,我们的班级里就要有学生,所以建立学生表。
略作修改。
插入几个数据。
发现哪里不对劲了吗,返回看看我们的班级表,有112吗?没有竟然可以插入,实际上,没有这个班,那可能有这个班的学生吗,不可能。
再来看一个现象。
610班就没了?张三一合计,一觉醒来学都没得上了。这显然不合理,这个班级还有人,现实中不可能在班级有学生的情况下直接删掉班级,所以这样删掉是不合理的。
这时候外键的作用就体现出来了,同时我们也能明白学生是依附于班级存在的,没有班级就不会有学生,所以班级是主表,学生表是从表。
我们再重新建下表。
插入班级数据。
插入几个学生。
这一次我们插入莫须有的班级时就会被外键约束,插不进不合法数据了。
同样,也无法删除还有学生的班级。
9.综合案例
有一个商店的数据,记录客户及购物情况,有以下三个表组成:
- 商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供应商provider)
- 客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证card_id)
- 购买purchase(购买订单号order_id,客户号customer_id,商品编号goods_id,购买数量nums)
要求:
- 每个表的主外键
- 客户的姓名不能为空值
- 邮箱不能重复
- 客户的性别(男,女)
首先思考谁是主表,谁是从表。
商品的主键是商品编号,这个应该唯一且不为空。
客户的主键为客户号。
购买的主键为购买订单号,同时这个表里包括了客户号和商品编号。
那我们现在看一看购买这个表,同时与两个表有联系,而且依附于这两个表,没有商品和客户也就不会有购买,这么说我们明白了,购买为从表,其他两个表为主表。
那我们就可以开始实现了。
建商品表。
建立客户表。