概述
名称 | 全称 | 简称 |
---|---|---|
数据库 | 存储数据的仓库,数据是有组织的进行存储 | DataBase (DB) |
数据库管理系统 | 操纵和管理数据库的大型软件 | DataBase Management System (DBMS) |
SQL | 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 | Structured Query Language (sQL) |
-
mysql (DBMS)的数据模型
sql
SQL通用语法
```
1. SQL语句可以单行或多行书写,以分号结尾。2. SQL语句可以使用空格/缩进来增强语句的可读性。
3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4. 注释:
4.1 单行注释:--注释内容或#注释内容(MySQL特有)
4.2 多行注释:/*注释内容*/
```
SQL分类
| 分类 | 全称 | 说明 |
|:--:|:--:|:--|
| DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
| DMIL | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
| DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
| DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
DDL-数据库操作
-
查询
- 查询所有数据库
SHOW DATABASES;
- 查询当前数据库
SELECT DATABASE();
- 查询所有数据库
-
创建
CREATE DATABASE [ IF NOT EXISTS]数据库名「DEFAULT CHARSET 字符集][ COLLATE 排序规则;
-
删除
DROP DATABASE [ IF EXISTS]数据库名;
-
使用
USE 数据库名;
-
DDL-表操作-查询
- 查询当前数据库所有表
SHOW TABLES;
- 查询表结构
DESC表名;
- 查询指定表的建表语句
SHOW CREATE TABLE表名;
- 查询当前数据库所有表
-
DDL-表操作-创建
```
CREATE TABLE表名(
字段1 字段1 类型[ COMMENT字段1注释],
字段2字段2类型[COMMENT 字段2注释],
字段3字段3类型[COMMENT字段3注释],
......
字段n字段n类型[COMMENT字段n注释]) [ COMMENT 表注释];
```
-
数据类型
- 数值类型表
类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围 描述 TINYINT 1 byte (-128,127) (0,255) 小整数值 SMALLINT 2 bytes ( -32768,32767) (0,65535) 大整数值 MEDIUMINT 3 bytes (-8388608,8388607) (0,16777215) 大整数值 工NT或INTEGER 4 bytes (-2147483648,2147483647) (0,4294967295) 大整数值 BIGINT 8 bytes (-263,263-1) (0,2^64-1) 极大整数值 FLOAT 4 bytes (-3.402823466 E+38,3.402823466351 E+38) 0和(1.175494351 E-38,3.402823466 E+38) 单精度浮点数值 DOUBLE 8 bytes (-1.7976931348623157 E+308,1.7976931348623157 E+308) 0和(2.2250738585072014 E-308,1.7976931348623157 E+308) 双精度浮点数值 DECIMAL 依赖于M(精度)和D(标度)的值 依赖于M(精度)和D(标度)的值 小数值(精确定点数) - 字符串类型表
类型 大小 描述 CHAR 0-255 bytes 定长字符串 VARCHAR 0-65535 bytes 变长字符串 TINYBLOB 0-255 bytes 不超过255个字符的二进制数据 TINYTEXT 0-255 bytes 短文本字符串 BLOB 0-65535 bytes 进制形式的长文本数据 TEXT 0-65 535 bytes 长文本数据 MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据 MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据 LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据 L.ONGTEXT 0-4 294 967 295 bytes 极大文本数据 - 日期类型表
类型 大小 范围 格式 描述 DATE 3 1000-01-01至9999-12-31 rrrY-MM一DD 日期值 TIME 3 -838:59:59至838:59:59 HH:MM :ss 时间值或持续时间 YEAR 1 1901至2155 YYYY 年份值 DATETIME 8 1000-01-01 00:00:00至9999-12-31 23:59:59 YYrY-MM-DD HH:MM : ss 混合日期和时间值 TIMESTAMP 1970-01-01 00:00:01 至2038-01-19 03:14:07 YYYY-MM-DD HH:MM :Ss 混合日期和时间值 时间戳 -
DDL-表操作-修改
- 添加字段 ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT注释][约束]; - 修改数据类型 ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); - 修改字段名和字段类型 ALTER TABLE表名 CHANGE 旧字段名 新字段名 类型(长度)[COMMENT注释][约束]; - 删除字段 ALTER TABLE 表名 DROP 字段名; - 修改表名 ALTER TABLE表名RENAME TO新表名; - 删除表 DROP TABLE[ IF EXISTS] 表名; - 删除指定表,并重新创建该表 TRUNCATE TABLE表名;
DML-介绍
- DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。
-
添加数据(INSERT)
- DML-添加数据
1.给指定字段添加数据 INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,..); 2.给全部字段添加数据 INSERT INTO 表名 VALUES (值1,值2,,...); 3.批量添加数据 INSERT INTO 表名 (字段名1,字段名2,.…)VALUES(值1,值2,.….),(值1,值2,...),(值1,值2 ...); INSERT INTO 表名 VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);
-
注意:
- 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
- 字符串和日期型数据应该包含在引号中。
- 插入的数据大小,应该在字段的规定范围内。
-
修改数据(UPDATE)
UPDATE 表名SE字段名1=值1,字段名2=值2,....[ WHERE条件];
-
删除数据(DELETE)
DELETE FROM表名[ WHERE 条件]
- 注意:
- DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
- DELETE语句不能删除某一个字段的值(可以使用UPDATE)。
- 注意:
DQL-介绍
-
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。
-
查询关键字:SELECT
-
语法:
SELECT 字段列表心 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数
基本查询 条件查询(WHERE) 聚合函数(count、max、min、avg.sum) 分组查询(GROUP BY) 排序查询(ORDER BY) 分页查询(LIMIT)
-
DQL-基本查询
-
- 查询多个字段
SELECT字段1,字段2,字段3... FROM 表名;SELECT *FROM 表名;
-
- 设置别名
SELECT字段1 [AS 别名1],字段2[AS 别名2]...FROM表名;
-
- 去除重复记录
SELECT DISTINCT 字段列表FROM 表名;
-
-
DQL-条件查询
-
- 语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
- 语法
-
- 条件
比较运算符 功能 > 大于 >= 大于等于 < 小于 <= 小于等于 = 等于 或!= 不等于 BETWEEN … AND … 在某个范围之内(含最小、最大值) IN(…) 在in之后的列表中的值,多选一 LIKE占位符 模糊匹配(_匹配单个字符,%匹配任意个字符) IS NULL 是NULL 逻辑运算符 功能功能 AND 或&& 并且(多个条件同时成立) OR或Ⅱ 或者(多个条件任意一个成立) NOT或! 非,不是
-
-
DQL-聚合函数
-
- 介绍
- 将一列数据作为一个整体,进行纵向计算。
-
- 常见聚合函数
函数 功能 count 统计数量 max 最大值 min 最小值 avg 平均值 sum 求和 -
- 语法
SELECT 聚合函数(字段列表) FROM 表名;
**注意:null值不参与所有聚合函数运算。**
- DQL-分组查询
-
- 语法
SELECT字段列表 FROM表名[WHERE条件]GROUP BY 分组字段名[HAVING分组后过滤条件];
-
- where与having区别
- 执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
- 判断条件不同: where不能对聚合函数进行判断,而having可以。
- **注意**
- 执行顺序: where >聚合函数> having .
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
-
DQL-排序查询
-
- 语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1排序方式1,字段2排序方式2;
-
- 排序方式
- ASC:升序(默认值)
- DESC:降序
-
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
-
-
DQL-分页查询
-
- 语法
SELECT字段列表 FROM 表名LIMIT 起始索引,查询记录数;
-
注意
- 起始索引从o开始,起始索引=(查询页码-1)*每页显示记录数。
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。
-
-
DQL-语句执行顺序
DCL-介绍
- DCL英文全称是Data ControlLanguage(数据控制语言),用来管理数据库用户、控制数据库的访问权限。
- DCL-管理用户
-
- 查询用户
```
USE mysql;
SELECT * FROM user;
```
-
- 创建用户
CREATE USER ‘用户名'@'主机名’ IDENTIFIED BY‘密码’;
-
- 修改用户密码
ALTER USER ‘'用户名'@'主机名’ IDENTIFIED WlTH mysql_native_password BY ‘新密码’;
-
- 删除用户
DROP USER'用户名'@'主机名';
- **注意:**
* 主机名可以使用%通配。
* 这类SQL开发人员操作的比较少,主要是DBA (Database Administrator数据库管理员)使用。
-
DCL-权限控制
- MySQL中定义了很多种权限,但是常用的就以下几种:
权限 说明 ALL,ALL PRIVILEGES 所有权限 SELECT 查询数据 INSERT 插入数据 UPDATE 修改数据 DELETE 删除数据 ALTER 修改表 DROP 删除数据库/表/视图 CREATE 创建数据库/表 -
DCL-权限控制
-
1.查询权限
SHOW GRANTS FOR‘用户名'@'主机名';
-
2.授予权限
GRANT 权限列表 ON 数据库名.表名 TO ‘'用户名'@'主机名'’;
-
3.撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM ‘用户名'@'主机名'’;
-
注意:
- 多个权限之间,使用逗号分隔
- 授权时,数据库名和表名可以使用*进行通配,代表所有。
-
函数
约束
多表查询
事务
- 事务的四大特性通常被称为ACID特性,具体包括:
- 原子性(Atomicity):事务是一个不可分割的工作单位,事务中的操作要么全部完成,要么全部不完成。在事务执行过程中发生错误,会导致事务中断,已经执行的操作会被回滚,数据库状态与执行事务前 - 保持一致。
- 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。一致性状态指的是数据库在事务执行前后都满足一系列的约束条件。
- 隔离性(Isolation):多个并发事务之间要相互隔离,即一个事务的执行不应影响其他事务的执行。这是为了防止多个事务并发执行时由于交叉执行导致数据的不一致。
- 持久性(Durability):一旦事务提交,其结果就是永久的,即使在系统崩溃后,事务执行的结果依然能够保持。这通常通过持久化手段来实现,如写入磁盘等。