数据库的设计与多表查询


前言

数据库设计的基本操作以及事务的四大特性


一、数据库设计

1.1 约束

id不重复、年龄不可能很大、数学不可能为负
在这里插入图片描述

  • 非空、唯一:主键
  • 检查(MYSQL不支持,但JAVA代码支持)
  • 默认:规避null
  • 外键:两个表
create table 员工表 (
		id INT PRIMARY KEY# 员工id,主键
		name Varchar50NOT NULL UNIQUE# 非空唯一
		date Date NOT NULL#入职时间
		salary double7,2NOT NULL, 
		bouns double7,2DEFAULT 0 # 默认为0
	);
		id INT PRIMARY KEY auto_increment, # 主键自增长,数字类型,且唯一约束

1.2 外键约束

让两个表建立物理连接,保证一致性和完整性

constraint fk_emp_dept foreign key (dep_id) references dept(id); 
#需先添加参考的数据,再添加自身
#删除时要先删除参考的数据

#建完表之后添加外键约束
alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名称(主表列);
#删除约束
alter table 表名 drop foreign key 外键名称;

在这里插入图片描述

1.3 设计数据库(设计表)

需求分析 - 设计 - 编码 - 测试 - 安装部署
根据业务需求,选用DBMS(ER图-逻辑建模 ),设计最优的数据存储模型。
表关系:一对一:用户 和 用户信息
一对多:部门 和 员工
多对多:订单 和 商品

1.4 表关系

在多的一方建立外键一的主键
在这里插入图片描述

可以在第三张表(中间表)添加其他的列(数量)
在这里插入图片描述
一对一:有些是经常使用到,提高查询性能
任意一方加入外键,关联另外一方主键,且外键约束唯一
在这里插入图片描述

二、多表查询&事务

多表查询:
在这里插入图片描述
消除无效的数据,emp.id = dept.id

2.1 内连接

隐式内连接

select t1.name, t1.gender, t2.dname
from emp t1, dept t2
where t1.dep_id = t2.did;

显式内连接

select t1.name, t1.gender, t2.dname
from emp t1 join dept t2
on t1.dep_id = t2.did;

2.2 外连接

左外连接:相当于查询A表所有数据和交集部分的数据,小白龙是只有A表才有的

select * 
from t1 left join t2
on t1.dep_id = t2.did;

在这里插入图片描述
右外连接:相当于查询B表所有数据和交集部分的数据,销售部是只有B表才有的

select * 
from t1 right join t2
on t1.dep_id = t2.did;

在这里插入图片描述

2.3 子查询

嵌套查询
在这里插入图片描述
三种子查询方式:
在这里插入图片描述

2.4 事务

事务是一组数据库操作命令,要么同时成功,要么同时失败。(类似于操作系统的原子性)

BEGIN# 开启事务,临时,万一出错了,当前用户查询金额发生改变,但其他用户查不会改变
COMMIT# 提交事务
ROLLBACK# 回滚事务,万一出错了,当前用户不会改变,其他用户也不会改变

四大特性
在这里插入图片描述

set @@autocommit=0# 修改MYSQL事务默认自动提交为手动提交
commit# 提交修改,其他用户也会看到
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值