内容简介:本文主要介绍MySQL相关知识,包括安装、配置、优化等内容。风哥教程参考MySQL官方文档MySQL SQL Syntax、MySQL Server Administration。
Part01-基础概念与理论知识
1.1 什么是语句分隔符
语句分隔符是用于标识SQL语句结束的符号。在MySQL中,默认的语句分隔符是分号(;)。
1.2 分隔符的作用
- 标识SQL语句的结束
- 告诉MySQL客户端何时执行当前语句
- 允许在单个脚本中包含多个SQL语句
Part02-生产环境规划与建议
2.1 分号(;)
分号是MySQL的默认语句分隔符,用于结束大多数SQL语句。
示例: 01 更多视频教程www.fgedu.net.cn
-- 使用分号作为分隔符
SELECT * FROM users;
INSERT INTO users (username, email) VALUES ('admin', 'admin@fgedu.net.cn');
UPDATE users SET status = 'active' WHERE id = 1;
2.2 分号的使用场景
- 单条SQL语句的结束
- 多个SQL语句的分隔
- 交互式命令行中的语句结束
Part03-生产环境项目实施方案
3.1 为什么需要自定义分隔符
在某些情况下,默认的分号分隔符会与SQL语句中的内容冲突,例如: 02 学习交流加群风哥微信: itpux-com
- 存储过程中包含分号
- 函数定义中包含分号
- 触发器定义中包含分号
- 复合语句中包含分号
3.2 使用DELIMITER命令
MySQL提供了DELIMITER命令来修改语句分隔符。
示例:
-- 修改分隔符为//
DELIMITER //
-- 创建存储过程
CREATE PROCEDURE GetUsers()
BEGIN
SELECT * FROM users;
SELECT COUNT(*) FROM users;
END //
-- 改回默认分隔符
DELIMITER ;
3.3 自定义分隔符的选择
- 选择不会在SQL语句中出现的字符组合
- 常用的自定义分隔符:
//:双斜杠$$:双美元符号;;:双分号
- 避免使用可能与SQL语法冲突的字符
Part04-生产案例与实战讲解
4.1 语句执行的基本规则
- MySQL客户端会积累输入的SQL语句,直到遇到分隔符
- 遇到分隔符后,客户端会将积累的语句发送给服务器执行
- 服务器执行完毕后,将结果返回给客户端
- 客户端准备接收下一条语句
4.2 交互式执行
在交互式MySQL客户端中:
- 输入SQL语句后,按Enter键换行
- 输入分隔符(默认分号)后,按Enter键执行语句
- 可以在一行中输入多条语句,用分号分隔
示例:
mysql> SELECT * FROM users;
+----+----------+------------------+
| id | username | email |
+----+----------+------------------+
| 1 | admin | admin@fgedu.net.cn |
+----+----------+------------------+
1 row in set (0.00 sec)
mysql> INSERT INTO users (username, email) VALUES ('user1', 'user1@fgedu.net.cn');
Query OK, 1 row affected (0.01 sec)
4.3 批处理执行
在批处理模式中:
- SQL语句存储在文件中,用分号分隔
- 使用
mysql命令执行文件:mysql -u root -p database < script.sql - MySQL会按照顺序执行文件中的所有语句
示例:
-- script.sql文件内容
USE testdb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
INSERT INTO users (username, email) VALUES ('admin', 'admin@fgedu.net.cn');
-- 执行脚本
$ mysql -u root -p testdb < script.sql
4.4 复合语句的执行
复合语句(如存储过程、函数、触发器)的执行:
- 需要使用自定义分隔符
- 复合语句内部的分号不会触发执行
- 只有遇到自定义分隔符时,整个复合语句才会被执行
示例:
DELIMITER //
CREATE FUNCTION CalculateTotal(price DECIMAL(10,2), quantity INT) RETURNS DECIMAL(10,2)
BEGIN
DECLARE total DECIMAL(10,2);
SET total = price * quantity;
RETURN total;
END //
DELIMITER ;
-- 调用函数
SELECT CalculateTotal(10.50, 5);
Part05-风哥经验总结与分享
5.1 字符串中的分号
字符串中的分号不会被视为语句分隔符,因为它们被引号包围。
示例: 03 学习交流加群风哥QQ113257174
-- 字符串中的分号不会被视为分隔符
INSERT INTO users (username, bio) VALUES ('user1', 'Hello; World;');
-- 正确执行
SELECT * FROM users WHERE bio LIKE '%World;%';
5.2 注释中的分号
注释中的分号不会被视为语句分隔符。 04 风哥提示:
示例:
-- 注释中的分号; 不会被视为分隔符
SELECT * FROM users; -- 行尾注释中的分号; 也不会被视为分隔符
5.3 多行语句
SQL语句可以跨越多行,直到遇到分隔符才会执行。
示例:
-- 多行语句
SELECT
id,
username,
email
FROM
users
WHERE
status = 'active'
ORDER BY
created_at DESC;
6. 常见问题与解决方案
6.1 分隔符错误
问题:存储过程创建失败,提示语法错误
原因:没有使用自定义分隔符,导致存储过程内部的分号被视为语句结束 05更多学习教程公众号风哥教程itpux_com
解决方案:使用DELIMITER命令修改分隔符
错误示例:
-- 错误:没有使用自定义分隔符
CREATE PROCEDURE GetUsers()
BEGIN
SELECT * FROM users;
SELECT COUNT(*) FROM users;
END;
正确示例:
-- 正确:使用自定义分隔符
DELIMITER //
CREATE PROCEDURE GetUsers()
BEGIN
SELECT * FROM users;
SELECT COUNT(*) FROM users;
END //
DELIMITER ;
6.2 分隔符未重置
问题:执行完存储过程后,后续SQL语句无法正常执行
原因:没有将分隔符改回默认的分号
解决方案:在创建完存储过程后,使用DELIMITER ;重置分隔符
6.3 批处理文件中的分隔符
问题:批处理文件执行失败
原因:文件中包含复合语句,但没有正确使用分隔符
解决方案:在批处理文件中正确使用DELIMITER命令
7. 最佳实践
7.1 分隔符使用建议
- 对于简单SQL语句,使用默认的分号分隔符
- 对于复合语句,使用自定义分隔符
- 在复合语句定义完成后,及时将分隔符改回默认值
- 在批处理文件中,明确使用分隔符命令
7.2 执行规则建议
- 在交互式客户端中,每条语句后都添加分号
- 在批处理文件中,确保每条语句都有正确的分隔符
- 对于复杂的SQL语句,使用多行格式提高可读性
- 在执行多条语句时,注意语句之间的顺序和依赖关系
8. 工具支持
8.1 MySQL Workbench
MySQL Workbench会自动处理分隔符:
- 在SQL编辑器中,复合语句会自动识别
- 可以使用工具栏中的分隔符按钮修改分隔符
- 执行语句时会正确处理分隔符
8.2 命令行客户端
MySQL命令行客户端:
- 使用
DELIMITER命令修改分隔符 - 使用
\g或\G作为替代分隔符 \g:执行语句并以表格形式显示结果\G:执行语句并以垂直形式显示结果
示例:
mysql> SELECT * FROM users \g
+----+----------+------------------+
| id | username | email |
+----+----------+------------------+
| 1 | admin | admin@fgedu.net.cn |
+----+----------+------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM users \G
*************************** 1. row ***************************
id: 1
username: admin
email: admin@fgedu.net.cn
1 row in set (0.00 sec)
8.3 其他工具
- phpMyAdmin:提供图形界面执行SQL语句
- Navicat:支持分隔符设置和SQL执行
- VS Code:通过插件支持MySQL语法和执行
9. 示例:完整的分隔符使用
示例:创建存储过程和函数
-- 设置自定义分隔符
DELIMITER //
/*
获取用户信息的存储过程
*/
CREATE PROCEDURE sp_get_user(IN user_id INT)
BEGIN
-- 查询用户基本信息
SELECT * FROM users WHERE id = user_id;
-- 查询用户订单
SELECT * FROM orders WHERE user_id = user_id;
END //
/*
计算折扣价格的函数
*/
CREATE FUNCTION fn_calculate_discount(price DECIMAL(10,2), discount INT) RETURNS DECIMAL(10,2)
BEGIN
DECLARE discounted_price DECIMAL(10,2);
SET discounted_price = price * (1 - discount / 100);
RETURN discounted_price;
END //
/*
插入用户前的触发器
*/
CREATE TRIGGER before_insert_user
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
SET NEW.updated_at = NOW();
END //
-- 恢复默认分隔符
DELIMITER ;
-- 测试存储过程
CALL sp_get_user(1);
-- 测试函数
SELECT fn_calculate_discount(100.00, 20);
10. 总结
本教程介绍了MySQL语句分隔符与执行规则,包括: 06 from mysql视频:www.itpux.com
- 默认分隔符(分号)的使用
- 自定义分隔符的必要性和使用方法
- SQL语句的执行规则
- 特殊情况的处理
- 常见问题与解决方案
- 最佳实践建议
- 工具支持情况
理解和正确使用MySQL的语句分隔符与执行规则,对于编写和执行SQL语句,特别是复杂的复合语句(如存储过程、函数和触发器)非常重要。通过遵循最佳实践,可以避免常见的语法错误,提高SQL代码的可读性和可维护性。
提示:在编写包含复合语句的SQL脚本时,始终记得使用DELIMITER命令修改分隔符,并在完成后将其改回默认值。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
