主键外键
sh
#若系统中存在数据库ems,则删除数据库ems
DROP DATABASE IF EXISTS ems;
# 创建一个名称为ems,字符集为utf8的数据库
CREATE DATABASE IF NOT EXISTS ems CHARACTER SET utf8;
# 选择数据库ems
USE ems;
# 向数据库ems中创建员工表emp
# -----------------------------------------------------------------------------------------------
# 字段 类型 主键 外键 非空 唯一 自增 字段说明
# -----------------------------------------------------------------------------------------------
# empno INT 是 否 是 是 否 员工号
# ename VARCHAR(20) 否 否 是 是 否 员工名
# job VARCHAR(20) 否 否 否 否 否 岗位
# mgr INT 否 否 否 否 否 管理者
# sal DECIMAL(7,2) 否 否 否 否 否 工资
# comm DECIMAL(7,2) 否 否 否 否 否 奖金
# deptno INT 否 否 否 否 否 部门号
# -----------------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS emp(
empno INT PRIMARY KEY,
ename VARCHAR(20) NOT NULL UNIQUE,
job VARCHAR(20),
mgr INT ,
sal DECIMAL(7, 2),
comm DECIMAL(7, 2),
deptno INT
);
DESC emp;
#/*3.1插入数据 */
#------------------------------------------------------------------------------
#empno ename job mgr sal comm deptno
#------------------------------------------------------------------------------
#9369 张三 保洁 9982 900.00 NULL 20
#9499 孙七 销售 9698 2600.00 300.00 30
#9521 周八 销售 9698 2258.00 500.00 30
#9566 李四 经理 9839 3995.00 NULL 20
#9654 吴九 销售 9698 2250.00 1400.00 30
#9839 刘一 董事长 NULL 6000.00 NULL 10
#9844 郑十 销售 9698 2500.00 0.00 30
#9900 箫十一 保洁 9698 1050.00 NULL 30
#9902 赵六 分析员 9566 4000.00 NULL 20
#9982 陈二 经理 9839 3450.00 NULL 10
#9988 王五 分析员 9566 4000.00 NULL 20
#-------------------------------------------------------------------------------
#/*3.1.1一次插入单条数据 */
#用简化形式将第一条记录插入到员工表emp中
INSERT INTO emp VALUES
(9369, '张三', '保洁', 9982, 900, NULL, 20);
SELECT * FROM emp;
#用一般形式将第二条记录插入到员工表emp中
INSERT INTO emp(empno, ename, job, mgr, sal, comm, deptno)
VALUES(9499, '孙七', '销售', 9698, 2600, 300, 30);
SELECT * FROM emp;
#/*3.1.2一次插入多条数据 */
# 用一条语句将剩下的记录插入到员工表emp中
INSERT INTO emp VALUES
(9521, '周八', '销售', 9698, 2258, 500, 30),
(9566, '李四', '经理', 9839, 3995, NULL, 20),
(9654, '吴九', '销售', 9698, 2250, 1400, 30),
(9839, '刘一', '董事长', NULL, 6000, NULL, 10),
(9844, '郑十', '销售', 9698, 2500, 0, 30),
(9900, '箫十一', '保洁', 9698, 1050, NULL, 30),
(9902, '赵六', '分析员', 9566, 4000, NULL, 20),
(9982, '陈二', '经理', 9839, 3450, NULL, 10),
(9988, '王五', '分析员', 9566, 4000, NULL, 20);
SELECT * FROM emp;
#/*3.2更新数据 */
# 将员工张三的sal字段的值在原来的基础上增加200
UPDATE emp
SET sal = sal + 200
WHERE ename = '张三';
SELECT * FROM emp;
# 将职位为保洁的员工涨薪300
UPDATE emp
SET sal = sal + 300
WHERE job = '保洁';
SELECT * FROM emp;
# 将所有员工涨薪500
UPDATE emp
SET sal = sal + 500;
SELECT * FROM emp;
#/*3.3删除数据 */
# 删除员工表中孙七的数据
DELETE FROM emp
WHERE ename = '孙七';
SELECT * FROM emp;
# 删除员工表中职位为分析员的数据
DELETE FROM emp
WHERE job = '分析员';
SELECT * FROM emp;
# 将员工表中的所有数据全部删除
DELETE FROM emp;
SELECT * FROM emp;
#/*多学一招:使用关键字TRUNCATE删除表中数据 */
# 创建tab_truncate表
#-----------------------------------------------------
#字段 类型 主键 自动增长
# -----------------------------------------------------
# id INT 是 是
# NAME VARCHAR(4) 否 否
# -----------------------------------------------------
CREATE TABLE tab_truncate(
id INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(4)
);
DESC tab_truncate;
# 向tab_truncate表中添加5条数据
# ------------------------
# id NAME
# ------------------------
# 1 A
# 2 B
# 3 C
# 4 D
# 5 E
# ------------------------
INSERT INTO tab_truncate(`name`) VALUES
('A'),
('B'),
('C'),
('D'),
('E');
SELECT * FROM tab_truncate;
# 使用TRUNCATE语句删除tab_truncate表中的所有数据
TRUNCATE TABLE tab_truncate;
SELECT * FROM tab_truncate;
# 在表tab_truncate 中,重新添加5条数据
# ------------------------
# id NAME
# ------------------------
# 1 F
# 2 G
# 3 H
# 4 I
# 5 J
# ------------------------
INSERT INTO tab_truncate(`name`) VALUES
('F'),
('G'),
('H'),
('I'),
('J');
SELECT *
FROM tab_truncate;
# 使用DELETE语句删除tab_truncate表中的所有数据
DELETE FROM tab_truncate;
# 向tab_truncate数据表中添加一条新数据
INSERT INTO tab_truncate(NAME) VALUES('K');
SELECT * FROM tab_truncate;
#-----------------------------------第五章第三节----------------------------------------------
#若数据库ems存在,则删除数据库ems
DROP DATABASE IF EXISTS ems;
# 创建一个名称为ems,字符集为utf8的数据库
CREATE DATABASE IF NOT EXISTS ems CHARACTER SET utf8;
# 选择数据库ems
USE ems;
#向数据库ems中创建部门表dept
#-----------------------------------------------------------------------------------------------
#字段 类型 主键 外键 非空 唯一 自增 字段说明
#-----------------------------------------------------------------------------------------------
#deptno INT 是 否 是 是 否 部门号
#dname VARCHAR(20) 否 否 是 是 否 部门名
#------------------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS dept(
deptno INT PRIMARY KEY,
dname VARCHAR(20) NOT NULL UNIQUE
);
DESC dept;
#向部门表中插入数据
#-------------------------
#deptno dname
#-------------------------
# 10 总裁办
# 20 研究院
# 30 销售部
# 40 运营部
#-------------------------
INSERT INTO dept VALUES
(10, '总裁办'),
(20, '研究院'),
(30, '销售部'),
(40, '运营部');
SELECT * FROM dept;
# 向数据库ems中创建员工表emp
#-----------------------------------------------------------------------------------------------
#字段 类型 主键 外键 非空 唯一 自增 字段说明
#-----------------------------------------------------------------------------------------------
# empno INT 是 否 是 是 否 员工号
# ename VARCHAR(20) 否 否 是 是 否 员工名
# job VARCHAR(20) 否 否 否 否 否 岗位
# mgr INT 否 否 否 否 否 管理者
# sal DECIMAL(7,2) 否 否 否 否 否 工资
# comm DECIMAL(7,2) 否 否 否 否 否 奖金
# deptno INT 否 是 否 否 否 部门号
#-----------------------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS emp(
empno INT PRIMARY KEY,
ename VARCHAR(20) NOT NULL UNIQUE,
job VARCHAR(20),
mgr INT,
sal DECIMAL(7, 2),
comm DECIMAL(7, 2),
deptno INT,
CONSTRAINT FOREIGN KEY(deptno) REFERENCES dept(deptno)
);
DESC emp;
#/*向员工表插入数据 */
#------------------------------------------------------------------------------
empno ename job mgr sal comm deptno
#------------------------------------------------------------------------------
# 9369 张三 保洁 9982 900.00 NULL 20
# 9499 孙七 销售 9698 2600.00 300.00 30
# 9521 周八 销售 9698 2258.00 500.00 30
# 9566 李四 经理 9839 3995.00 NULL 20
# 9654 吴九 销售 9698 2250.00 1400.00 30
# 9839 刘一 董事长 NULL 6000.00 NULL 10
# 9844 郑十 销售 9698 2500.00 0.00 30
# 9900 箫十一 保洁 9698 1050.00 NULL 30
# 9902 赵六 分析员 9566 4000.00 NULL 20
# 9982 陈二 经理 9839 3450.00 NULL 10
# 9988 王五 分析员 9566 4000.00 NULL 20
#-------------------------------------------------------------------------------
INSERT INTO emp VALUES
(9369, '张三', '保洁', 9982, 900, NULL, 20),
(9499, '孙七', '销售', 9698, 2600, 300, 30),
(9521, '周八', '销售', 9698, 2258, 500, 30),
(9566, '李四', '经理', 9839, 3995, NULL, 20),
(9654, '吴九', '销售', 9698, 2250, 1400, 30),
(9839, '刘一', '董事长', NULL, 6000, NULL, 10),
(9844, '郑十', '销售', 9698, 2500, 0, 30),
(9900, '箫十一', '保洁', 9698, 1050, NULL, 30),
(9902, '赵六', '分析员', 9566, 4000, NULL, 20),
(9982, '陈二', '经理', 9839, 3450, NULL, 10),
(9988, '王五', '分析员', 9566, 4000, NULL, 20);
#5.3.0 删除员工表的外键约束
#查看外键约束名 show create table emp;
ALTER TABLE emp DROP FOREIGN KEY emp_ibfk_1;
#查看表中所有索引show index from emp;
ALTER TABLE emp DROP INDEX deptno;
DESC emp;
# /*5.3.1添加外键约束 */
# 给员工表emp的deptno字段添加外键约束,关联部门表dept的deptno字段,约束名fk_deptno
ALTER TABLE emp ADD CONSTRAINT fk_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno);
DESC emp;
#/*5.3.2操作关联表 */
## 主表dept添加数据
#-------------------------
#deptno dname
#-------------------------
#50 人力资源部
#-------------------------
INSERT INTO dept VALUES
(50, '人力资源部');
SELECT * FROM dept;
# 在往员工表emp中添加数据
#------------------------------------------------------------------------------
#empno ename job mgr sal comm deptno
#------------------------------------------------------------------------------
#9966 八戒 运营专员 9839 3000.00 2000 40
#9999 悟空 人事专员 9982 3000.00 NULL 50
#-------------------------------------------------------------------------------
INSERT INTO emp VALUES
(9966, '八戒', '运营专员', 9839, 3000, 2000, 40),
(9999, '悟空', '人事专员', 9982, 3000, NULL, 50);
SELECT * FROM emp;
# 查询人力资源部有哪些员工
SELECT *
FROM emp
WHERE deptno = (
SELECT deptno
FROM dept
WHERE dname = '人力资源部'
);
# 删除从表emp中属于人力资源部的员工信息
DELETE FROM emp
WHERE deptno = (
SELECT deptno
FROM dept
WHERE dname = '人力资源部'
);
SELECT * FROM emp;
# 查询属于人力资源部的员工信息
SELECT *
FROM emp
WHERE deptno = (
SELECT deptno
FROM dept
WHERE dname = '人力资源部'
);
# 删除主表dept中人力资源部的数据
DELETE FROM dept
WHERE dname = '人力资源部';
SELECT * FROM dept;
# /*5.3.3删除外键约束 */
# 将员工表emp中的外键约束删除
ALTER TABLE emp DROP FOREIGN KEY fk_deptno;
#查看表中所有索引show index from emp;
ALTER TABLE emp DROP INDEX fk_deptno;
DESC emp;
#删除数据库ems
DROP DATABASE ems;
sh
#若数据库ems存在,则删除数据库ems
DROP DATABASE IF EXISTS ems;
# 创建一个名称为ems,字符集为utf8的数据库
CREATE DATABASE ems CHARACTER SET utf8;
# 选择数据库ems
USE ems;
#向数据库ems中创建部门表dept
# -----------------------------------------------------------------------------------------------
# 字段 类型 主键 外键 非空 唯一 自增 字段说明
# -----------------------------------------------------------------------------------------------
# deptno INT 是 否 是 是 否 部门号
# dname VARCHAR(20) 否 否 是 是 否 部门名
# ------------------------------------------------------------------------------------------------
CREATE TABLE dept(
deptno INT PRIMARY KEY,
dname VARCHAR(20) NOT NULL UNIQUE
);
#向部门表中插入数据
# -------------------------
# deptno dname
# -------------------------
# 10 总裁办
# 20 研究院
# 30 销售部
# 40 运营部
# -------------------------
INSERT INTO dept VALUES
(10, '总裁办'),
(20, '研究院'),
(30, '销售部'),
(40, '运营部');
# 向数据库ems中创建员工表emp
# -----------------------------------------------------------------------------------------------
# 字段 类型 主键 外键 非空 唯一 自增 字段说明
# -----------------------------------------------------------------------------------------------
# empno INT 是 否 是 是 否 员工号
# ename VARCHAR(20) 否 否 是 是 否 员工名
# job VARCHAR(20) 否 否 否 否 否 岗位
# mgr INT 否 否 否 否 否 管理者
# sal DECIMAL(7,2) 否 否 否 否 否 工资
# comm DECIMAL(7,2) 否 否 否 否 否 奖金
# deptno INT 否 是 否 否 否 部门号
# -----------------------------------------------------------------------------------------------
CREATE TABLE emp(
empno INT PRIMARY KEY,
ename VARCHAR(20) NOT NULL UNIQUE,
job VARCHAR(20),
mgr INT,
sal DECIMAL(7, 2),
comm DECIMAL(7, 2),
deptno INT,
FOREIGN KEY(deptno) REFERENCES dept(deptno)
);
DESC emp;
# /*向员工表插入数据 */
# ------------------------------------------------------------------------------
# empno ename job mgr sal comm deptno
# ------------------------------------------------------------------------------
# 9369 张三 保洁 9982 900.00 NULL 20
# 9499 孙七 销售 9698 2600.00 300.00 30
# 9521 周八 销售 9698 2258.00 500.00 30
# 9566 李四 经理 9839 3995.00 NULL 20
# 9654 吴九 销售 9698 2250.00 1400.00 30
# 9839 刘一 董事长 NULL 6000.00 NULL 10
# 9844 郑十 销售 9698 2500.00 0.00 30
# 9900 箫十一 保洁 9698 1050.00 NULL 30
# 9902 赵六 分析员 9566 4000.00 NULL 20
# 9982 陈二 经理 9839 3450.00 NULL 10
# 9988 王五 分析员 9566 4000.00 NULL 20
# -------------------------------------------------------------------------------
INSERT INTO emp VALUES
(9369, '张三', '保洁', 9982, 900, NULL, 20),
(9499, '孙七', '销售', 9698, 2600, 300, 30),
(9521, '周八', '销售', 9698, 2258, 500, 30),
(9566, '李四', '经理', 9839, 3995, NULL, 20),
(9654, '吴九', '销售', 9698, 2250, 1400, 30),
(9839, '刘一', '董事长', NULL, 6000, NULL, 10),
(9844, '郑十', '销售', 9698, 2500, 0, 30),
(9900, '箫十一', '保洁', 9698, 1050, NULL, 30),
(9902, '赵六', '分析员', 9566, 4000, NULL, 20),
(9982, '陈二', '经理', 9839, 3450, NULL, 10),
(9988, '王五', '分析员', 9566, 4000, NULL, 20);
SELECT * FROM emp;
#5.3.0 删除员工表的外键约束
ALTER TABLE emp DROP FOREIGN KEY emp_ibfk_1;
ALTER TABLE emp DROP INDEX deptno;
# /*5.3.1添加外键约束 */
# 给员工表emp的deptno字段添加外键约束,关联部门表dept的deptno字段,约束名fk_deptno
ALTER TABLE emp ADD CONSTRAINT fk_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno);
#/*5.3.2操作关联表 */
# 主表dept添加数据
# -------------------------
# deptno dname
# -------------------------
# 50 人力资源部
# -------------------------
INSERT INTO dept VALUES
(50, '人力资源部');
SELECT * FROM dept;
# 在往员工表emp中添加数据
# ------------------------------------------------------------------------------
# empno ename job mgr sal comm deptno
# ------------------------------------------------------------------------------
# 9966 八戒 运营专员 9839 3000.00 2000 40
# 9999 悟空 人事专员 9982 3000.00 NULL 50
# -------------------------------------------------------------------------------
INSERT INTO emp VALUES
(9966, '八戒', '运营专员', 9839, 3000, 2000, 40),
(9999, '悟空', '人事专员', 9982, 3000, NULL, 50);
SELECT * FROM emp;
# 查询人力资源部有哪些员工
SELECT *
FROM emp
#where deptno = (人力资源的部门号);
WHERE deptno = (
SELECT deptno
FROM dept
WHERE dname = '人力资源部'
);
# 删除从表emp中属于人力资源部的员工信息
DELETE FROM emp
#where deptno = (人力资源的部门号)
WHERE deptno = (
SELECT deptno
FROM dept
WHERE dname = '人力资源部'
);
# 查询属于人力资源部的员工信息
SELECT *
FROM emp
WHERE deptno = (
SELECT deptno
FROM dept
WHERE dname = '人力资源部'
);
# 删除主表dept中人力资源部的数据
DELETE FROM dept
WHERE dname = '人力资源部';
SELECT * FROM dept;
/*5.3.3删除外键约束 */
# 将员工表emp中的外键约束删除
ALTER TABLE emp DROP FOREIGN KEY fk_deptno;
ALTER TABLE emp DROP INDEX fk_deptno;