关注微信公众号(首席摸鱼师)免费查看全部文章
前言:
本次文章的目的,是为了将MySQL常用语法规范进行记载留存,以便后期方便使用、MySQL大家都知道,几乎每一个开发每天都在和他打交道,我们口中常说的CRUD其实就是对它而言的,增加(Create)、读取(Read)、更新(Update)和删除(Delete),每一个SpringBoot项目,Mybatis或JPA都在和它交互,以及业务上的一些设计,建表修改,索引查询,等等。

MySQL介绍:
MySQL是一个关系型数据库管理系统,它使用SQL语句开进行操作控制,SQL语句分为如下几种:
-
数据定义语言 (DDL):用于定义或修改数据库架构的命令,例如创建、修改和删除数据库结构,如表、视图、索引等。DDL 命令不直接操作数据,而是操作数据库的结构本身。
主要包括(CREATE、ALTER、DROP、TRUNCATE) -
数据操纵语言 (DML):用来操作数据库中的数据,例如新增,更新,删除,查询数据。
主要包括(INSERT、UPDATE、DELETE、SELECT) -
数据查询语言 (DQL):用于从数据库中检索数据,例如查询不同条件下的数据或者连接多个表中查询数据。
主要包括(SELECT) -
数据控制语言 (DCL):用于管理数据库访问权限。通过DCL语句,可以授予或撤销用户对数据库对象(如表、视图等)的操作权限。
主要包括(GRANT、REVOKE)
使用讲解:
1、 数据定义语言 (DDL):
1.1、CREATE:
1.1.1、 创建数据库 (CREATE DATABASE)
语法:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARACTER SET 字符集];
比如:
CREATE DATABASE testdb:
1.1.2、 创建表 (CREATE TABLE)
语法:
CREATE TABLE [IF NOT EXISTS] 表名 (
列名1 数据类型 [约束条件],
列名2 数据类型 [约束条件],
...
[表级约束]
) [ENGINE=存储引擎] [CHARSET=字符集];
比如:
CREATE TABLE employees (
id INT ( 5 ) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
name VARCHAR ( 50 ) NOT NULL COMMENT '姓名 不能为空',
age INT ( 3 ) NULL DEFAULT NULL COMMENT '年龄 可以为空',
department VARCHAR ( 50 ) NULL DEFAULT NULL COMMENT '部门 可以为空',
created_time datetime NULL DEFAULT NULL COMMENT '创建时间 可以为空'
);
1.1.3、 创建索引 (CREATE INDEX)
普通索引语法:
CREATE INDEX idx_name ON 表名(列名);
比如:
CREATE INDEX idx_name ON employees(name);
唯一索引语法:
CREATE UNIQUE INDEX idx_name ON 表名(列名);
比如:
CREATE UNIQUE INDEX idx_department ON employees(department);
联合索引语法(适用唯一索引):
CREATE INDEX idx_name ON 表名(列名, 列名);
比如:
CREATE INDEX idx_name_age ON employees(name,age);
1.1.4、 复制表,仅保留结构 (CREATE TABLE)
语法:
CREATE TABLE 新表名 LIKE 旧表名;
比如:
CREATE TABLE new_employees LIKE employees;
1.1.5、 通过查询结果建表 (CREATE TABLE AS)
语法:
CREATE TABLE 新表名 AS
SELECT * FROM 旧表名 [WHERE 条件]
[GROUP BY 分组列]
[HAVING 分组条件];
比如:
CREATE TABLE new_employees AS
SELECT * FROM employees;
1.1.6、 创建视图 (CREATE VIEW)
语法:
CREATE VIEW 视图名称 [(列别名1, 列别名2, ...)]
AS
SELECT 列1, 列2, ...
FROM 表名
[WHERE 条件]
[GROUP BY 分组列]
[HAVING 分组条件];
比如:
CREATE VIEW employee_public AS
SELECT name, department FROM employees:
1.2. ALTER:
1.2.1、 添加列
语法:
ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束条件];
比如:
ALTER TABLE employees ADD COLUMN remark VARCHAR ( 50 ) NULL DEFAULT NULL COMMENT '备注 可以为空';
1.2.2、 删除列
语法:
ALTER TABLE 表名 DROP COLUMN 列名;
比如:
ALTER TABLE employees DROP COLUMN remark;
1.2.3、 修改列类型
语法:
ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型 [约束条件];
比如:
ALTER TABLE employees MODIFY COLUMN remark VARCHAR ( 100 ) NULL DEFAULT NULL COMMENT '备注 可以为空';
1.2.4、 重命名列
语法:
ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 数据类型 [约束条件];
比如:
ALTER TABLE employees CHANGE COLUMN remark new_remark VARCHAR ( 100 ) NULL DEFAULT NULL COMMENT '备注 可以为空';
1.2.5、 添加索引
普通索引语法:
ALTER TABLE 表名 ADD INDEX 索引名(列名);
比如:
ALTER TABLE employees ADD INDEX idx_age(age);
唯一索引语法:
ALTER TABLE 表名 ADD UNIQUE 索引名(列名);
比如:
ALTER TABLE employees ADD UNIQUE uk_department(department);
联合索引语法(唯一索引适用):
ALTER TABLE 表名 ADD INDEX 索引名(列名,列名);
比如:
ALTER TABLE employees ADD INDEX idx_age(age,name);
1.3、DROP
1.3.1、删除表
语法:
DROP TABLE [IF EXISTS] 表名;
比如:
DROP TABLE new_employees;
1.3.2、删除数据库
语法:
DROP DATABASE [IF EXISTS] 数据库名;
比如:
DROP DATABASE test;
1.3.3、删除索引
语法:
DROP INDEX [IF EXISTS] 索引名ON 表名;
比如:
DROP INDEX idx_age ON employees;
1.3.4、删除视图
语法:
DROP VIEW [IF EXISTS] 视图名;
比如;
DROP VIEW employee_public;
1.4、TRUNCATE
清空表中数据语法:
TRUNCATE [TABLE] 表名;
比如:
TRUNCATE TABLE employees;
2、 数据操纵语言 (DML)
2.1、INSERT
2.1.1、单行插入
语法:
INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);
比如:
INSERT INTO employees (id, name) VALUES (2, 'test');
2.1.2、多行插入
语法:
INSERT INTO 表名 (字段1, 字段2)
VALUES
(值1, 值2),
(值3, 值4),
(值5, 值6);
比如:
INSERT INTO employees (age, name)
VALUES
(11, 'test'),
(12, 'test'),
(13, 'test');
2.1.3、从查询结果插入
语法:
INSERT INTO 目标表 (字段1, 字段2)
SELECT 字段A, 字段B FROM 源表 [WHERE 条件];
比如:
INSERT INTO employees (age, name)
SELECT age, name FROM employees_copy;
2.2、UPDATE
字段值更新语法:
UPDATE 表名
SET 字段1=值1, 字段2=值2
[WHERE 条件] [ORDER BY 字段]
[LIMIT 行数];
比如:
UPDATE employees
SET age=28, name='test001'
WHERE id = 1;
2.3、DELETE
删除表数据语法:
DELETE FROM 表名
[WHERE 条件] [ORDER BY 字段]
[LIMIT 行数];
比如:
DELETE FROM employees
WHERE id = 1;
2.4、SELECT
2.4.1、单表查询
语法:
SELECT [DISTINCT] 列名1, 列名2
FROM 表名
[WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件]
[ORDER BY 排序字段]
[LIMIT 偏移量,行数];
比如:
SELECT age,name
FROM employees
WHERE name = 'test' LIMIT 10;
2.4.2、多表联查
内连接语法:
SELECT [DISTINCT] 别名1.列名1, 别名2.列名2
FROM 表1 别名1 INNER JOIN 表2 别名2 ON 别名1.列名1=别名2.列名1 [WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件]
[ORDER BY 排序字段]
[LIMIT 偏移量,行数];
比如:
SELECT e.id,e.name,ec.id,ec.name
FROM employees e INNER JOIN employees_copy ec ON e.id=ec.id;
左连接语法:
SELECT [DISTINCT] 别名1.列名1, 别名2.列名2
FROM 表1 别名1 LEFT JOIN 表2 别名2 ON 别名1.列名1=别名2.列名1 [WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件]
[ORDER BY 排序字段]
[LIMIT 偏移量,行数];
比如:
SELECT e.id,e.name,ec.id,ec.name
FROM employees e LEFT JOIN employees_copy ec ON e.id=ec.id;
右连接语法:
SELECT [DISTINCT] 别名1.列名1, 别名2.列名2
FROM 表1 别名1 RIGHT JOIN 表2 别名2 ON 别名1.列名1=别名2.列名1 [WHERE 条件]
[GROUP BY 分组字段]
[HAVING 分组条件]
[ORDER BY 排序字段]
[LIMIT 偏移量,行数];
比如:
SELECT e.id,e.name,ec.id,ec.name
FROM employees e RIGHT JOIN employees_copy ec ON e.id=ec.id;
3、 数据控制语言 (DCL)
3.1、GRANT
授权语法:
GRANT 权限类型 ON 数据库对象 TO 用户标识
[IDENTIFIED BY '密码']
[WITH GRANT OPTION];
比如:
-- 授予test用户对mydb数据库的查询权限
GRANT SELECT ON mydb.* TO 'test'@'localhost'
3.2、REVOKE
撤销语法:
REVOKE 权限类型 ON 数据库对象 FROM 用户标识;
比如:
REVOKE SELECT ON testdb.employees FROM 'root'@'localhost';
到此,大部分的MySQL使用语法已经讲解完成,当然这些仅供参考使用,并非所有的MySQL功能,其中还有非常多的函数加以使用,感兴趣的同学们在工作中可以自行摸索,文中大部分只是举例了简单示例,以便后续使用研究!
本次教程到这里就结束了,希望大家多多关注支持(首席摸鱼师 微信同号),持续跟踪最新文章吧~
3926

被折叠的 条评论
为什么被折叠?



