多表设计与约束相关内容整理
树图思维导图提供 MySqul约束多表设计 在线思维导图免费制作,点击“编辑”按钮,可对 MySqul约束多表设计 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:8b76f67f6293f22afea9202b8f18f6b2
MySqul03-约束,多表设计思维导图模板大纲
1:概念:对表中的列(字段)的数据进行规则限定,保证数据的完整性和一致性。
完整性:
比如说, 一个用户表里面要存储用户的相关信息, 但是用户提交的时候, 手机号没有填写, 这 样直接插入数据库,就导致这条信息不够完整,有数据缺失, 为了保证数据完整,我就需要对重 要的信息字段加上约束,保证完整性.
一致性:
比如多张表进行信息关联的时候,第一张表的某些数据需要和另外一张表信息进行关联, 如果 两张表信息不一致,到时数据混乱,所以需要有约束,来保证数据的一致性.
约束的分类
primary key
主键约束,表明是主键
auto_increment
自动增长
unique
唯一约束
not null
非空约束
default
默认值约束
check
检查约束
foreign key
外键约束
主键+自增 约束
主键约束特点
主键约束包含非空和唯一两个功能
一张表只能有一个列作为主键
主键一般用于表中数据的唯一标识(id列(字段))
自增约束特点
一个表中只能由一个列使用自增约束
使用自增约束的列必须是主键
示例 主键约束和自增约束一般在建表的时候进行设置
使用alter 更新主键自增约束: alter table product modify id int(10) primary key auto_increment;
删除主键约束:!!! alter table product drop primary key;
唯一约束
特点:表的每条记录中使用的唯一约束的列的值必须唯一!!!
-- 方式一:建表时设置唯一约束
-- 方式二:表创建出来之后,使用alter更新表设置唯一约束
alter table good modify productnum int unique
删除唯一约束:!! alter table good drop index productnum;
非空约束
使用非空约束的列值不能为null;
默认值约束
默认值约束特点 当插入一个新行到表中时,没有给该列明确赋值,将自动得到默认值
检查约束
检查约束特点:用来设置列的限定条件,当增加修改,该列数据时,mysql会检查是否符合check约束的条件,符合可以操作,并不符合不能操作
--删除检查约束: alter table computer drop constrant computer_chk_1;
--增加检查约束: alter table computer add constrant computer_chk_1 check(count>10 and count<100);
外键约束
外键约束特点:
如果两个表的数据有相关联记录,可以让表和表之间产生关系,从而保证数据的准确性!
一般在进行多表关系设置时进行使用
方式二:表创建出来后,使用alter更新表设置外键约束
alter table card add constraint cp_fk1 foreign key(pid) references person(id);
删除外键约束: alter table card drop foreign key cp_fk1;
在实际工作中,如果将数据都存储到一张表中,字段之间如果部署同一类信息,就会产生大量数据冗余,导致数据库性能较低;
一对一关系
在任意一个表建立外键,去关联另外一个表的主键
表现形式:person中的每一条记录都适合card表中的记录一一对应,通过外键约束建立联系;
一对多/多对一关系
实现原则: 再多的一方,建立外键约束,来关联另一方的主键;
一对多的外键约束,必须再多的一方进行设置外键
orderlist表中的多个记录和user表中的一条记录对应, orderlist和user表通过外键约束关联,多对一
user表中的一条记录和orderlist表中的多个记录对应,user表和orderlist表通过外键约束进行关联,一对多;
多对多关系
实现原则:需要借助第三张表中间表,中间表至少要包含两个列 这两个列为作为中间表的外键,分别关联两张表的主键;
多表关联查询
表关联查询就是从多张表中查询到想要的数据
多表查询数据准备
内连接查询
内连接查询的时两张表有交集的部分数据 (有主外键关联的数据);
-- 案例:查询用户信息及用户所拥有的订单信息 select * from user,orders where user.id=order.uid;
案例:查询张三和李四这两个用户可以看到的商品。显示用户的编号、姓名、年龄。 商品名称 select u.id,u,name,g,name from user u,godds g, user_goods ug where ug.uid=u.id and ug.gid=g.id and u. name in('张三','李四');
-- 显示内连接写法 SELECT u.id id,u.name name,u.age age,o.id oid,o.number number,o.uid uid FROM user u INNER JOIN orders o on u.id=o.uid;
外连接查询
左外连接
查询原理:查询左表的全部数据,和左右表两张表有交集部分的数据;
-- 案例:查询用户年龄大于23岁的信息。显示用户的编号、姓名、年龄。订单编号 SELECT u.id, u. NAME, u.age, o.number FROM USER u LEFT OUTER JOIN orders o ON u.id = o.uid WHERE u.age > 23;
右外连接
联合查询(union,unionall)
查询原理:两个不相关的表,联合查数据,可以使用union语句, 但是使用Union的前提是两个表的查询列数一致!!!
union 会自动去重 union all 不会去重!!!
树图思维导图提供 第1章 化工设计基本知识 在线思维导图免费制作,点击“编辑”按钮,可对 第1章 化工设计基本知识 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:70ec0519ed26419068a32a511862aadd
树图思维导图提供 辊压断带分析 在线思维导图免费制作,点击“编辑”按钮,可对 辊压断带分析 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:55fdf0827fa2a220b0b4047d75df5032