MySQL
文章目录
SQL语句
- DDL 是对数据库和表的增删改查操作
- DML是对数据的增删改操作
- DQL是对数据的查询操作
一、DDL
1.DDL --操作数据库
1.1.查询
SHOW DATABASES;
1.2.创建
1. CREATE DATEBASE 数据库名称;
2. CREATE DATABASE IF NOT EXISTS 数据库名称;
1.3.删除
1.DROP DATABASE 数据库名称;
2.DROP DATABASE IF EXISTS 数据库名称;
1.4.使用数据库
1.查看当前使用使用数据库
SELECT DATABASE( );
2.使用数据库
USE 数据库名称;
2.DDL --操作表
2.1查询表
1.查询当前数据库下所有表:
SHOW TABLES;
2.查询表结构
DESC 表名称;
2.2创建表
CREAT TABLE 表名(
字段名1 数据类型1,
字段名2 数据类型2,
字段名n 数据类型n
);
注意:最后一行末尾不能加分号,每一个用逗号隔开,用小括号
数据类型
MySQL 支持多种类型,可以分为三类:
数值型,日期,字符串
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p31tXx8n-1668562992280)(en-resource://database/1017:1)]
2.3删除表
-
删除表:
DROP TABLE 表名;
2.删除表时判断表是否存在
DROP TABLE IF EXISTS 表名;
2.4修改表
-
修改表名
ALTER TABLE 表名 RENAME TO 新的表名;
-
添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
-
修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
-
修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
-
删除列
ALTER TABLE 表名 DROP 列名;
二、DML --对数据的增删改操作
1.添加数据
-
给指定列添加数据
INSERT INTO 表名(列名1,列名2,···) VALUES(值1,值2···);
-
给全部列添加数据
INSERT INTO 表名 VALUES(值1,值2···);
-
批量添加数据
INSERT INTO 表名(列名1,列名2,···) VALUES(值1,值2···),(值1,值2···),(值1,值2···)···); INSERT INTO 表名 VALUES(值1,值2···),(值1,值2···),(值1,值2···)···;
2.修改数据
UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,···[WHERE 条件] ;
注意:修改语句中如果不加添加条件,则所有数据都会被修改
3.删除数据
DELETE FROM 表名 [WHERE 条件];
注意:修改语句中如果不加添加条件,则所有数据都会被删除
三、DQL --对数据的查询
注释:
- SELECT [DISTINCT] 子句:指定查询结果中需要显示的列,当子句为 * 时表示查询所有数据。DISTNCT是用来在查询中去掉重复数据项。
- AS:是来更改查询结果中的列名。
- FROM 子句:指定要查询的的表。
- WHERE 表达式:指定查询的检索条件。
- GROUP BY 子句:指定查询结果的分组条件。
- HAUING 表达式:指定分组的筛选条件。
- ORDER BY 子句:指定查询结果的排序列和排序方法。
- INTO OUTFILE 输出文件名:将查询的结果保存到指定的文件中。
1.基础查询
-
查询多个字段
SELECT 字段列表 FROM 表名; SELECT * FROM 表名; -- 查询所有数据
-
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
-
起别名
AS: (AS也可以省略,用空格隔开)
2.条件查询(WHERE)
-
条件查询语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
注意:null值的比较不能用 = != 需要用 is, is not来比较
like
通配符:_:可以匹配单个任意字符
%:匹配多个任意字符,可以是0个
3.分组查询(GROUP BY)
-
分组查询语法
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意: 分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
- where 和 having 区别:
- 执行时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤
- 可判断的条件不一样: where不能对聚合函数进行判断,having可以
执行顺序:where>聚合函数>having
分完组之后用聚合函数进行计算操作
聚合函数
- 概念
将一列数据作为一个整体,进行纵向计算 - 聚合函数分类
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般不用选用为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
-
聚合函数语法:
SELECT 聚合函数名(列名)FROM 表;
注意:null值不参与所有聚合函数运算
注意点:
1. count取值:主键、*
4.排序查询(ORDER BY)
-
排序查询语法
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2]···;
-
排序方式:
ASC: 升序排列(默认值)
DESC:降序排列
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
5.分页查询(LIMIT)
1.分页查询语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
- 起始索引: 从0开始
计算公式: 起始索引= (当前页面-1)*每页显示的条数
tips:
- 分页查询limit 是MySQL数据库的方言
- Oracle 分页查询使用 rownumber
- SQL Server 分页查询使用top
约束
1. 约束的概念
- 约束是作用于表中列上的规则,用于限制加入表的数据
- 约束的存在保证了数据库中数据的正确性,有效性和完整性
2. 约束的分类
约束名称 | 描述 | 关键字 |
---|---|---|
非空约束 | 保证列中所有数据不能有null值 | NOT NULL |
唯一约束 | 保证列中所有数据各不相同 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
检查约束(MySQL 不支持 ) | 保证列中的值满足某一条件 | CHECK |
默认约束 | 保存数据时,未指定值则采用默认值 | DEFAULT |
外键约束 | 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 | FOREIGN KEY |
自动增长:auto_increment;(当列是数字类型且 唯一约束)
3. 外键约束
- 添加约束:
-- 创建表的时候添加外键约束
CREATE TABLE 表名(
列名 数据类型,
···
[CONSTRAINT] [ 外键名称 ] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);
--建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAING 外键名称 FOREION KEY(外键字段名称) REFERENCES 主键名称(主键列名称);
-
删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
数据库设计
表关系:一对一,一对多,多对多
1.表关系之一对多
- 如:部门表和员工表
- 一个部门对应多个员工,多个员工对应一个部门
实现方式:在多的一方建立外键,指向一的一方的主键
2.多对多
- 如:订单和商品
- 一个商品对应多个订单,一个订单包含多个商品
实现方式:建立第三章中间表,中间表至少包含两个外键,分别关联两方主键
·
3.一对一
- 如:用户和用户详情
- 一对一关系多用于表的拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能
实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一
多表查询
从多张表查询数据
- 连接查询:
- 内连接:相当于查询A,B交集的数据
- 外连接:
- 左外连接:相当于查询A表所有数据和交集部分数据
- 右外连接:相当于查询B表所有数据和交集部分数据
- 子查询:
1.内连接
内连接 相当于查询A,B交集的数据
1.内连接查询语法
-- 隐式内连接
SELECT 字段列表 FROM 表1,表2... WHERE 条件;
-- 显示内连接
SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 条件;
2.外连接
- 左外连接:相当于查询A表所有数据和交集部分数据
- 右外连接:相当于查询B表所有数据和交集部分数据
--左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
--右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
3.子查询
- 子查询:查询中嵌套查询,称嵌套查询为子查询
- 子查询根据查询结果不同,作用不同:
- 单行单列
- 多行单列
- 多行多列
事务
1.事物简介:
- 数据库事务(Transaction)是一种机制,一个操作序列,包含了
一组数据库操作命令
- 这一组数据库命令
要么同时成功,要么同时失败
- 事务是一个不可分割的工作逻辑单元
2.事务操作
-- 开启事务
START TRANSACTION; 或者 BEGIN;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;