1.primary key主键
1.单从约束角度上而言主键等价于非空且唯一 not null unique
create table t1(idint primary key,
name varchar(32));2.InnoDB存储引擎规定一张表必须有且只有一个主键
2.1.如果创建的表中没有主键也没有非空且唯一的字段 那么InnoDB存储引擎会自动采用一个隐藏的字段作为主键(主键可以加快数据查询:新华字典的目录)2.2.如果创建的表中没有主键但是有非空且唯一的字段 那么InnoDB存储引擎会自动将该字段设置为主键
create table t2(
nid intnot null unique,
sid intnot null unique,
uid intnot null unique,
name varchar(32));3.创建表的时候都应该有一个'id'字段 并且该字段应该作为主键
uid、sid、pid、gid、cid、id
补充说明
idint primary key 单列主键
sid int,
nid int,
primary key(sid, nid) 联合主键
2.auto_increment自增
该约束条件不能单独使用 必须跟在键后面(主要配合主键一起使用)
create table t3(idint auto_increment
);
there can be only one auto column and it must be defined as a key
create table t4(idint primary key auto_increment,
name varchar(32));
补充说明:自增的特点
自增的操作不会因为执行删除数据的操作而回退或者重置
delete from
如果非要重置主键 需要格式化表
truncate 表名;# 删除表数据并重置主键值
约束条件之外键
1.外键前戏
需要创建一张员工表
id name gender dep_name dep_desc
上述表的缺陷
1.表结构不清晰 到底是员工表还是部门表(不严重 无所谓)2.字段数据反复存取 浪费存储空间(不严重 无所谓)3.表的扩展性极差 牵一发动全身(很严重 效率极低)
优化操作>>>:拆表
id name gender
id dep_name dep_desc
拆表之后解决了上述的三个问题 但是出现了一个致命的缺陷
解决措施
id name gender dep_id
添加一个部门编号字段填写部门数据的主键值
外键字段
专门用于记录表与表之间数据的关系
2.外键字段的创建
外键字段是用来记录表与表之间数据的关系 而数据的关系有四种
一对多关系
多对多关系
一对一关系
没有关系
2.1.表数据关系的判定 >>>:'换位思考'
针对员工表和部门表判断数据关系
1.先站在员工表的角度
问:一条员工数据能否对应多条部门数据
翻:一名员工能否属于多个部门
答:不可以
2.再站在部门表的角度
问:一条部门数据能否对应多条员工数据
翻:一个部门能否拥有多个员工
答:可以
完成换位思考之后得出的答案 一个可以一个不可以
那么表关系就是"一对多"
部门是一 员工是多
针对'一对多'的关系 外键字段建在多的一方
ps:没有多对一 统一称为'一对多'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)