前言:
本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~
所有SQL语法中符号含义:
- { }:必选项;
- [ ]:可选项;
- |:或,多选一
列名 字段类型 PRIMARY KEY
-- 示例1:创建一个带主键的表
CREATE TABLE emp1(
-- 设置主键 唯一 非空
eid INT PRIMARY KEY,
ename VARCHAR(20),
sex CHAR(1)
);
-- 示例2:给存在的表添加主键
CREATE TABLE emp2(
eid INT ,
ename VARCHAR(20),
sex CHAR(1)
)
----- 通过 DDL 语句进行设置
ALTER TABLE emp2 ADD PRIMARY KEY(eid);
-- 示例3:主键约束验证
--emp1中添加eid=1的数据:正常插入
INSERT INTO emp1(1,'张三','男');
--插入主键为NULL的数据:插入失败,报错
INSERT INTO emp1(NULL,'李四','男');
--插入主键值重复的数据:插入失败,报错
INSERT INTO emp1(1,'王二','男');
-- 创建主键自增的表
CREATE TABLE emp3(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
sex CHAR(1)
);
-- 查看新建表的详细信息
DESC emp3;
--添加数据,观察主键自动自增,
INSERT INTO emp3(ename,sex) VALUES('王二','男');
INSERT INTO emp3(ename,sex) VALUES('李四','男');
INSERT INTO emp3(ename,sex) VALUES('红红','女');
INSERT INTO emp3(ename,sex) VALUES('绿绿','女');
--DELETE 删除表数据然后再新增数据,观察自增值:自增编号由删除数据前主键值的最大值依次往下递增。对递增无影响,仍然按照之前的顺序依次增加
DELETE FROM emp4;
INSERT INTO emp4(ename,sex) VALUES('王二','男');
INSERT INTO emp4(ename,sex) VALUES('李四','男');
INSERT INTO emp4(ename,sex) VALUES('红红','女');
INSERT INTO emp4(ename,sex) VALUES('绿绿','女');
--TRUNCAT DELETE 删除表数据然后再新增数据,观察自增值:自增编号由1开始依次递增。对递增有影响,TRUNCATE相当于表删掉再重新建一张相同的表
TRUNCATE TABLE emp4;
INSERT INTO emp4(ename,sex) VALUES('王二','男');
INSERT INTO emp4(ename,sex) VALUES('李四','男');
INSERT INTO emp4(ename,sex) VALUES('红红','女');
INSERT INTO emp4(ename,sex) VALUES('绿绿','女');
-- 创建主键自增的表,自定义自增其实值
CREATE TABLE emp4(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
sex CHAR(1)
)AUTO_INCREMENT=100;
-- 查看新建表的详细信息
DESC emp4;
--添加数据,观察主键自动自增
INSERT INTO emp4(ename,sex) VALUES('王二','男');
INSERT INTO emp4(ename,sex) VALUES('李四','男');
INSERT INTO emp4(ename,sex) VALUES('红红','女');
INSERT INTO emp4(ename,sex) VALUES('绿绿','女');
-- 删除表中的主键语法
ALTER TABLE 表名 DROP PRIMARY KEY;
-- 使用 DDL 语句删除表中的主键
ALTER TABLE emp2 DROP PRIMARY KEY;
-- 查看表结构
DESC emp2;
列名 字段类型 NOT NULL
-- 添加非空约束
CREATE TABLE emp5(
eid INT PRIMARY KEY AUTO_INCREMENT,
-- ename 字段不能为空
ename VARCHAR(20) NOT NULL,
sex CHAR(1)
);
--查看表结构
DESC emp5;
--正常插入数据
INSERT INTO emp5(ename,sex) VALUES('王二','男');
--插入ename为空的数据:插入失败,报错
INSERT INTO emp5(ename,sex) VALUES(NULL,'男');
列名 字段类型 UNIQUE
-- 创建带有唯一约束的表
CREATE TABLE emp6(
eid INT PRIMARY KEY AUTO_INCREMENT,
-- 为 ename 字段添加唯一约束
ename VARCHAR(20) UNIQUE,
sex CHAR(1)
);
--查看表结构
DESC emp6;
--添加正常表数据
INSERT INTO emp6(ename,sex) VALUES('李四','男');
--添加ename重复的数据:报错,ename重复
INSERT INTO emp6(ename,sex) VALUES('李四','女');
列名 字段类型 DEFAULT 默认值
-- 创建带有默认值的表
CREATE TABLE emp7(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
-- 为 sex 字段添加默认值
sex CHAR(1) DEFAULT '女'
);
--查看表结构
DESC emp7;
--插入使用默认值数据
INSERT INTO emp7(ename,sex) VALUES('青青',DEFAULT);
INSERT INTO emp7(ename,sex) VALUES('兰兰');
--插入非默认值数据
INSERT INTO emp7(ename,sex) VALUES('小李','男');
假定我们现在需要创建一张员工信息表,包含字段:
创建员工信息表:
CREATE TABLE emp(
emp_id INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
age INT ,
gender VARCHAR(10),
dept_name VARCHAR(20),
dept_id INT,
dept_manager VARCHAR(20),
dept_location VARCHAR(20)
);
插入数据:
INSERT INTO emp VALUES (1,'张三', 20, '男','研发部',1,'张无忌','北京');
INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location)
VALUES ('李四', 25, '男','研发部',1,'张无忌','北京');
INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location)
VALUES ('宋江', 40, '男','研发部',1,'张无忌','北京');
INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location)
VALUES ('林冲', 25, '男','研发部',1,'张无忌','北京');
INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location)
VALUES ('林徽因', 25, '女','研发部',1,'张无忌','北京');
INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location)
VALUES ('周芷若', 25, '女','运营部',2,'赵敏','深圳');
INSERT INTO emp(ename, age,gender,dept_name,dept_id,dept_manager, dept_location)
VALUES ('任盈盈', 25, '女','运营部',2,'赵敏','深圳');
创建表:
# 创建员工信息表
CREATE TABLE emp_part(
emp_id INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
age INT ,
gender VARCHAR(10),
dept_id INT
);
# 创建部门表
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
dept_name VARCHAR(20),
dept_manager VARCHAR(20),
dept_location VARCHAR(20)
);
插入数据:
# 向部门表插入数据
INSERT INTO dept(dept_name,dept_manager,dept_location) VALUES('研发部','张无忌','北京');
INSERT INTO dept(dept_name,dept_manager,dept_location) VALUES('运营部','赵敏','深圳');
# 向员工信息表插入数据
INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('李四', 25, '男',1);
INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('宋江', 40, '男',1);
INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('张三', 20, '男',1);
INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('林冲', 25, '男',1);
INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('林徽因', 25,'女',1);
INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('周芷若', 25,'女',2);
INSERT INTO emp_part(ename,age,gender,dept_id) VALUES ('任盈盈', 25, '女',2);
CONSTRAINT [外键约束的名称] FOREIGN KEY (外键字段) REFERENCES [主表名称(主键字段)]
ALTER TABLE [表名] ADD CONSTRAINT [外键约束名称] FOREIGN KEY [外键字段] REFERENCES [主表名称(主键字段)]
示例:
--创建一个关联到主表的从表
CREATE TABLE emp_part(
emp_id INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
age INT ,
gender VARCHAR(10),
dept_id INT,
-- 添加外键约束
CONSTRAINT emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id)
);
--给已有从表添加外键约束,如果从表中有非法数据,则没办法添加外键约束
ALTER TABLE emp_part ADD CONSTRAINT enp_dept FOREIGN KEY [dept_id] REFERENCES dept(id);
--插入一条非法数据:报错。 注意:当在从表要插入的数据中外键值在主表中无法查找,应先在主表中插入相对应的主键值的数据,然后再插入从表中数据
INSERT INTO emp_part VALUES(1,'cindy',20,'F,'4');
--注意:当在从表要插入的数据中外键值在主表中无法查找,应先在主表中插入相对应的主键值的数据,然后再插入从表中数据
ALTER TABLE [表名] DROP FOREIGN KEY [外键约束名称]
--删除外键约束
ALTER TABLE emp_part DROP FOREIGN KEY emp_dept
--插入一条非法数据
INSERT INTO emp_part VALUES(1,'cindy',20,'female','4')
SELECT * FROM emp_part
---向主表中插入一条数据
INSERT INTO dept VALUES(2,'运营部','张三','北京')
--向从表中插入一条数据
INSERT INTO emp_part VALUES(1,'cindy',20,'female','2')
---删除主表中的数据:报错,原因是有一条外键约束
DELETE FROM dept WHERE id=2
--注意:需要先删除从表中的数据,再删除主表中的数据
--创建一个关联到主表的从表,并设置级联删除
CREATE TABLE emp_part(
emp_id INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
age INT ,
gender VARCHAR(10), dept_id INT,
-- 添加外键约束
CONSTRAINT emp_dept FOREIGN KEY(dept_id) REFERENCES dept(id)
-- 设置允许级联删除
ON DELETE CASCADE
);
--给已有从表添加级联删除约束
ALTER TABLE emp_part ADD CONSTRAINT enp_dept FOREIGN KEY [dept_id] REFERENCES dept(id) ON DELETE CASCADE;
--向员工信息表中添加一条数据
INSERT INTO emp_part VALUES(1,‘cindy’,20,‘female’,‘2’) ;
--删除主表中部门id=2的部门
DELETE FROM dept WHERE id=2 ;
--查看从表中的数据是否同时被删除
SELECT * FROM emp_part ;
文末说明:
接口测试中我们很容易混淆Session、cookie和token,你知道他们有什么区别吗?快来跟我一起看,一篇文章让你了解三者的区别。
⬇⬇⬇⬇⬇⬇⬇
:接口测试经典面试题:Session、cookie、token有什么区别?