1. 首页 > MySQL教程 > 正文

MySQL教程FG061-MySQL语言结构基础

GF-MySQL

内容简介:本文主要介绍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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息