目录
二. DDL(Data Definition Language)
三. DML(Data Manipulation Language) 重要
四. DQL(Data Query Language) 非常重要
一. SQL语句的分类
DDL 数据定义语言:用来定义数据库对象:数据库,表,列等
DML 数据操作语言(重要):用来对数据库中,表的数据进行增删改
DQL 数据查询语言(非常重要):用来查询数据库中,表的记录(数据)
DCL 数据控制语言:用来定义数据库访问权限、安全级别、创建用户
二. DDL(Data Definition Language)
1. 操作数据库
1.1 查询数据库
show databases;
show create database 数据库名称;
1.2 创建数据库
create database 数据库名称;
create database if not exists 数据库名称;
1.3 删除数据库
drop database 数据库名称;
1.4 使用数据库
use 数据库名称;
1.5 查看当前使用的数据库
select database();
2. 操作数据表
2.1 查询当前数据库下所有表名称
SHOW TABLES;
2.2 查询表结构
DESC 表名称;
show columns from 表名;
2.3 创建数据表的基本语法
CREATE TABLE 表名 (
字段名1 数据类型1,
字段名2 数据类型2,
…
字段名n 数据类型n
);
2.4 删除表
DROP TABLE 表名;
2.5 删除表时判断表是否存在
DROP TABLE IF EXISTS 表名;
2.6 修改表名
ALTER TABLE 表名 RENAME [AS|TO] 新的表名;
-- 将表名student修改为stu
alter table student rename to stu;
2.7 添加一列
ALTER TABLE 表名 ADD [column] 列名 数据类型 [first|after 列名];
-- 给stu表添加一列address,该字段类型是varchar(50)
alter table stu add address varchar(50);
2.8 修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型 [first|after 列名];
-- 将stu表中的address字段的类型改为 char(50)
alter table stu modify address char(50);
2.9 修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型 [first|after 列名];
-- 将stu表中的address字段名改为 addr,类型改为varchar(50)
alter table stu change address addr varchar(50);
2.10 删除列
ALTER TABLE 表名 DROP 列名;
-- 将stu表中的addr字段 删除
alter table stu drop addr;
三. DML(Data Manipulation Language) 重要
1. 语法说明
DML主要是对数据进行增(insert)删(delete)改(update)操作。
2. 添加数据
2.1 给指定列添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
2.2 给全部列添加数据
INSERT INTO 表名 VALUES(值1,值2,…);
2.3 批量添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
3. 修改及删除数据
3.1 修改表数据
UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件] ;
-- 注意:
-- 1. 修改语句中如果不加条件,则将所有数据都修改!
-- 2. 像上面的语句中的中括号,表示在写sql语句中可以省略这部分
3.2 删除表数据
DELETE FROM 表名 [WHERE 条件] ;
-- 注意:如果不加条件, 所有数据都被删除了 很严重
四. DQL(Data Query Language) 非常重要
1. 语法说明
1.1 查询的完整语法
SELECT 字段列表
FROM 表名列表
WHERE 条件列表
GROUP BY 分组字段
HAVING 分组后条件
ORDER BY 排序字段
LIMIT 分页限定
1.2 条件列表
注意事项:
语句中 && 和 and 都表示并且的意思。建议使用 and 。
可以使用 between ... and 来实现范围查询。
null值的比较不能使用 = 或者 != 。需要使用 is 或者 is not
1.3 模糊查询
模糊查询的基本语法:
模糊查询使用like关键字,可以使用通配符进行占位:
1)_ : 代表单个任意字符
2)% : 代表任意个数字符
1.4 排序查询
1)ASC : 升序排列 (默认值)
2)DESC : 降序排列
1.5 聚合函数分类
1.6 where 和 having 的区别
执行时机不一样:
where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
可判断的条件不一样:
where 不能对聚合函数进行判断,having 可以。
1.7 分页查询起始索引计算公式
起始索引 = (当前页码 - 1) * 每页显示的条数
2. 常用语法
2.1 查询多个字段
SELECT 字段列表 FROM 表名;
SELECT * FROM 表名; -- 查询所有数据
2.2 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
2.3 起别名
AS: AS 也可以省略
2.4 条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
2.5 模糊查询案例
- 查询姓'马'的信息
select * from tb_user where name like "马%"
- 查询第二个字是'小'的信息
select * from tb_user where name like "_小%"
- 查询名字中包含 '云' 的信息
select * from tb_user where name like "%云%"
2.6 排序查询
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
-- 按照字段升序排列
select * from 表 order by 字段 ;
-- 按照字段降序排列
select * from 表 order by 字段 desc ;
-- 按照字段降序排列,如果字段值相同,再按照其他字段升序排列
select * from 表 order by 字段1 desc , 字段2 asc ;
2.7 聚合函数
SELECT 聚合函数名(列名) FROM 表;
-- 注意:null 值不参与所有聚合函数运算
2.8 分组查询
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
-- 注意:**分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
2.9 分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
-- 注意: 上述语句中的起始索引是从0开始
五. 多表查询
1. 约束的分类
约束是作用于表中列上的规则,限制加入表的数据,保证了数据库中数据的正确性、有效性和完整性。
非空约束: 关键字是 NOT NULL
唯一约束:关键字是 UNIQUE
主键约束: 关键字是 PRIMARY KEY
检查约束: 关键字是 CHECK
默认约束: 关键字是 DEFAULT
外键约束: 关键字是 FOREIGN KEY
2. 约束的语法格式
2.1 非空约束
-- 创建表时添加非空约束
CREATE TABLE 表名(
列名 数据类型 NOT NULL,
…
);
2.2 唯一约束
-- 创建表时添加唯一约束
CREATE TABLE 表名(
列名 数据类型 UNIQUE [AUTO_INCREMENT],
-- AUTO_INCREMENT: 当不指定值时自动增长
…
);
CREATE TABLE 表名(
列名 数据类型,
…
[CONSTRAINT] [约束名称] UNIQUE(列名)
);
2.3 主键约束
-- 创建表时添加主键约束
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
…
);
CREATE TABLE 表名(
列名 数据类型,
[CONSTRAINT] [约束名称] PRIMARY KEY(列名)
);
2.4 默认约束
-- 创建表时添加默认约束
CREATE TABLE 表名(
列名 数据类型 DEFAULT 默认值,
…
);
2.5 外键约束
-- 建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
-- 删除外键约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
3. 多表查询的分类
连接查询:
内连接查询:相当于查询AB交集数据
外连接查询:
左外连接查询:相当于查询A表所有数据和交集部门数据
右外连接查询: 相当于查询B表所有数据和交集部分数据
子查询:
查询中嵌套查询,称嵌套查询为子查询
子查询语句的编写位置:
1)子查询语句作为条件值,使用 = != > < 等进行条件判断,子查询语句结果是单行单列
2)子查询语句作为条件值,使用 in 等关键字进行条件判断,子查询语句结果是多行单列
3)子查询语句作为虚拟表,子查询语句结果是多行多列
4. 多表的语法格式
4.1 内连接查询的语法格式
-- 隐式内连接
SELECT 字段列表 FROM 表1,表2… WHERE 条件;
-- 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
-- 注意:
--内连接相当于查询 A B 交集数据
4.2 外连接查询的语法格式
-- 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
-- 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
--注意:
--左外连接:相当于查询A表所有数据和交集部分数据
--右外连接:相当于查询B表所有数据和交集部分数据
4.3 子查询的语法格式
-- 子查询语句的编写位置
select * from 表1 , (sql语句) where 条件
select * from 表1 join (sql语句) on 条件
select * from 表1 where id = (sql语句) --- 100
select * from 表1 where id in (sql语句) --- 1,2,3,4,5
5. 事务
5.1 事务的四大特征
说明:mysql中事务是自动提交的,也就是说我们不添加事务执行sql语句,语句执行完毕会自动的提交事务。
原子性(Atomicity): 事务是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性(Consistency) : 事务完成时,必须使所有的数据都保持一致状态
隔离性(Isolation) : 多个事务之间,操作的可见性
持久性(Durability) : 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
5.2 事务的基本语法
开启事务:begin
START TRANSACTION;
或者
BEGIN;
提交事务:commit
commit;
回滚事务:rollback
rollback;