当前位置: 首页 > news >正文

MySQL所有关键字详细含义说明

文章目录

  • MySQL所有关键字详细含义说明`
    • 一、MySQL关键字概述
    • 二、数据库操作关键字
      • 1. CREATE DATABASE - 创建数据库
      • 2. DROP DATABASE - 删除数据库
      • 3. USE - 选择数据库
      • 4. SHOW DATABASES - 查看所有数据库
    • 三、表操作关键字
      • 1. CREATE TABLE - 创建表
      • 2. DROP TABLE - 删除表
      • 3. ALTER TABLE - 修改表结构
      • 4. TRUNCATE TABLE - 清空表
      • 5. SHOW TABLES - 查看所有表
      • 6. DESCRIBE / DESC - 查看表结构
    • 四、数据查询关键字 (SELECT语句)
      • 1. SELECT - 选择数据
      • 2. FROM - 指定数据来源
      • 3. WHERE - 过滤数据
      • 4. ORDER BY - 排序数据
      • 5. LIMIT - 限制结果数量
      • 6. DISTINCT - 去重
      • 7. AS - 列别名/表别名
      • 8. GROUP BY - 分组查询
      • 9. HAVING - 分组后过滤
      • 10. WITH - 公共表表达式(CTE)
    • 五、数据操作关键字 (DML)
      • 1. INSERT - 插入数据
      • 2. UPDATE - 更新数据
      • 3. DELETE - 删除数据
      • 4. REPLACE - 替换数据
      • 5. LOAD DATA INFILE - 批量导入数据
    • 六、表连接关键字 (JOIN)
      • 1. INNER JOIN - 内连接
      • 2. LEFT JOIN / LEFT OUTER JOIN - 左连接
      • 3. RIGHT JOIN / RIGHT OUTER JOIN - 右连接
      • 4. CROSS JOIN - 交叉连接
      • 5. UNION / UNION ALL - 合并结果集
    • 七、子查询关键字
      • 1. IN / NOT IN - 在/不在指定集合内
      • 2. EXISTS / NOT EXISTS - 存在/不存在
      • 3. ANY / SOME / ALL - 比较子查询结果
    • 八、索引关键字
      • 1. CREATE INDEX - 创建索引
      • 2. DROP INDEX - 删除索引
      • 3. ALTER TABLE ... ADD INDEX - 添加索引
      • 4. SHOW INDEX - 查看索引
    • 九、视图关键字
      • 1. CREATE VIEW - 创建视图
      • 2. DROP VIEW - 删除视图
      • 3. ALTER VIEW - 修改视图
    • 十、存储过程与函数关键字
      • 1. CREATE PROCEDURE - 创建存储过程
      • 2. CREATE FUNCTION - 创建存储函数
      • 3. CALL - 调用存储过程
      • 4. DROP PROCEDURE / DROP FUNCTION - 删除存储过程/函数
    • 十一、触发器关键字
      • 1. CREATE TRIGGER - 创建触发器
      • 2. DROP TRIGGER - 删除触发器
    • 十二、事务控制关键字
      • 1. START TRANSACTION / BEGIN - 开始事务
      • 2. COMMIT - 提交事务
      • 3. ROLLBACK - 回滚事务
      • 4. SAVEPOINT - 设置保存点
      • 5. RELEASE SAVEPOINT - 释放保存点
    • 十三、MySQL特有关键字
      • 1. AUTO_INCREMENT - 自动增长
      • 2. LIMIT - 限制结果集
      • 3. ON DUPLICATE KEY UPDATE - 重复键更新
      • 4. INSERT IGNORE - 忽略重复插入
      • 5. VALUES - 访问新插入的值
      • 6. DELIMITER - 定义分隔符
      • 7. ENGINE - 指定存储引擎
      • 8. CHARSET / CHARACTER SET - 指定字符集
    • 十四、MySQL关键字使用注意事项
    • 十五、MySQL关键字速查表
      • 数据定义语言(DDL)
      • 数据操作语言(DML)
      • 数据控制语言(DCL)
      • 事务控制
      • MySQL特有关键字

MySQL所有关键字详细含义说明`

一、MySQL关键字概述

MySQL关键字是MySQL数据库系统中具有特殊意义的保留字,用于执行特定的数据库操作或定义数据库对象。这些关键字不能用作表名、列名或其他数据库对象的名称,除非使用反引号(`)括起来。

本教程将全面介绍MySQL中常用的关键字,按照功能分类,并提供每个关键字的详细含义、语法和示例,帮助初学者系统学习MySQL。

二、数据库操作关键字

1. CREATE DATABASE - 创建数据库

含义:创建一个新的数据库。

语法

CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARACTER SET 字符集名称] [COLLATE 排序规则];

参数说明

  • IF NOT EXISTS:可选,如果数据库已存在则不报错
  • CHARACTER SET:可选,指定数据库的字符集
  • COLLATE:可选,指定数据库的排序规则

示例

-- 创建名为company的数据库
CREATE DATABASE company;-- 创建时检查是否存在,避免重复创建报错
CREATE DATABASE IF NOT EXISTS company;-- 创建指定字符集和排序规则的数据库
CREATE DATABASE company CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2. DROP DATABASE - 删除数据库

含义:删除一个已存在的数据库(谨慎使用!)。

语法

DROP DATABASE [IF EXISTS] 数据库名;

参数说明

  • IF EXISTS:可选,如果数据库不存在则不报错

示例

-- 删除test_db数据库
DROP DATABASE test_db;-- 删除时检查是否存在,避免不存在时报错
DROP DATABASE IF EXISTS test_db;

3. USE - 选择数据库

含义:指定当前会话使用的数据库。

语法

USE 数据库名;

示例

-- 选择company数据库作为当前操作的数据库
USE company;

4. SHOW DATABASES - 查看所有数据库

含义:显示服务器上所有可用的数据库。

语法

SHOW DATABASES [LIKE '模式'];

示例

-- 列出所有数据库
SHOW DATABASES;-- 只列出以'test'开头的数据库
SHOW DATABASES LIKE 'test%';

三、表操作关键字

1. CREATE TABLE - 创建表

含义:在当前数据库中创建一个新表。

语法

CREATE TABLE [IF NOT EXISTS] 表名 (列名1 数据类型 [约束],列名2 数据类型 [约束],...[表级约束]
) [表选项];

常用约束

  • PRIMARY KEY:主键,唯一标识表中的记录
  • NOT NULL:列值不能为空
  • AUTO_INCREMENT:数值自动增长(MySQL特有)
  • UNIQUE:列值必须唯一
  • DEFAULT:设置默认值
  • FOREIGN KEY:外键,建立表之间的关系

示例

-- 创建员工表
CREATE TABLE employees (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT CHECK (age > 18),department_id INT,hire_date DATE DEFAULT CURRENT_DATE,FOREIGN KEY (department_id) REFERENCES departments(id)
);

2. DROP TABLE - 删除表

含义:删除数据库中的一个或多个表(谨慎使用!)。

语法

DROP TABLE [IF EXISTS] 表名1 [, 表名2, ...];

示例

-- 删除temp表
DROP TABLE temp;-- 删除多个表
DROP TABLE IF EXISTS temp1, temp2;

3. ALTER TABLE - 修改表结构

含义:修改已存在表的结构,如添加、修改或删除列、索引、约束等。

语法

-- 添加列
ALTER TABLE 表名 ADD [COLUMN] 列名 数据类型 [约束];-- 修改列类型
ALTER TABLE 表名 MODIFY [COLUMN] 列名 新数据类型 [约束];-- 修改列名和类型(MySQL特有语法)
ALTER TABLE 表名 CHANGE [COLUMN] 旧列名 新列名 数据类型 [约束];-- 删除列
ALTER TABLE 表名 DROP [COLUMN] 列名;-- 添加主键
ALTER TABLE 表名 ADD PRIMARY KEY (列名);-- 删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;

示例

-- 向employees表添加email列
ALTER TABLE employees ADD COLUMN email VARCHAR(100) UNIQUE;-- 修改email列的长度
ALTER TABLE employees MODIFY COLUMN email VARCHAR(255);-- 将email列改名为work_email
ALTER TABLE employees CHANGE COLUMN email work_email VARCHAR(255);

4. TRUNCATE TABLE - 清空表

含义:删除表中所有数据,但保留表结构(速度比DELETE快)。

语法

TRUNCATE TABLE 表名;

示例

-- 清空employees表中的所有数据
TRUNCATE TABLE employees;

5. SHOW TABLES - 查看所有表

含义:显示当前数据库中的所有表。

语法

SHOW TABLES [LIKE '模式'];

示例

-- 列出当前数据库中的所有表
SHOW TABLES;-- 只列出以'user'开头的表
SHOW TABLES LIKE 'user%';

6. DESCRIBE / DESC - 查看表结构

含义:显示表的结构,包括列名、数据类型、是否可为空、默认值等信息。

语法

DESCRIBE 表名;
-- 或简写为
DESC 表名;

示例

-- 查看employees表的结构
DESC employees;

四、数据查询关键字 (SELECT语句)

1. SELECT - 选择数据

含义:从一个或多个表中选取数据。

语法

SELECT 列名1, 列名2, ... FROM 表名 [WHERE 条件] [其他子句];-- 选择所有列
SELECT * FROM 表名;

示例

-- 选择employees表中的name和age列
SELECT name, age FROM employees;-- 选择所有列
SELECT * FROM employees;

2. FROM - 指定数据来源

含义:指定要查询数据的表。

语法

SELECT 列名 FROM 表名;

示例

-- 从employees表中查询数据
SELECT name FROM employees;

3. WHERE - 过滤数据

含义:根据指定条件过滤查询结果,只返回满足条件的行。

语法

SELECT 列名 FROM 表名 WHERE 条件;

常用运算符

  • 比较运算符:=, <>, !=, <, >, <=, >=
  • 逻辑运算符:AND, OR, NOT
  • 范围运算符:BETWEEN ... AND ..., IN()
  • 模糊匹配:LIKE, RLIKE/REGEXP
  • NULL值判断:IS NULL, IS NOT NULL

示例

-- 查询年龄大于30的员工
SELECT * FROM employees WHERE age > 30;-- 查询部门ID为1且年龄大于25的员工
SELECT * FROM employees WHERE department_id = 1 AND age > 25;-- 查询名字以'张'开头的员工(MySQL中LIKE默认不区分大小写)
SELECT * FROM employees WHERE name LIKE '张%';

4. ORDER BY - 排序数据

含义:对查询结果按照一个或多个列进行排序。

语法

SELECT 列名 FROM 表名 ORDER BY 列名1 [ASC|DESC], 列名2 [ASC|DESC], ...;

参数说明

  • ASC:升序(默认)
  • DESC:降序

示例

-- 按年龄升序排序
SELECT * FROM employees ORDER BY age ASC;-- 先按部门ID升序,再按年龄降序
SELECT * FROM employees ORDER BY department_id ASC, age DESC;

5. LIMIT - 限制结果数量

含义:限制查询结果返回的行数(MySQL特有语法)。

语法

SELECT 列名 FROM 表名 LIMIT [偏移量,] 行数;

示例

-- 返回前10行
SELECT * FROM employees LIMIT 10;-- 返回从第11行开始的20行(偏移量从0开始)
SELECT * FROM employees LIMIT 10, 20;-- MySQL 8.0+ 支持的语法
SELECT * FROM employees LIMIT 20 OFFSET 10;

6. DISTINCT - 去重

含义:去除查询结果中的重复行。

语法

SELECT DISTINCT 列名 FROM 表名;

示例

-- 查询所有不重复的部门ID
SELECT DISTINCT department_id FROM employees;

7. AS - 列别名/表别名

含义:为列名或表名指定别名,使查询结果更易读。

语法

-- 列别名
SELECT 列名 AS 别名 FROM 表名;-- 表别名
SELECT 别名.列名 FROM 表名 AS 别名;

示例

-- 将name列显示为"姓名"
SELECT name AS 姓名, age AS 年龄 FROM employees;-- 使用表别名简化查询
SELECT e.name, d.department_name 
FROM employees AS e 
JOIN departments AS d ON e.department_id = d.id;

8. GROUP BY - 分组查询

含义:根据一个或多个列对结果集进行分组。

语法

SELECT 列名, 聚合函数(列名) FROM 表名 GROUP BY 列名1 [, 列名2, ...];

示例

-- 按部门分组,统计每个部门的员工人数
SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id;

9. HAVING - 分组后过滤

含义:过滤分组后的结果,通常与GROUP BY一起使用。

语法

SELECT 列名, 聚合函数(列名) FROM 表名 GROUP BY 列名 HAVING 条件;

示例

-- 只显示员工人数大于10的部门
SELECT department_id, COUNT(*) AS employee_count 
FROM employees 
GROUP BY department_id 
HAVING COUNT(*) > 10;

10. WITH - 公共表表达式(CTE)

含义:定义一个临时命名的结果集,可用作查询的一部分(MySQL 8.0+支持)。

语法

WITH 临时表名 AS (SELECT 列名 FROM 表名 WHERE 条件
)
SELECT 列名 FROM 临时表名;

示例

-- 使用CTE查询部门员工人数超过10的部门信息
WITH large_departments AS (SELECT department_id, COUNT(*) AS emp_count FROM employees GROUP BY department_id HAVING COUNT(*) > 10
)
SELECT d.id, d.department_name, ld.emp_count 
FROM departments d 
JOIN large_departments ld ON d.id = ld.department_id;

五、数据操作关键字 (DML)

1. INSERT - 插入数据

含义:向表中插入新数据。

语法

-- 插入单行数据
INSERT INTO 表名 [(列名1, 列名2, ...)] VALUES (1,2, ...);-- 插入多行数据
INSERT INTO 表名 [(列名1, 列名2, ...)] VALUES
(1,2, ...),
(1,2, ...),
...;-- 从查询结果插入数据
INSERT INTO 表名 (列名1, 列名2, ...) SELECT 列名1, 列名2, ... FROM 源表名;

示例

-- 插入一条员工记录
INSERT INTO employees (name, age, department_id) VALUES ('张三', 28, 1);-- 插入多条员工记录
INSERT INTO employees (name, age, department_id) VALUES
('李四', 32, 2),
('王五', 45, 1);-- 从另一个表插入数据
INSERT INTO employees_backup (name, age, department_id) SELECT name, age, department_id FROM employees;

2. UPDATE - 更新数据

含义:修改表中已存在的数据。

语法

UPDATE 表名 SET 列名1=1 [, 列名2=2, ...] [WHERE 条件];

示例

-- 更新ID为1的员工年龄
UPDATE employees SET age = 30 WHERE id = 1;-- 同时更新多个字段
UPDATE employees SET age = 30, department_id = 3 WHERE id = 1;-- 更新所有30岁以上员工的部门(谨慎使用)
UPDATE employees SET department_id = 4 WHERE age > 30;

3. DELETE - 删除数据

含义:删除表中的数据。

语法

DELETE FROM 表名 [WHERE 条件];

示例

-- 删除ID为1的员工记录
DELETE FROM employees WHERE id = 1;-- 删除部门ID为5的所有员工
DELETE FROM employees WHERE department_id = 5;-- 删除表中所有数据(谨慎使用)
DELETE FROM employees;

4. REPLACE - 替换数据

含义:插入数据,如果发生主键或唯一索引冲突,则先删除旧数据,再插入新数据(MySQL特有)。

语法

REPLACE INTO 表名 [(列名1, 列名2, ...)] VALUES (1,2, ...);

示例

-- 替换ID为1的员工记录
REPLACE INTO employees (id, name, age) VALUES (1, '张三', 31);

5. LOAD DATA INFILE - 批量导入数据

含义:从文本文件中批量导入数据到表中(MySQL特有)。

语法

LOAD DATA [LOCAL] INFILE '文件路径' 
INTO TABLE 表名 
[FIELDS TERMINATED BY '分隔符'] 
[LINES TERMINATED BY '行分隔符'] 
[IGNORE 行数 LINES];

示例

-- 从employees.txt文件导入数据
LOAD DATA INFILE '/tmp/employees.txt' 
INTO TABLE employees 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES;

六、表连接关键字 (JOIN)

1. INNER JOIN - 内连接

含义:返回两个表中匹配的行(默认连接类型)。

语法

SELECT 列名 FROM1 INNER JOIN2 ON1.=2.;

示例

-- 查询员工及其所在部门信息
SELECT e.name, e.age, d.department_name 
FROM employees e 
INNER JOIN departments d ON e.department_id = d.id;

2. LEFT JOIN / LEFT OUTER JOIN - 左连接

含义:返回左表中的所有行,以及右表中匹配的行(右表没有匹配则显示NULL)。

语法

SELECT 列名 FROM1 LEFT [OUTER] JOIN2 ON1.=2.;

示例

-- 查询所有员工及其部门信息,没有部门的员工也会显示
SELECT e.name, e.age, d.department_name 
FROM employees e 
LEFT JOIN departments d ON e.department_id = d.id;

3. RIGHT JOIN / RIGHT OUTER JOIN - 右连接

含义:返回右表中的所有行,以及左表中匹配的行(左表没有匹配则显示NULL)。

语法

SELECT 列名 FROM1 RIGHT [OUTER] JOIN2 ON1.=2.;

示例

-- 查询所有部门及其员工信息,没有员工的部门也会显示
SELECT e.name, e.age, d.department_name 
FROM employees e 
RIGHT JOIN departments d ON e.department_id = d.id;

4. CROSS JOIN - 交叉连接

含义:返回两个表的笛卡尔积(所有可能的组合)。

语法

SELECT 列名 FROM1 CROSS JOIN2;

示例

-- 返回员工表和部门表的笛卡尔积
SELECT e.name, d.department_name 
FROM employees e 
CROSS JOIN departments d;

5. UNION / UNION ALL - 合并结果集

含义:合并两个或多个SELECT语句的结果集。

语法

SELECT 列名 FROM1
UNION [ALL]
SELECT 列名 FROM2;

参数说明

  • UNION:合并结果并去重
  • UNION ALL:合并结果但不去重

示例

-- 查询部门1和部门2的员工,合并结果并去重
SELECT name, age FROM employees WHERE department_id = 1
UNION
SELECT name, age FROM employees WHERE department_id = 2;

七、子查询关键字

1. IN / NOT IN - 在/不在指定集合内

含义:判断列值是否在指定的集合中。

语法

SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (1,2, ...);-- 或与子查询结合
SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (SELECT 列名 FROM 表名 WHERE 条件);

示例

-- 查询部门ID为1、2、3的员工
SELECT * FROM employees WHERE department_id IN (1, 2, 3);-- 查询不在研发部的员工
SELECT * FROM employees WHERE department_id NOT IN (SELECT id FROM departments WHERE department_name = '研发部');

2. EXISTS / NOT EXISTS - 存在/不存在

含义:判断子查询是否返回任何行。

语法

SELECT 列名 FROM 表名 WHERE [NOT] EXISTS (SELECT 列名 FROM 表名 WHERE 条件);

示例

-- 查询有员工的部门
SELECT * FROM departments d WHERE EXISTS (SELECT 1 FROM employees e WHERE e.department_id = d.id);-- 查询没有员工的部门
SELECT * FROM departments d WHERE NOT EXISTS (SELECT 1 FROM employees e WHERE e.department_id = d.id);

3. ANY / SOME / ALL - 比较子查询结果

含义:将列值与子查询返回的一组值进行比较。

语法

SELECT 列名 FROM 表名 WHERE 列名 运算符 ANY|SOME|ALL (子查询);

示例

-- 查询年龄大于任何一个研发部员工的员工
SELECT * FROM employees WHERE age > ANY (SELECT age FROM employees WHERE department_id = 1);-- 查询年龄大于所有研发部员工的员工
SELECT * FROM employees WHERE age > ALL (SELECT age FROM employees WHERE department_id = 1);

八、索引关键字

1. CREATE INDEX - 创建索引

含义:为表创建索引以提高查询性能。

语法

CREATE [UNIQUE] [FULLTEXT] [SPATIAL] INDEX 索引名 
ON 表名 (列名1 [长度], 列名2 [长度], ...);

参数说明

  • UNIQUE:唯一索引,确保索引列的值唯一
  • FULLTEXT:全文索引,用于全文搜索
  • SPATIAL:空间索引,用于地理空间数据

示例

-- 在name列上创建普通索引
CREATE INDEX idx_name ON employees(name);-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON employees(email);-- 创建复合索引
CREATE INDEX idx_dept_age ON employees(department_id, age);-- 创建全文索引
CREATE FULLTEXT INDEX idx_description ON products(description);

2. DROP INDEX - 删除索引

含义:删除表中的索引。

语法

DROP INDEX 索引名 ON 表名;

示例

-- 删除idx_name索引
DROP INDEX idx_name ON employees;

3. ALTER TABLE … ADD INDEX - 添加索引

含义:通过ALTER TABLE语句添加索引。

语法

ALTER TABLE 表名 ADD [UNIQUE] [FULLTEXT] [SPATIAL] INDEX 索引名 (列名1, 列名2, ...);

示例

-- 为employees表的age列添加索引
ALTER TABLE employees ADD INDEX idx_age (age);

4. SHOW INDEX - 查看索引

含义:显示表的所有索引信息。

语法

SHOW INDEX FROM 表名;

示例

-- 查看employees表的所有索引
SHOW INDEX FROM employees;

九、视图关键字

1. CREATE VIEW - 创建视图

含义:创建一个基于SELECT查询结果的虚拟表。

语法

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] 
VIEW 视图名 [(列名1, 列名2, ...)] 
AS SELECT 查询语句 
[WITH [CASCADED | LOCAL] CHECK OPTION];

参数说明

  • OR REPLACE:如果视图已存在则替换
  • ALGORITHM:指定视图算法
  • WITH CHECK OPTION:确保通过视图修改的数据符合视图定义的条件

示例

-- 创建员工部门视图
CREATE VIEW employee_department_view AS
SELECT e.id, e.name, e.age, d.department_name 
FROM employees e 
JOIN departments d ON e.department_id = d.id;-- 创建可更新的视图
CREATE VIEW active_employees AS
SELECT * FROM employees WHERE status = 'active'
WITH CHECK OPTION;

2. DROP VIEW - 删除视图

含义:删除一个或多个视图。

语法

DROP VIEW [IF EXISTS] 视图名1 [, 视图名2, ...];

示例

-- 删除employee_department_view视图
DROP VIEW IF EXISTS employee_department_view;

3. ALTER VIEW - 修改视图

含义:修改已存在的视图定义。

语法

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] 
VIEW 视图名 [(列名1, 列名2, ...)] 
AS SELECT 查询语句 
[WITH [CASCADED | LOCAL] CHECK OPTION];

示例

-- 修改employee_department_view视图,增加hire_date列
ALTER VIEW employee_department_view AS
SELECT e.id, e.name, e.age, e.hire_date, d.department_name 
FROM employees e 
JOIN departments d ON e.department_id = d.id;

十、存储过程与函数关键字

1. CREATE PROCEDURE - 创建存储过程

含义:创建一个存储过程(预先编译好的SQL代码块)。

语法

CREATE [DEFINER = { user | CURRENT_USER }] 
PROCEDURE 存储过程名 ([参数列表])
[ characteristic ... ] 
BEGIN过程体
END;

示例

-- 创建一个简单的存储过程,查询指定部门的员工
CREATE PROCEDURE GetEmployeesByDepartment(IN dept_id INT)
BEGINSELECT * FROM employees WHERE department_id = dept_id;
END;

2. CREATE FUNCTION - 创建存储函数

含义:创建一个存储函数(返回值的存储过程)。

语法

CREATE [DEFINER = { user | CURRENT_USER }] 
FUNCTION 函数名 ([参数列表])
RETURNS 返回类型
[ characteristic ... ] 
BEGIN函数体RETURN 返回值;
END;

示例

-- 创建一个函数,计算指定部门的员工人数
CREATE FUNCTION GetDepartmentEmployeeCount(dept_id INT) 
RETURNS INT
BEGINDECLARE count INT;SELECT COUNT(*) INTO count FROM employees WHERE department_id = dept_id;RETURN count;
END;

3. CALL - 调用存储过程

含义:调用存储过程执行。

语法

CALL 存储过程名([参数]);

示例

-- 调用GetEmployeesByDepartment存储过程
CALL GetEmployeesByDepartment(1);

4. DROP PROCEDURE / DROP FUNCTION - 删除存储过程/函数

含义:删除存储过程或存储函数。

语法

DROP {PROCEDURE | FUNCTION} [IF EXISTS] 名称;

示例

-- 删除存储过程
DROP PROCEDURE IF EXISTS GetEmployeesByDepartment;-- 删除存储函数
DROP FUNCTION IF EXISTS GetDepartmentEmployeeCount;

十一、触发器关键字

1. CREATE TRIGGER - 创建触发器

含义:创建一个触发器,在特定事件发生时自动执行。

语法

CREATE [DEFINER = { user | CURRENT_USER }] 
TRIGGER 触发器名 
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} 
ON 表名 FOR EACH ROW
BEGIN触发器体
END;

示例

-- 创建一个触发器,在插入员工记录前设置默认部门
CREATE TRIGGER before_employee_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGINIF NEW.department_id IS NULL THENSET NEW.department_id = 1; -- 默认部门ID为1END IF;
END;

2. DROP TRIGGER - 删除触发器

含义:删除一个触发器。

语法

DROP TRIGGER [IF EXISTS] 触发器名;

示例

-- 删除before_employee_insert触发器
DROP TRIGGER IF EXISTS before_employee_insert;

十二、事务控制关键字

1. START TRANSACTION / BEGIN - 开始事务

含义:开始一个新的事务。

语法

START TRANSACTION;
-- 或
BEGIN;

示例

-- 开始一个事务
START TRANSACTION;

2. COMMIT - 提交事务

含义:确认并永久保存事务中的所有更改。

语法

COMMIT;

示例

-- 提交当前事务
COMMIT;

3. ROLLBACK - 回滚事务

含义:取消事务中的所有更改。

语法

ROLLBACK [TO SAVEPOINT 保存点名];

示例

-- 回滚当前事务
ROLLBACK;

4. SAVEPOINT - 设置保存点

含义:在事务中设置一个保存点,可用于部分回滚。

语法

SAVEPOINT 保存点名;

示例

-- 在事务中设置保存点
SAVEPOINT before_update;-- 回滚到保存点
ROLLBACK TO SAVEPOINT before_update;

5. RELEASE SAVEPOINT - 释放保存点

含义:删除事务中的保存点。

语法

RELEASE SAVEPOINT 保存点名;

示例

-- 释放保存点
RELEASE SAVEPOINT before_update;

十三、MySQL特有关键字

1. AUTO_INCREMENT - 自动增长

含义:用于整数列,使其值自动递增(MySQL特有)。

语法

列名 INT AUTO_INCREMENT;

示例

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50)
);

2. LIMIT - 限制结果集

含义:限制SELECT语句返回的行数(MySQL特有)。

语法

SELECT 列名 FROM 表名 LIMIT 行数;

示例

SELECT * FROM users LIMIT 10;

3. ON DUPLICATE KEY UPDATE - 重复键更新

含义:在INSERT时,如果发生唯一键或主键冲突,则执行UPDATE操作(MySQL特有)。

语法

INSERT INTO 表名 (列名1, 列名2, ...) VALUES (1,2, ...)
ON DUPLICATE KEY UPDATE 列名1=1, 列名2=2, ...;

示例

-- 插入用户,如果ID已存在则更新name和age
INSERT INTO users (id, name, age) VALUES (1, '张三', 28)
ON DUPLICATE KEY UPDATE name='张三', age=28;

4. INSERT IGNORE - 忽略重复插入

含义:在INSERT时,如果发生唯一键或主键冲突,则忽略插入操作(MySQL特有)。

语法

INSERT IGNORE INTO 表名 (列名1, 列名2, ...) VALUES (1,2, ...);

示例

-- 插入用户,如果ID已存在则忽略
INSERT IGNORE INTO users (id, name, age) VALUES (1, '张三', 28);

5. VALUES - 访问新插入的值

含义:在触发器中访问刚插入或更新的数据(MySQL特有)。

语法

-- 访问新插入的值
NEW.列名;-- 访问被更新或删除的旧值
OLD.列名;

示例

-- 创建一个日志触发器
CREATE TRIGGER log_employee_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGININSERT INTO employee_log (employee_id, old_name, new_name, update_time)VALUES (OLD.id, OLD.name, NEW.name, NOW());
END;

6. DELIMITER - 定义分隔符

含义:更改SQL语句的分隔符(MySQL客户端特有)。

语法

DELIMITER 新分隔符;

示例

-- 将分隔符改为//
DELIMITER //
CREATE PROCEDURE test()
BEGINSELECT 'Hello';
END//
-- 改回分号分隔符
DELIMITER ;

7. ENGINE - 指定存储引擎

含义:为表指定存储引擎(MySQL特有)。

语法

CREATE TABLE 表名 (...)
ENGINE = 存储引擎名;

示例

-- 创建一个使用InnoDB引擎的表
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50)
) ENGINE = InnoDB;

8. CHARSET / CHARACTER SET - 指定字符集

含义:为数据库、表或列指定字符集(MySQL特有)。

语法

-- 数据库字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集名;-- 表字符集
CREATE TABLE 表名 (...) CHARSET = 字符集名;-- 列字符集
CREATE TABLE 表名 (列名 VARCHAR(50) CHARACTER SET 字符集名
);

示例

-- 创建一个使用utf8mb4字符集的表
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50)
) CHARSET = utf8mb4;

十四、MySQL关键字使用注意事项

  1. 关键字大小写:MySQL关键字不区分大小写,但建议使用大写以提高可读性
  2. 关键字冲突:如果需要使用关键字作为表名或列名,必须用反引号(`)括起来
  3. 分号结尾:MySQL要求SQL语句以分号结尾
  4. WHERE条件:UPDATE和DELETE语句一定要加WHERE条件,否则会影响所有行
  5. NULL值处理:NULL表示"未知值",不能用=或!=比较,应使用IS NULL或IS NOT NULL
  6. 事务隔离级别:MySQL支持多种事务隔离级别,可通过SET TRANSACTION ISOLATION LEVEL设置
  7. 索引优化:合理创建索引可以提高查询性能,但会降低写入性能
  8. SQL注入防护:使用参数化查询或预处理语句,避免直接拼接用户输入到SQL语句中

十五、MySQL关键字速查表

数据定义语言(DDL)

  • CREATE: 创建数据库、表、索引、视图等
  • ALTER: 修改数据库对象结构
  • DROP: 删除数据库对象
  • TRUNCATE: 清空表数据
  • RENAME: 重命名数据库对象

数据操作语言(DML)

  • SELECT: 查询数据
  • INSERT: 插入数据
  • UPDATE: 更新数据
  • DELETE: 删除数据
  • REPLACE: 替换数据
  • LOAD DATA INFILE: 批量导入数据

数据控制语言(DCL)

  • GRANT: 授予权限
  • REVOKE: 撤销权限
  • COMMIT: 提交事务
  • ROLLBACK: 回滚事务
  • SAVEPOINT: 设置事务保存点

事务控制

  • START TRANSACTION/BEGIN: 开始事务
  • COMMIT: 提交事务
  • ROLLBACK: 回滚事务
  • SAVEPOINT: 设置保存点
  • RELEASE SAVEPOINT: 释放保存点

MySQL特有关键字

  • AUTO_INCREMENT: 自动增长
  • LIMIT: 限制结果集
  • ON DUPLICATE KEY UPDATE: 重复键更新
  • INSERT IGNORE: 忽略重复插入
  • DELIMITER: 定义分隔符
  • ENGINE: 指定存储引擎
  • CHARSET/CHARACTER SET: 指定字符集
  • NEW/OLD: 触发器中访问新/旧值

通过学习和掌握这些MySQL关键字,您将能够更加熟练地使用MySQL数据库进行数据管理和查询操作。建议结合实际练习,加深对这些关键字的理解和应用。

http://www.dtcms.com/a/414502.html

相关文章:

  • MySQL表压缩:用CPU换I/O的秘密武器
  • 做外贸网站需要缴什么税重庆高端网站建设价格
  • java面试day5 | 消息中间件、RabbitMQ、kafka、高可用机制、死信队列、消息不丢失、重复消费
  • 时序数据库选型指南:如何为企业选择合适的时序数据库解决方案
  • 【iOS】alloc、init、new
  • 做网站的开发心得wordpress是不是一定要买服务器
  • AI觉醒:小白的大模型冒险记 第10章:故事续写竞技场 - 实战演练
  • 网站的形成贵州省住房和城乡建设官方网站
  • python知识点
  • LeetCode 5.最长回文字符串
  • 浅谈蓝牙的连接基石
  • Matlab通过GUI实现点云的导向(引导)滤波(附最简版)
  • MacOS - Clang使用bits/stdc++.h - 非官方(竞赛用) - 通用方法
  • 智能进化:高端平板操控系统的技术革新
  • 网站开发专业职业规划微信小程序游戏开发教程
  • 中国工业互联网公司排名seo工程师是什么职业
  • 手机锁屏后WiFi流量/数据流量消耗的深层原因与解决方案
  • 使用 Entity Framework Code First 方法创建 ASP.NET Core 5.0 Web API
  • 网站建设前的分析公司概况了解google seo是什么啊
  • 【C++实战㊾】C++11新特性实战:nullptr与类型推导,解锁编程新姿势
  • Python笔记之Python中的`@`装饰器总结笔记
  • 存储器映射寄存器MMR(Memory-Mapped Register)
  • 【Big Data】DataX 3.0 星型数据链路架构的实践与价值
  • 芯片和半导体:三星发动2nm工艺价格战
  • NLP:讲解Bert模型的变体
  • wordpress成品站源码义乌网站建设九
  • 高通平台WiFi学习--- WLAN 进阶:无需开启 WiFi 也能使用 P2P 功能的实现与探索
  • 【论文笔记】基于深度学习的图像分割研究综述 和 基于深度学习的二分图像分割综述
  • 【足式机器人算法】#2 奖励函数设计
  • 机器人小脑的控制算法有哪些 ?