内容简介:本文主要介绍MySQL相关知识,包括安装、配置、优化等内容。风哥教程参考MySQL官方文档MySQL SQL Syntax、MySQL Server Administration。
Part01-基础概念与理论知识
1.1 SQL的定义
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。MySQL作为一种流行的关系型数据库管理系统,使用SQL语言进行数据操作和管理。
1.2 SQL的分类
- DDL(数据定义语言):用于定义数据库结构,如CREATE、ALTER、DROP等
- DML(数据操作语言):用于操作数据,如INSERT、UPDATE、DELETE、SELECT等
- DCL(数据控制语言):用于控制数据访问权限,如GRANT、REVOKE等
- TCL(事务控制语言):用于控制事务,如COMMIT、ROLLBACK、SAVEPOINT等
1.3 MySQL的SQL方言
MySQL使用标准SQL的扩展版本,称为MySQL方言,它包含了一些MySQL特有的语法和功能。
Part02-生产环境规划与建议
2.1 标识符
标识符是用于命名数据库对象(如表、列、索引等)的名称。在MySQL中,标识符的规则如下:
- 标识符可以包含字母、数字、下划线(_)和美元符号($)
- 标识符不能以数字开头
- 标识符区分大小写(取决于操作系统)
- 如果标识符包含特殊字符或保留字,需要使用反引号(`)括起来
示例:
-- 有效的标识符
CREATE TABLE users (
id INT PRIMARY KEY,
user_name VARCHAR(50),
`order` INT -- 使用反引号括起保留字
);
2.2 数据类型
MySQL支持多种数据类型,主要分为以下几类:
2.2.1 数值类型
- 整数类型:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
- 浮点数类型:FLOAT, DOUBLE
- 定点数类型:DECIMAL
2.2.2 字符串类型
- 变长字符串:VARCHAR, TEXT
- 定长字符串:CHAR
- 二进制字符串:BINARY, VARBINARY, BLOB
2.2.3 日期时间类型
- 日期类型:DATE
- 时间类型:TIME
- 日期时间类型:DATETIME, TIMESTAMP
- 年份类型:YEAR
2.2.4 其他类型
- 枚举类型:ENUM
- 集合类型:SET
- JSON类型:JSON
示例:
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10,2),
stock INT,
created_at DATETIME,
status ENUM('active', 'inactive', 'deleted')
);
2.3 常量
常量是指在SQL语句中直接使用的值,包括: 01 更多视频教程www.fgedu.net.cn
2.3.1 字符串常量
使用单引号(‘)或双引号(“)括起来的字符串。
'Hello, MySQL'
"MySQL is great"
2.3.2 数值常量
直接使用的数字。 02 学习交流加群风哥微信: itpux-com
42
3.14
-123
2.3.3 日期时间常量
使用单引号括起来的日期时间值。
'2026-04-01'
'2026-04-01 12:30:45'
'12:30:45'
2.3.4 布尔常量
TRUE、FALSE或1、0。
TRUE
FALSE
1
0
2.4 运算符
2.4.1 算术运算符
- +:加法
- -:减法
- *:乘法
- /:除法
- %:取模
2.4.2 比较运算符
- =:等于
- <>或!=:不等于
- <:小于
- <=:小于等于
- >:大于
- >=:大于等于
- IN:在集合中
- NOT IN:不在集合中
- BETWEEN:在范围内
- LIKE:模糊匹配
- IS NULL:为空
- IS NOT NULL:不为空
2.4.3 逻辑运算符
- AND:逻辑与
- OR:逻辑或
- NOT:逻辑非
2.4.4 位运算符
- &:按位与
- |:按位或
- ^:按位异或
- ~:按位取反
- <<:左移
- >>:右移
示例:
-- 算术运算
SELECT 10 + 5, 10 - 5, 10 * 5, 10 / 5, 10 % 3;
-- 比较运算
SELECT * FROM users WHERE age > 18 AND status = 'active';
-- 逻辑运算
SELECT * FROM products WHERE price > 100 OR (stock > 0 AND category = 'electronics');
2.5 函数
MySQL提供了丰富的内置函数,包括:
2.5.1 字符串函数
- CONCAT():连接字符串
- LENGTH():获取字符串长度
- SUBSTRING():截取字符串
- UPPER():转换为大写
- LOWER():转换为小写
2.5.2 数值函数
- ABS():绝对值
- ROUND():四舍五入
- CEIL():向上取整
- FLOOR():向下取整
- RAND():随机数
2.5.3 日期时间函数
- NOW():当前日期时间
- CURDATE():当前日期
- CURTIME():当前时间
- DATE_ADD():日期加法
- DATEDIFF():日期差
2.5.4 聚合函数
- COUNT():计数
- SUM():求和
- AVG():平均值
- MAX():最大值
- MIN():最小值
示例:
-- 字符串函数
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
-- 数值函数
SELECT ROUND(price, 2) FROM products;
-- 日期时间函数
SELECT NOW(), CURDATE(), CURTIME();
-- 聚合函数
SELECT COUNT(*) AS user_count, AVG(age) AS avg_age FROM users;
2.6 表达式
表达式是由常量、变量、函数和运算符组成的组合,用于计算值。
示例:
-- 简单表达式
SELECT 1 + 2 * 3;
-- 复杂表达式
SELECT CONCAT('User: ', username, ', Age: ', age) AS user_info
FROM users
WHERE age > 18 AND status = 'active';
Part03-生产环境项目实施方案
3.1 语句结束符
在MySQL中,SQL语句通常以分号(;)结束。
SELECT * FROM users;
INSERT INTO users (username, email) VALUES ('admin', 'admin@fgedu.net.cn');
3.2 语句分隔符
当需要在SQL语句中使用分号时,可以使用DELIMITER命令修改语句结束符。 03 学习交流加群风哥QQ113257174
DELIMITER //
CREATE PROCEDURE GetUsers()
BEGIN
SELECT * FROM users;
END //
DELIMITER ;
3.3 注释
MySQL支持三种注释方式:
3.3.1 单行注释
-- 这是单行注释
SELECT * FROM users; -- 行尾注释
3.3.2 多行注释
/*
这是多行注释
可以跨越多行
*/
SELECT * FROM users;
3.3.3 井号注释
# 这是井号注释
SELECT * FROM users;
Part04-生产案例与实战讲解
4.1 SELECT语句
SELECT [DISTINCT] column1, column2, ...
FROM table_name
[WHERE condition]
[GROUP BY column1, column2, ...]
[HAVING condition]
[ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...]
[LIMIT number [OFFSET number]];
示例:
SELECT id, username, email
FROM users
WHERE age > 18
ORDER BY created_at DESC
LIMIT 10;
4.2 INSERT语句
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...),
(value1, value2, ...),
...;
示例:
INSERT INTO users (username, email, password)
VALUES ('user1', 'user1@fgedu.net.cn', 'pass123'),
('user2', 'user2@fgedu.net.cn', 'pass456');
4.3 UPDATE语句
UPDATE table_name
SET column1 = value1, column2 = value2, ...
[WHERE condition];
示例:
UPDATE users
SET email = 'newemail@fgedu.net.cn', status = 'active'
WHERE id = 1;
4.4 DELETE语句
DELETE FROM table_name
[WHERE condition];
示例:
DELETE FROM users
WHERE id = 5;
4.5 CREATE TABLE语句
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
...
[PRIMARY KEY (column1, ...),]
[FOREIGN KEY (column1, ...) REFERENCES table_name (column1, ...)]
);
示例:
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
Part05-风哥经验总结与分享
5.1 LIMIT子句
MySQL使用LIMIT子句限制结果集的数量。
SELECT * FROM users LIMIT 10; -- 前10条记录
SELECT * FROM users LIMIT 5, 10; -- 从第6条开始,取10条记录
5.2 IF函数
MySQL提供了IF函数用于条件判断。
SELECT id, username, IF(status = 'active', '活跃', '非活跃') AS status_text FROM users;
5.3 变量
MySQL支持用户变量和系统变量。
-- 用户变量
SET @user_id = 1;
SELECT * FROM users WHERE id = @user_id;
-- 系统变量
SET GLOBAL max_connections = 1000;
SET SESSION sort_buffer_size = 1024*1024;
5.4 存储过程和函数
MySQL支持创建存储过程和函数。
-- 存储过程
DELIMITER //
CREATE PROCEDURE GetUserById(IN user_id INT)
BEGIN
SELECT * FROM users WHERE id = user_id;
END //
DELIMITER ;
-- 函数
DELIMITER //
CREATE FUNCTION GetUserName(user_id INT) RETURNS VARCHAR(50)
BEGIN
DECLARE user_name VARCHAR(50);
SELECT username INTO user_name FROM users WHERE id = user_id;
RETURN user_name;
END //
DELIMITER ;
5.5 触发器
MySQL支持创建触发器。 04 风哥提示:
DELIMITER //
CREATE TRIGGER before_user_insert
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
SET NEW.created_at = NOW();
END //
DELIMITER ;
6. 最佳实践
6.1 命名规范
- 使用小写字母和下划线命名数据库对象
- 避免使用保留字作为标识符
- 使用有意义的名称,避免使用缩写
- 保持命名风格一致
6.2 语句编写规范
- 使用大写字母书写SQL关键字
- 使用缩进和换行提高可读性
- 为复杂语句添加注释
- 避免在一条语句中执行过多操作
6.3 性能考虑
- 只选择需要的列,避免SELECT *
- 使用WHERE子句过滤数据
- 合理使用索引
- 避免在WHERE子句中使用函数
- 使用参数化查询,避免SQL注入
注意:在编写SQL语句时,应遵循最佳实践,确保语句的可读性、安全性和性能。
7. 常见错误与解决方案
7.1 语法错误
错误:You have an error in your SQL syntax
解决方案:检查SQL语句的语法,确保所有括号、引号和分号都正确使用。
7.2 列名错误
错误:Unknown column ‘column_name’ in ‘field list’
解决方案:检查列名是否正确,确保表中存在该列。
7.3 表名错误
错误:Table ‘database.table_name’ doesn’t exist
解决方案:检查表名是否正确,确保表存在。
7.4 权限错误
错误:Access denied for user ‘user’@’host’ to database ‘database’
解决方案:检查用户权限,确保用户有足够的权限执行操作。 05更多学习教程公众号风哥教程itpux_com
7.5 数据类型错误
错误:Data truncation: Incorrect datetime value
解决方案:检查数据类型是否匹配,确保输入的值符合列的数据类型要求。
8. 总结
本教程介绍了MySQL语言结构的基础知识,包括: 06 from mysql视频:www.itpux.com
- SQL语言的分类和MySQL的SQL方言
- 标识符、数据类型、常量和运算符
- 函数和表达式
- SQL语句的基本结构
- MySQL特有的语法
- 最佳实践和常见错误
掌握MySQL语言结构的基础知识是学习SQL开发的重要一步。通过理解这些基本概念,您可以编写更高效、更安全的SQL语句,为后续的SQL开发和优化打下坚实的基础。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
