前言:SQL语言介绍
SQL 是 Structured Query Language(结构化查询语言)的缩写。 SQL 是用来与关系数据库进行通信的。 它是关系数据库管理系统的标准语言。 SQL 语句用于执行任务,如更新数据库中的数据,或从数据库中检索数据。 一些常见的使用 SQL 的关系数据库管理系统包括 Microsoft SQL Server、MySQL、PostgreSQL、MariaDB 和 Oracle。
SQL语言分类
DDL:数据定义语言
DCL:数据控制语言
DML:数据操作语言
DQL:数据的查询语言
SQL优化思路
超全的数据库建表/SQL/索引规范,适合贴在工位上!-腾讯云开发者社区-腾讯云
一、DDL:数据定义语言
1、DDL 思维导图
2、DDL创建数据库的操作
MySQL--五大约束详解_default约束是 (2)-CSDN博客
--创建数据库,指定字符集、排序规则
CREATE DATABASE mydatabase
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
--查询数据库相关信息
查看当前MySQL8服务器的默认字符集是utf8mb4
SHOW VARIABLES LIKE 'character_set_server';
-- 查看指定数据库的字符集
SELECT DEFAULT_CHARACTER_SET_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'mydatabase';
-- 修改数据库的字符集
ALTER DATABASE mydatabase CHARSET utf8mb4;
-- drop 库 (默认不操作)
drop database mydatabase;
生产禁用用户drop database 的命令
mysql -u root -p
REVOKE DROP ON *.* FROM 'myuser'@'localhost';
REVOKE DROP ON *.* FROM 'myuser'@'%';
这条命令会从myuser
用户的localhost
连接权限中撤销对所有数据库的DROP
权限。
如果你想要为所有用户撤销这个权限,可以使用%
通配符代替localhost
:
完成上述操作后,用户myuser
将不能使用DROP DATABASE
语句。其他用户可能仍然有权限执行DROP DATABASE
,因此可能需要对所有相关用户进行类似的操作。
-- 查看表的字符集
SELECT CCSA.character_set_name
FROM information_schema.`TABLES` T,
information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
AND T.table_schema = 'your_database_name'
AND T.table_name = 'your_table_name';
-- 查看列的字符集
SELECT character_set_name
FROM information_schema.`COLUMNS`
WHERE table_schema = 'your_database_name'
AND table_name = 'your_table_name'
AND column_name = 'your_column_name';
3、MySQL8 数据库的字符类型
数据类型
字符类型
时间类型
二进制类型
4、MySQL8 --表的操作
--使用指定的数据库
use school
--查看数据库中的表
show tables;
--查看表结构
desc stu;
--查建表语句
show create table stu;
--复制表,一般用户备份
CREATE TABLE ceshi LIKE stu;
-- 复制表结构
CREATE TABLE ceshi LIKE stu where ‘1’=‘0’;
示例:创建学生表
USE testdb;
CREATE TABLE stu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(255) NOT NULL COMMENT '姓名',
sage TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
sgender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别' ,
sfz CHAR(18) NOT NULL UNIQUE COMMENT '身份证',
intime TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间'
) ENGINE=INNODB CHARSET=utf8 COMMENT '学生表';
删除表
drop table stu;
表中增加列的操作
DESC stu;
-- stu表中增加手机号
ALTER TABLE stu ADD 手机号 VARCHAR(20) NOT NULL UNIQUE COMMENT '手机号';
ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname ;
ALTER TABLE stu ADD num INT NOT NULL COMMENT '数字' FIRST;
删除增加的列
ALTER TABLE stu DROP 手机号;
ALTER TABLE stu DROP wechat ;
ALTER TABLE stu DROP num ;
修改数据列的属性,不建议更改varchar字段变小(短)
ALTER TABLE stu MODIFY sname VARCHAR(128) NOT NULL ;
ALTER TABLE stu CHANGE sgender sg CHAR(1) NOT NULL DEFAULT 'n' ;
DESC stu;
5、onlieDDL 解析
在MySQL5.6版本之后,对于部分alter table,加入新的执行算法,可以进行DDL时,“并行”现有业务(DML操作)。
可以通过aLter table 时添加 ALGORITHM参数控制使用算法。#例如这种写法
alter table t1 add a int ALGORITHM=?;
COPY —— 5.6之前默认适应这种方法,全程无法并行DML
INPLACE —— MySQL 5.6出现的,在开始和提交的短租时间里,不能并行DML(千万级以上表加列需要15分钟以上)
INSTANT —— MySQL 8.0.12出现的,唯一会阻塞只读的时机是在清理旧表结构和表定义缓存时。(更改表结构,速度较快)
https://www.cnblogs.com/dtxdm/p/15828624.html
二、DCL数据控制语言,主要应用于授权和权限回收
1、DCL 思维导图
2、常用命令
ALTER USER
CREATE ROLE
CREATE USER
DROP ROLE
DROP USER
GRANT
RENAME USER
REVOKE
SET DEFAULT ROLE
SET PASSWORD
SET ROLE
SQL语言种类DCL、DDL、DML、TCL-SQL语言开发看这一篇就够了_sql语言分类 dcl tcl-CSDN博客
SQL语言——DCL_sql的数据控制语言dcl指令-CSDN博客
打卡--MySQL8.0 二 (用户权限管理)-CSDN博客
3、MySQL8 新特性,指定SQL执行资源组
功能--给执行长SQL指定更多的CPU
三、DML语句应用
1、DML语句作用:对表中的数据行进行增、删、改
DML示例:在stu表中插入数据
-- 最标准的insert语句
INSERT INTO stu(id,sname,sage,sg,sfz,intime)
VALUES
(1,'zs',18,'m','123456',NOW());
SELECT * FROM stu;
--同时录入多行数据
INSERT INTO stu(sname,sfz)
VALUES
('w55','3444578d8'),
('m6','1212313'),
('aa','123213123123');
SELECT * FROM stu;
修改stu表的数据
DESC stu;
SELECT * FROM stu;
UPDATE stu SET sname='zhao4' WHERE id=2;
注意:update语句必须要加where。
禁止无条件update
mysql> show variables like '%update%';
mysql> set global sql_safe_updates=1;
mysql> exit
delete(危险!!)stu表中的数据,删除前先备份,通常使用状态0禁用,1开启
DELETE FROM stu WHERE id=3;
全部删除 delete VS truncate
## 面试题 : 1亿数据,drop table truncate table delete from table 有什么区别?
快慢?
### 速度: delete < drop table < truncate
### delete 是逐行打标记
### drop : 表定义删除, 删除ibd(操作系统rm)
### trucate : 保留表定义,清空表空间,禁用,无法恢复。
## 伪删除(状态列的使用is_deleted)
### 使用update进行替代delete
四、DQL查询语句(select )
1、DQL查询语句思维导图
2、查看MySQL系统参数/环境变量
-- select @@xxx 查看系统参数
SELECT @@port;
SELECT @@basedir;
SELECT @@datadir;
SELECT @@socket;
SELECT @@server_id;
变量示例:
MySQL必知必会——命令总结(mysql的相关命令) | 半码博客
Mysql最常用时间格式转化_mysql时间格式转化-CSDN博客
MySQL8.0 小白入门 46条sql语句练习(学生表 教师表 课程表 分数表)_mysql入门练习表-CSDN博客
https://blog.51cto.com/u_16077267/9219683?articleABtest=0
Mysql压力测试(sysbench)_sysbench mysql-CSDN博客
作为DBA,你不得不掌握的压测工具-腾讯云开发者社区-腾讯云
MySQL 工具集:官方性能测试工具 mysqlslap-腾讯云开发者社区-腾讯云
MySQL limit 使用说明
select * from testdb.student limit 3 (展示1~3的数据)
select * from testdb.student limit 3,2 (展示不包含本行数据)
select * from testdb.student limit 3 offset 2 (展示包含本行)
五、MySQL 函数
六、SQL 流程控制
MySQL——流程控制函数_mysql流程控制函数-CSDN博客
七、MySQL 变量
session 级别更改参数设置,退出回话后失效。
global 级别更改参数设置,数据库重启后生效
mysql variables_mysql关于variable的总结-CSDN博客
MySql中variables系统变量详解_mysql variables-CSDN博客
MySQL 8.0支持在线更改参数
mysql: 为什么我设置read_only后用户还是可以读写_为什么数据库开启了read_only=1,还是可以写操作呢-CSDN博客