一 介绍
作用: 用于保证数据的完整性和一致性
主要分为:
PRIMARY KEY (PK) 标识该字段为该表的主键, 可以唯一的标识记录
FOREIGN KEY (FK) 标识该字段为该表的外键
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的
AUTO_INCREMENT 标识该字段的值自动增长 (整数类型, 而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号
ZEROFILL 使用 0 填充
说明:
1. 是否允许为空, 默认 NULL, 可设置 NOT NULL, 字段不允许为空, 必须赋值
2. 字段是否有默认值, 缺省的默认值是 NULL, 如果插入记录时不给字段赋值, 此字段使用默认值
sex enum(male,female) not null default male
age int unsigned NOT NULL default 20 必须为正值 (无符号) 不允许为空 默认是 20
3. 是否是 key
主键 primary key
外键 foreign key
索引 (index,unique...)
二 not null 与 default
是否可空, null 表示空, 非字符串
not null - 不可空
null - 可空
默认值, 创建列时可以指定默认值, 当插入数据时如果未主动设置, 则自动添加默认值
- create table tb1(
- nid int not null defalut 2,
- num int not null
- )
三 unique
四 primary key
从约束角度看 primary key 字段的值不为空且唯一, 那我们直接使用 not null+unique 不就可以了吗, 要它干什么?
主键 primary key 是 innodb 存储引擎组织数据的依据, innodb 称之为索引组织表, 一张表中必须有且只有一个主键
一个表中可以:
单列做主键
多列做主键 (复合主键)
五 auto_increment
约束字段为自动增长, 被约束的字段必须同时被 key 约束
了解知识
六 foreign key
一 快速理解 foreign key
员工信息表有三个字段: 工号 姓名 部门
公司有 3 个部门, 但是有 1 个亿的员工, 那意味着部门这个字段需要重复存储, 部门名字越长, 越浪费
解决方法:
我们完全可以定义一个部门表
然后让员工信息表关联该表, 如何关联, 即 foreign key
二 如何找出两张表之间的关系
分析步骤:
#1 先站在左表的角度去找
是否左表的多条记录可以对应右表的一条记录, 如果是, 则证明左表的一个字段 foreign key 右表一个字段 (通常是 id)
#2 再站在右表的角度去找
是否右表的多条记录可以对应左表的一条记录, 如果是, 则证明右表的一个字段 foreign key 左表一个字段 (通常是 id)
- #3 总结:
- # 多对一:
如果只有步骤 1 成立, 则是左表多对一右表
如果只有步骤 2 成立, 则是右表多对一左表
# 多对多
如果步骤 1 和 2 同时成立, 则证明这两张表时一个双向的多对一, 即多对多, 需要定义一个这两张表的关系表来专门存放二者的关系
# 一对一:
如果 1 和 2 都不成立, 而是左表的一条记录唯一对应右表的一条记录, 反之亦然这种情况很简单, 就是在左表 foreign key 右表的基础上, 将左表的外键字段设置成 unique 即可
三 建立表之间的关系
# 一对多或称为多对一
来源: http://www.bubuko.com/infodetail-2521491.html