Mysql数据库
-- 级联操作CASCADE
USE mydb_04;
SELECT * FROM emploee ;
SELECT * FROM dept ;
-- 为什么使用级联操作
-- 修改员工表(从表)的数据:dept_id
-- 不能直接修改/删除当前字段,除非当前这个表字段和主表的id字段没有关联关系,才能修改!
-- 删除员工表的id为9的人 (删除:先删除从表,在删除主表)
DELETE FROM emploee WHERE id = 9 ;
-- 删除部门 :删除4号部门
DELETE FROM dept WHERE id = 4;
-- 删除部门为3号部门
DELETE FROM dept WHERE id = 3 ;
-- Cannot delete or update a parent row: a foreign key constraint fails (`mydb_04`.`emploee`, CONSTRAINT `dept_emp_fk` FOREIGN KEY (`dept_id`) REFERENCES `dept` (`id`))
-- 结论:删除或者修改主表:不能操作的----必须先对从表数据进行删除或者修改!
-- 加入级联操作----修改或者删除主表 (从表的数据会随着主表的操作而变化!)
-- sql语句先将外键约束删除
ALTER TABLE emploee DROP FOREIGN KEY dept_emp_fk;
-- 添加级联操作(级联修改和级联删除)
ALTER TABLE emploee ADD
CONSTRAINT dept_emp_fk FOREIGN KEY (dept_id)
REFERENCES dept(id) ON DELETE CASCADE ON UPDATE CASCADE ;
-- 级联修改:
-- 需求:将1号部门变成5号部门 ,跟1号部门相关的员工的部门编号也会变化
UPDATE dept SET id = 5 WHERE id = 1 ;
-- 需求:删除2号部门,跟2号部门相关的员工也会被干掉
DELETE FROM dept WHERE id = 2 ;
SELECT * FROM dept ;
SELECT * FROM emploee ;
-- 当前员工表的dept_id(部门编号) 完全依赖于 部门表id
-- 数据库的备份和还原
-- 备份
-- 1)命令行的方式:进入dos
-- 备份的语法格式 mysqldump -u用户名 -p密码 数据库的名称 > 保存的路径
-- 2)使用推行界面化的方式来进行数据库的备份
-- 进入到sqlyog工具中--- 在数据库的上面右键---选择备份
-- 还原数据库
-- 1)进入dos之后:登录的msyql数据库中
-- 登录成功之后,删除当前mydb_04这个数据库
-- source 之前备份的sql文件路径-- 回车
-- 2)图形界面化的方式
-- 在sqlyog中删除当前mydb_04数据库,然后右键选择 以sql的转存文件来导入...
-- 多表查询
-- 通过查询两张或者两张以上的表时使用的sql语句---多表查询
CREATE DATABASE mydb_05 ;
USE mydb_05;
# 创建部门表
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键:部门编号
NAME VARCHAR(20) -- 部门名称
);
INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');
# 创建员工表
CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10),
gender CHAR(1), -- 性别
salary DOUBLE, -- 工资
join_date DATE, -- 入职日期
dept_id INT, -- 部门编号
FOREIGN KEY (dept_id) REFERENCES dept