sql 个人文档(基础篇)

mysql中文官方文档

  1. sql不区分大小写,关键字建议使用大写
  2. -- 关键注释

sql分类:

  1. DDL 数据定义语言 (建表相关)
  2. DML 数据操作语言 (对数据进行增删改)
  3. DQL 数据查询语言 (数据查询)
  4. DCL 数据控制语言 (对数据库用户权限控制)

SQL基本数据类型

sqlData1.png

sqlData4.png

sqlData3.png

可选参:
unsigned

double(4 , 1) 4位,小数最多位数:1

SQL分类详

DDL-数据库操作

查询

    show databases();   -- 查询所有数据库
    selecvt databases(); -- 查询当前数据库

创建数据库

create database if not exists [数据库名]

可选字段:

  • default charset utf8mb4 【设置默认字符集为 : utf8mb4】

删除数据库

drop database if exists [数据库名];

使用数据库

use 【数据库名】;

创建表

参考建表语句

create table if not exists tb_user
(
    id   int auto_increment auto_increment primary key comment '编号',
    name varchar(50) comment '姓名',
    age tinyint unsigned comment '年龄',
    gender varchar(1) comment '性别'
);

查询语法

查看所有表 - show tables;

查询表结构 - desc [表名]

查询建表数据 - show create tb_user;

修改表

添加新的字段

alter table [表名] add [字段名] [类型] [约束];

修改原有的字段

alter table [表名] modify [字段名] [类型] [约束];

修改原有字段包括字段名

alter table [表名] change [旧字段名] [新字段名] [类型] [约束];

删除原有的字段

alter table [表名] drop [字段名];

修改表名

alter table [表名] rename to [新表名];

删除表名

drop table if exists [表名];

truncate table [表名];

DDL-数据操作

INSERT

给指定字段添加数据,全部添加不需要指定字段名 , 添加多个数据用逗号隔开即可
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

注意:

  1. 插入时的顺序需要一一对应
  2. 字符串和日期型数据应该包含在引号中
  3. 插入数据的大小应在数据范围内

UPDATE

UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;

  • 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

DELETE

DELETE FROM 表名 [ WHERE 条件 ] ;

DQL-数据查询

基本操作

sqlselect.png

执行顺序:

2 设置别名:

SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;

SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;

3 去除重复数据

SELECT DISTINCT 字段列表 FROM 表名;

常用查询条件

sqlselect2.png

基本执行顺序:

  1. from
  2. where
  3. group by
  4. select
  5. order by
  6. limit

常用的聚合函数

NULL不参与所有聚合函数运算

sqlselect3.png

分组查询

语法 : SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ];

where 跟 having 的区别

  1. 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组后对结果进行过滤。

  2. 判断条件不同:where不能对聚合函数进行判断,而having可以。

  • group by 常与 聚合函数一起使用
  • having可以对查询后的数据进行进一步处理

注意:

  1. 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。执行顺序: where > 聚合函数 > having 。
  2. 支持多字段分组, 具体语法为 : group by columnA,columnB

排序查询

语法 :

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;

排序方式:

  1. DESC 降序
  2. ASC 升序(默认)
  • ASC可以省略

分页查询

  • 分页查询是方言

语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;

注意事项:

  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。

DCL-数据控制

查询用户

use mysql;
select * from user;

创建用户

` CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';`
  • 创建了用户后没有任何权限

修改密码

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;

删除用户

DROP USER '用户名'@'主机名' ;

权限控制

常用的权限;

sqlDCL1.png

  1. 查询权限 SHOW GRANTS FOR '用户名'@'主机名' ;
  2. 授予权限 GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  3. 撤销权限 REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

sqlDCL2.png

函数

字符串函数

常用的函数有:

sqlstr1.png

  • 字符串中的下标从一开始 , 带上的是长度

数值函数

sqlint1.png

日期函数

sqlint1.png

控制函数

sqlController.png

约束

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:保证数据库中数据的正确、有效性和完整性。

常用约束:
sqlpr.png

外键约束

添加外键 :

CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);

或者

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;

删除外键

alter table emp drop foreign key fk_emp_dept_id;

事务

事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系
统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

事务的四大特征(ACID)

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

事务的隔离等级

geli.png

1). 查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

2). 设置事务隔离级别

SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

注意:事务隔离级别越高,数据越安全,但是性能越低。

并发事务问题

bingfashiwu.png
bingfashiwu2.png

文章作者: cosh
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 cosh'blog
Others
喜欢就支持一下吧