目录

    • 1. 连接MySQL数据库
      • 基本连接语法
      • 连接参数说明
    • 2. 数据库操作
      • 2.1 查看数据库
      • 2.2 创建数据库
      • 2.3 删除数据库
    • 3. 表操作
      • 3.1 查看表信息
      • 3.2 创建表
      • 3.3 常用数据类型
      • 3.4 修改表结构
      • 3.5 删除表
    • 4. 数据操作 (CRUD)
      • 4.1 插入数据 (CREATE)
      • 4.2 查询数据 (READ)
        • 基本查询
        • 条件查询
        • 排序和分页
        • 聚合查询
      • 4.3 更新数据 (UPDATE)
      • 4.4 删除数据 (DELETE)
    • 5. 高级查询
      • 5.1 连接查询 (JOIN)
        • 内连接 (INNER JOIN)
        • 左连接 (LEFT JOIN)
        • 右连接 (RIGHT JOIN)
        • 全外连接 (FULL OUTER JOIN)
      • 5.2 子查询
      • 5.3 窗口函数 (MySQL 8.0+)
      • 5.4 公用表表达式 (CTE) - MySQL 8.0+
    • 6. 索引操作
      • 6.1 创建索引
      • 6.2 查看索引
      • 6.3 删除索引
    • 7. 用户和权限管理
      • 7.1 用户管理基础
        • 查看当前用户信息
        • 用户信息查询
      • 7.2 创建用户
        • 基本语法
        • 创建用户时设置密码的加密处理
        • 创建用户案例
        • 创建用户时常见报错的解决方法
      • 7.3 删除用户
        • 基本语法
        • 删除用户案例
      • 7.4 修改用户密码
        • 基本语法
        • 使用PASSWORD()函数的注意事项
        • 修改用户密码示例
      • 7.5 权限管理
      • 7.6 常用权限类型
    • 8. 常用函数
      • 8.1 字符串函数
      • 8.2 数值函数
      • 8.3 日期时间函数
      • 8.4 条件函数
      • 8.5 聚合函数
    • 9. 事务处理
      • 9.1 事务基础
      • 9.2 事务示例
      • 9.3 保存点 (Savepoint)
      • 9.4 事务隔离级别
    • 10. 备份和恢复
      • 10.1 使用 mysqldump 备份
      • 10.2 恢复数据库
      • 10.3 二进制日志备份

1. 连接MySQL数据库

基本连接语法

# 本地连接
mysql -u root -p# 远程连接
mysql -h hostname -u root -p demo# 指定端口连接
mysql -h hostname -P 3306 -u root -p demo

连接参数说明

  • -u: 用户名
  • -p: 密码(会提示输入)
  • -h: 主机名或IP地址
  • -P: 端口号(默认3306)

2. 数据库操作

2.1 查看数据库

-- 显示所有数据库
SHOW DATABASES;mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)-- 使用特定数据库
USE mysql;mysql> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed-- 显示当前使用的数据库
SELECT DATABASE();mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| mysql      |
+------------+
1 row in set (0.00 sec)

2.2 创建数据库

-- 基本创建
CREATE DATABASE shop;-- 创建时指定字符集
CREATE DATABASE IF NOT EXISTS shop 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_general_ci;mysql> CREATE DATABASE IF NOT EXISTS shop -> CHARACTER SET utf8mb4 -> COLLATE utf8mb4_general_ci;
Query OK, 1 row affected (0.00 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| shop               |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

2.3 删除数据库

-- 删除数据库
DROP DATABASE shop;-- 安全删除(如果存在才删除)
DROP DATABASE IF EXISTS shop;

3. 表操作

3.1 查看表信息

-- 显示当前数据库中的所有表
SHOW TABLES;-- 查看表结构
DESCRIBE table_name;
DESC table_name;
SHOW COLUMNS FROM table_name;-- 查看建表语句
SHOW CREATE TABLE table_name;-- 查看表状态信息
SHOW TABLE STATUS LIKE 'table_name';

3.2 创建表

-- 基本建表语法
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,email VARCHAR(100) NOT NULL,password VARCHAR(255) NOT NULL,age INT DEFAULT 0,is_active BOOLEAN DEFAULT TRUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);mysql> use shop;
Database changed
mysql> show tables;
Empty set (0.00 sec)mysql> CREATE TABLE users (->     id INT AUTO_INCREMENT PRIMARY KEY,->     username VARCHAR(50) NOT NULL UNIQUE,->     email VARCHAR(100) NOT NULL,->     password VARCHAR(255) NOT NULL,->     age INT DEFAULT 0,->     is_active BOOLEAN DEFAULT TRUE,->     created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,->     updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP-> );
Query OK, 0 rows affected (0.02 sec)mysql> show tables;
+----------------+
| Tables_in_shop |
+----------------+
| users          |
+----------------+
1 row in set (0.00 sec)

3.3 常用数据类型

类型说明示例
INT整数age INT
VARCHAR(n)可变长度字符串name VARCHAR(50)
TEXT长文本description TEXT
DECIMAL(m,d)精确小数price DECIMAL(10,2)
DATE日期birth_date DATE
DATETIME日期时间created_at DATETIME
TIMESTAMP时间戳updated_at TIMESTAMP
BOOLEAN布尔值is_active BOOLEAN

3.4 修改表结构

-- 添加列
ALTER TABLE table_name ADD COLUMN column_name data_type;
ALTER TABLE users ADD COLUMN phone VARCHAR(20);-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE users DROP COLUMN phone;-- 修改列数据类型
ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;
ALTER TABLE users MODIFY COLUMN age SMALLINT;-- 重命名列
ALTER TABLE table_name CHANGE old_name new_name data_type;
ALTER TABLE users CHANGE username user_name VARCHAR(50);-- 重命名表
RENAME TABLE old_table_name TO new_table_name;-- 添加主键
ALTER TABLE table_name ADD PRIMARY KEY (column_name);-- 添加外键
ALTER TABLE table_name ADD FOREIGN KEY (column_name) 
REFERENCES other_table(column_name);mysql> DESC users;
+------------+--------------+------+-----+-------------------+-----------------------------------------------+
| Field      | Type         | Null | Key | Default           | Extra                                         |
+------------+--------------+------+-----+-------------------+-----------------------------------------------+
| id         | int          | NO   | PRI | NULL              | auto_increment                                |
| user_name  | varchar(50)  | YES  | UNI | NULL              |                                               |
| email      | varchar(100) | NO   |     | NULL              |                                               |
| password   | varchar(255) | NO   |     | NULL              |                                               |
| age        | smallint     | YES  |     | NULL              |                                               |
| is_active  | tinyint(1)   | YES  |     | 1                 |                                               |
| created_at | timestamp    | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED                             |
| updated_at | timestamp    | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
+------------+--------------+------+-----+-------------------+-----------------------------------------------+
8 rows in set (0.00 sec)

3.5 删除表

-- 删除表
DROP TABLE table_name;-- 安全删除
DROP TABLE IF EXISTS table_name;-- 删除多个表
DROP TABLE table1, table2, table3;

4. 数据操作 (CRUD)

4.1 插入数据 (CREATE)

-- 插入单行数据
INSERT INTO users (user_name, email, password) 
VALUES ('john_doe', 'john@example.com', 'hashed_password');mysql> INSERT INTO users (user_name, email, password) -> VALUES ('john_doe', 'john@example.com', 'hashed_password');
Query OK, 1 row affected (0.00 sec)-- 插入多行数据
INSERT INTO users (user_name, email, password) VALUES 
('user1', 'user1@example.com', 'password1'),
('user2', 'user2@example.com', 'password2'),
('user3', 'user3@example.com', 'password3');-- 插入并忽略重复
INSERT IGNORE INTO users (user_name, email) 
VALUES ('existing_user', 'existing@example.com');-- 插入或更新(如果存在则更新)
INSERT INTO users (id, user_name, email, password)
VALUES (1, 'john', 'john@example.com', 'hashed_password')
ON DUPLICATE KEY UPDATE email = VALUES(email);mysql> INSERT INTO users (id, user_name, email, password)-> VALUES (1, 'john', 'john@example.com', 'hashed_password')-> ON DUPLICATE KEY UPDATE email = VALUES(email);
Query OK, 0 rows affected, 1 warning (0.00 sec)

4.2 查询数据 (READ)

基本查询
-- 查询所有列
SELECT * FROM users;mysql> SELECT * FROM users;
+----+---------------+----------------------+-----------------+------+-----------+---------------------+---------------------+
| id | user_name     | email                | password        | age  | is_active | created_at          | updated_at          |
+----+---------------+----------------------+-----------------+------+-----------+---------------------+---------------------+
|  1 | john_doe      | john@example.com     | hashed_password | NULL |         1 | 2025-09-04 16:20:58 | 2025-09-04 16:20:58 |
|  2 | user1         | user1@example.com    | password1       | NULL |         1 | 2025-09-04 16:22:58 | 2025-09-04 16:22:58 |
|  3 | user2         | user2@example.com    | password2       | NULL |         1 | 2025-09-04 16:22:58 | 2025-09-04 16:22:58 |
|  4 | user3         | user3@example.com    | password3       | NULL |         1 | 2025-09-04 16:22:58 | 2025-09-04 16:22:58 |
|  5 | existing_user | existing@example.com |                 | NULL |         1 | 2025-09-04 16:23:08 | 2025-09-04 16:23:08 |
+----+---------------+----------------------+-----------------+------+-----------+---------------------+---------------------+
5 rows in set (0.00 sec)-- 查询指定列
SELECT user_name, email FROM users;mysql> SELECT user_name, email FROM users;
+---------------+----------------------+
| user_name     | email                |
+---------------+----------------------+
| john_doe      | john@example.com     |
| user1         | user1@example.com    |
| user2         | user2@example.com    |
| user3         | user3@example.com    |
| existing_user | existing@example.com |
+---------------+----------------------+
5 rows in set (0.00 sec)-- 去重查询
SELECT DISTINCT email FROM users;mysql> SELECT DISTINCT email FROM users;
+----------------------+
| email                |
+----------------------+
| john@example.com     |
| user1@example.com    |
| user2@example.com    |
| user3@example.com    |
| existing@example.com |
+----------------------+
5 rows in set (0.00 sec)
条件查询
-- 等值查询
SELECT * FROM users WHERE id = 1;
SELECT * FROM users WHERE user_name = 'john_doe';mysql> SELECT * FROM users WHERE id = 1;
+----+-----------+------------------+-----------------+------+-----------+---------------------+---------------------+
| id | user_name | email            | password        | age  | is_active | created_at          | updated_at          |
+----+-----------+------------------+-----------------+------+-----------+---------------------+---------------------+
|  1 | john_doe  | john@example.com | hashed_password | NULL |         1 | 2025-09-04 16:20:58 | 2025-09-04 16:20:58 |
+----+-----------+------------------+-----------------+------+-----------+---------------------+---------------------+
1 row in set (0.00 sec)mysql> SELECT * FROM users WHERE user_name = 'john_doe';
+----+-----------+------------------+-----------------+------+-----------+---------------------+---------------------+
| id | user_name | email            | password        | age  | is_active | created_at          | updated_at          |
+----+-----------+------------------+-----------------+------+-----------+---------------------+---------------------+
|  1 | john_doe  | john@example.com | hashed_password | NULL |         1 | 2025-09-04 16:20:58 | 2025-09-04 16:20:58 |
+----+-----------+------------------+-----------------+------+-----------+---------------------+---------------------+
1 row in set (0.00 sec)-- 比较查询
SELECT * FROM users WHERE age = NULL;-- 模糊查询
SELECT * FROM users WHERE user_name LIKE 'john%';
SELECT * FROM users WHERE email LIKE '%@gmail.com';mysql> SELECT * FROM users WHERE user_name LIKE 'john%';
+----+-----------+------------------+-----------------+------+-----------+---------------------+---------------------+
| id | user_name | email            | password        | age  | is_active | created_at          | updated_at          |
+----+-----------+------------------+-----------------+------+-----------+---------------------+---------------------+
|  1 | john_doe  | john@example.com | hashed_password | NULL |         1 | 2025-09-04 16:20:58 | 2025-09-04 16:20:58 |
+----+-----------+------------------+-----------------+------+-----------+---------------------+---------------------+
1 row in set (0.00 sec)mysql> SELECT * FROM users WHERE email LIKE '%@example.com';
+----+---------------+----------------------+-----------------+------+-----------+---------------------+---------------------+
| id | user_name     | email                | password        | age  | is_active | created_at          | updated_at          |
+----+---------------+----------------------+-----------------+------+-----------+---------------------+---------------------+
|  1 | john_doe      | john@example.com     | hashed_password | NULL |         1 | 2025-09-04 16:20:58 | 2025-09-04 16:20:58 |
|  2 | user1         | user1@example.com    | password1       | NULL |         1 | 2025-09-04 16:22:58 | 2025-09-04 16:22:58 |
|  3 | user2         | user2@example.com    | password2       | NULL |         1 | 2025-09-04 16:22:58 | 2025-09-04 16:22:58 |
|  4 | user3         | user3@example.com    | password3       | NULL |         1 | 2025-09-04 16:22:58 | 2025-09-04 16:22:58 |
|  5 | existing_user | existing@example.com |                 | NULL |         1 | 2025-09-04 16:23:08 | 2025-09-04 16:23:08 |
+----+---------------+----------------------+-----------------+------+-----------+---------------------+---------------------+
5 rows in set (0.00 sec)-- 多条件查询
SELECT * FROM users WHERE age > 18 AND is_active = TRUE;
SELECT * FROM users WHERE user_name = 'john' OR email = 'john@example.com';-- 空值查询
SELECT * FROM users WHERE phone IS NULL;
SELECT * FROM users WHERE phone IS NOT NULL;-- 范围查询
SELECT * FROM users WHERE id IN (1, 2, 3, 4, 5);
SELECT * FROM users WHERE user_name NOT IN ('admin', 'root');
排序和分页
-- 排序
SELECT * FROM users ORDER BY created_at DESC;
SELECT * FROM users ORDER BY age ASC, username DESC;-- 分页
SELECT * FROM users LIMIT 10;                    -- 前10条
SELECT * FROM users LIMIT 10 OFFSET 20;          -- 跳过20条,取10条
SELECT * FROM users LIMIT 20, 10;                -- MySQL特有语法,跳过20条,取10条
聚合查询
-- 统计函数
SELECT COUNT(*) FROM users;                       -- 总记录数
SELECT COUNT(phone) FROM users;                   -- 非空phone字段数
SELECT MAX(age), MIN(age), AVG(age) FROM users;   -- 最大、最小、平均年龄
SELECT SUM(age) FROM users;                       -- 年龄总和-- 分组统计
SELECT age, COUNT(*) as count FROM users GROUP BY age;
SELECT DATE(created_at) as date, COUNT(*) as daily_users 
FROM users 
GROUP BY DATE(created_at)
ORDER BY date DESC;-- 分组过滤
SELECT age, COUNT(*) as count 
FROM users 
GROUP BY age 
HAVING count > 5;

4.3 更新数据 (UPDATE)

-- 更新单个字段
UPDATE users SET email = 'newemail@example.com' WHERE id = 1;-- 更新多个字段
UPDATE users SET email = 'updated@example.com',age = 25,updated_at = CURRENT_TIMESTAMP 
WHERE username = 'john_doe';-- 批量更新
UPDATE users SET is_active = FALSE WHERE created_at < '2022-01-01';-- 使用表达式更新
UPDATE users SET age = age + 1 WHERE birthday = CURDATE();

4.4 删除数据 (DELETE)

-- 删除特定记录
DELETE FROM users WHERE id = 1;-- 批量删除
DELETE FROM users WHERE is_active = FALSE;-- 删除所有数据(保留表结构)
DELETE FROM users;-- 清空表(更快,重置AUTO_INCREMENT)
TRUNCATE TABLE users;

5. 高级查询

5.1 连接查询 (JOIN)

内连接 (INNER JOIN)
-- 基本内连接
SELECT u.username, p.title 
FROM users u 
INNER JOIN posts p ON u.id = p.user_id;-- 多表连接
SELECT u.username, p.title, c.content
FROM users u
INNER JOIN posts p ON u.id = p.user_id
INNER JOIN comments c ON p.id = c.post_id;
左连接 (LEFT JOIN)
-- 左连接(显示所有用户,即使没有发布文章)
SELECT u.username, p.title 
FROM users u 
LEFT JOIN posts p ON u.id = p.user_id;
右连接 (RIGHT JOIN)
-- 右连接(显示所有文章,即使用户不存在)
SELECT u.username, p.title 
FROM users u 
RIGHT JOIN posts p ON u.id = p.user_id;
全外连接 (FULL OUTER JOIN)
-- MySQL不直接支持FULL OUTER JOIN,需要使用UNION
SELECT u.username, p.title 
FROM users u LEFT JOIN posts p ON u.id = p.user_id
UNION
SELECT u.username, p.title 
FROM users u RIGHT JOIN posts p ON u.id = p.user_id;

5.2 子查询

-- 标量子查询
SELECT * FROM users 
WHERE id = (SELECT user_id FROM posts WHERE title = 'My First Post');-- 列表子查询
SELECT * FROM users 
WHERE id IN (SELECT user_id FROM posts WHERE created_at > '2023-01-01');-- 相关子查询
SELECT * FROM users u
WHERE EXISTS (SELECT 1 FROM posts p WHERE p.user_id = u.id);-- 子查询在FROM中
SELECT avg_age.age_group, COUNT(*) as user_count
FROM (SELECT CASE WHEN age < 18 THEN 'Youth'WHEN age BETWEEN 18 AND 65 THEN 'Adult'ELSE 'Senior'END as age_groupFROM users
) avg_age
GROUP BY avg_age.age_group;

5.3 窗口函数 (MySQL 8.0+)

-- ROW_NUMBER()
SELECT username, age, ROW_NUMBER() OVER (ORDER BY age DESC) as rank
FROM users;-- RANK() 和 DENSE_RANK()
SELECT username, age,RANK() OVER (ORDER BY age DESC) as rank,DENSE_RANK() OVER (ORDER BY age DESC) as dense_rank
FROM users;-- 分区窗口函数
SELECT username, department, salary,ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank
FROM employees;

5.4 公用表表达式 (CTE) - MySQL 8.0+

-- 基本CTE
WITH high_value_users AS (SELECT * FROM users WHERE age > 30
)
SELECT username, email FROM high_value_users;-- 递归CTE
WITH RECURSIVE employee_hierarchy AS (SELECT id, name, manager_id, 1 as levelFROM employeesWHERE manager_id IS NULLUNION ALLSELECT e.id, e.name, e.manager_id, eh.level + 1FROM employees eINNER JOIN employee_hierarchy eh ON e.manager_id = eh.id
)
SELECT * FROM employee_hierarchy;

6. 索引操作

6.1 创建索引

-- 普通索引
CREATE INDEX idx_username ON users (username);-- 唯一索引
CREATE UNIQUE INDEX idx_email ON users (email);-- 复合索引
CREATE INDEX idx_name_age ON users (username, age);-- 前缀索引
CREATE INDEX idx_email_prefix ON users (email(10));-- 在创建表时添加索引
CREATE TABLE users (id INT PRIMARY KEY,username VARCHAR(50),email VARCHAR(100),INDEX idx_username (username),UNIQUE INDEX idx_email (email)
);

6.2 查看索引

-- 查看表的所有索引
SHOW INDEX FROM users;-- 查看索引使用情况
EXPLAIN SELECT * FROM users WHERE username = 'john';

6.3 删除索引

-- 删除索引
DROP INDEX idx_username ON users;-- 删除主键
ALTER TABLE users DROP PRIMARY KEY;

7. 用户和权限管理

7.1 用户管理基础

查看当前用户信息
-- 查看当前用户
SELECT USER();-- 查看当前用户的权限
SHOW GRANTS;-- 以root用户身份查看所有权限
SHOW GRANTS FOR 'root'@'localhost';
用户信息查询
-- 切换到mysql系统数据库
USE mysql;-- 查看user表的结构
DESC user;-- 查看user表的主要字段
SELECT HOST, USER, authentication_string FROM user;-- 查看所有用户
SELECT Host, User FROM mysql.user;-- 查看当前数据库的所有用户
SELECT DISTINCT User FROM mysql.user;-- 查看特定用户的详细信息
SELECT Host, User, authentication_string, Select_priv, Insert_priv, Update_priv, Delete_priv 
FROM mysql.user 
WHERE User = 'root';-- 使用show命令查看用户权限
SHOW GRANTS FOR 'root'@'localhost';

7.2 创建用户

基本语法
-- 基本创建用户语法
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';-- 完整语法
CREATE USER [IF NOT EXISTS] '用户名'@'主机名'        -- 创建用户,如果已存在则忽略
IDENTIFIED BY '密码'                                -- 设置用户密码(默认使用 caching_sha2_password 插件)[IDENTIFIED WITH 插件名 BY '密码']                  -- 可选:指定认证插件,如 mysql_native_password[PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]] -- 密码过期策略-- DEFAULT  : 使用系统默认策略-- NEVER    : 密码永不过期-- INTERVAL N DAY : N 天后密码过期[ACCOUNT [LOCK | UNLOCK]]                           -- 用户账户状态-- LOCK   : 锁定账户,禁止登录-- UNLOCK : 解锁账户,允许登录[DEFAULT ROLE 角色名 [, 角色名] ...]                 -- 设置用户的默认角色[REQUIRE { NONE | SSL | X509 | CIPHER 'str' | ISSUER 'str' | SUBJECT 'str'}] -- TLS/SSL 登录要求-- NONE   : 不要求-- SSL    : 必须使用 SSL-- X509   : 必须有有效证书-- CIPHER/ISSUER/SUBJECT : 指定更严格的证书限制
创建用户时设置密码的加密处理
-- 查看默认的加密验证插件
SHOW VARIABLES LIKE 'default_authentication_plugin';-- 创建用户时指定加密密码验证插件
CREATE USER 'test_user'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
创建用户案例
-- 创建本地登录用户
CREATE USER 'local_user'@'localhost' IDENTIFIED BY 'local_123';-- 创建可以在任意主机登录的用户
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'remote_123';-- 创建只能在特定的IP下登录的用户
CREATE USER 'office_user'@'192.168.1.100' IDENTIFIED BY 'office_123';-- 创建只能从特定的网段登录的用户
CREATE USER 'dept_user'@'192.168.1.%' IDENTIFIED BY 'dept_123';-- 创建用户并设置密码永不过期
CREATE USER 'app_user'@'%' IDENTIFIED BY 'app_123456' PASSWORD EXPIRE NEVER;-- 验证用户创建成功
SELECT host, user FROM mysql.user WHERE user LIKE '%user%';
创建用户时常见报错的解决方法
-- 错误1:ERROR 1396 (HY000): Operation CREATE USER failed
-- 原因:用户已经存在
-- 解决方法:使用IF NOT EXISTS或先删除用户
CREATE USER IF NOT EXISTS 'existing_user'@'localhost' IDENTIFIED BY 'password';-- 错误2:ERROR 1045 (28000): Access denied
-- 原因:当前用户没有CREATE USER权限
-- 解决方法:使用有足够权限的用户(如root)登录-- 错误3:密码策略不符合要求
-- 查看密码策略
SHOW VARIABLES LIKE 'validate_password%';-- 创建符合密码策略的用户
CREATE USER 'strong_user'@'localhost' IDENTIFIED BY 'StrongPass123!';

7.3 删除用户

基本语法
-- 基本语法
DROP USER '用户名'@'主机名';-- 删除多个用户
DROP USER '用户1'@'主机1', '用户2'@'主机2';-- 安全删除(如果用户不存在会报错)
DROP USER IF EXISTS '用户名'@'主机名';
删除用户案例
-- 示例1:删除单个用户
DROP USER 'test_user'@'localhost';-- 示例2:删除多个用户
DROP USER 'user1'@'localhost', 'user2'@'%';-- 示例3:安全删除用户
DROP USER IF EXISTS 'maybe_not_exist'@'localhost';-- 示例4:删除所有测试用户
-- 先查询要删除的用户
SELECT CONCAT('DROP USER ''', User, '''@''', Host, ''';') AS drop_command
FROM mysql.user 
WHERE User LIKE 'test_%';-- 执行生成的删除命令
DROP USER 'test_user1'@'localhost';
DROP USER 'test_user2'@'%';-- 验证用户删除成功
SELECT Host, User FROM mysql.user WHERE User LIKE 'test_%';

7.4 修改用户密码

基本语法
-- 使用ALTER USER(推荐mysql5.7+)
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';-- 使用SET PASSWORD
SET PASSWORD FOR '用户名'@'主机名' = '新密码';-- 修改当前用户密码
SET PASSWORD = '新密码';
使用PASSWORD()函数的注意事项
-- MySQL5.7以及以下版本(不推荐,已过时)
SET PASSWORD FOR 'user'@'host' = PASSWORD('新密码');-- MySQL8+以上推荐
ALTER USER 'user'@'host' IDENTIFIED BY '新密码';
修改用户密码示例
-- 示例1:root用户修改其他用户密码
ALTER USER 'app_user'@'%' IDENTIFIED BY 'new_strong_password123!';-- 示例2:用户修改自己的密码
ALTER USER USER() IDENTIFIED BY 'my_new_password123!';-- 示例3:修改密码并设置过期策略
ALTER USER 'temp_user'@'localhost' 
IDENTIFIED BY 'temp_password123!' 
PASSWORD EXPIRE INTERVAL 30 DAY;-- 示例4:强制用户下次登录时修改密码
ALTER USER 'new_employee'@'%' 
IDENTIFIED BY 'initial_password123!' 
PASSWORD EXPIRE;-- 示例5:批量修改密码(生成SQL语句)
SELECT CONCAT('ALTER USER ''', User, '''@''', Host, ''' IDENTIFIED BY ''new_password_', User, ''';') AS alter_command
FROM mysql.user 
WHERE User LIKE 'temp_%';-- 验证密码修改(通过重新登录测试)
-- mysql -u app_user -p -h localhost

7.5 权限管理

-- 授予所有权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';-- 授予特定权限
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.table_name TO 'username'@'localhost';-- 授予创建权限
GRANT CREATE, DROP ON database_name.* TO 'username'@'localhost';-- 查看用户权限
SHOW GRANTS FOR 'username'@'localhost';
SHOW GRANTS FOR CURRENT_USER();-- 撤销权限
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';
REVOKE SELECT ON database_name.table_name FROM 'username'@'localhost';-- 刷新权限表
FLUSH PRIVILEGES;

7.6 常用权限类型

权限说明
ALL PRIVILEGES所有权限
SELECT查询权限
INSERT插入权限
UPDATE更新权限
DELETE删除权限
CREATE创建数据库/表权限
DROP删除数据库/表权限
ALTER修改表结构权限
INDEX创建/删除索引权限
GRANT OPTION授权权限

8. 常用函数

8.1 字符串函数

-- 连接字符串
SELECT CONCAT('Hello', ' ', 'World');
SELECT CONCAT_WS('-', '2023', '12', '25');  -- 使用分隔符连接-- 字符串长度
SELECT LENGTH('Hello World');               -- 字节长度
SELECT CHAR_LENGTH('Hello World');          -- 字符长度-- 大小写转换
SELECT UPPER('hello'), LOWER('WORLD');-- 截取字符串
SELECT SUBSTRING('Hello World', 1, 5);      -- 从位置1开始取5个字符
SELECT LEFT('Hello World', 5);              -- 从左边取5个字符
SELECT RIGHT('Hello World', 5);             -- 从右边取5个字符-- 去除空格
SELECT TRIM('  Hello World  ');
SELECT LTRIM('  Hello World  ');            -- 去除左边空格
SELECT RTRIM('  Hello World  ');            -- 去除右边空格-- 替换字符串
SELECT REPLACE('Hello World', 'World', 'MySQL');-- 查找字符串位置
SELECT LOCATE('World', 'Hello World');-- 重复字符串
SELECT REPEAT('Hello', 3);

8.2 数值函数

-- 绝对值和四舍五入
SELECT ABS(-5), ROUND(3.14159, 2);-- 向上和向下取整
SELECT CEIL(3.2), FLOOR(3.8);-- 随机数
SELECT RAND();
SELECT RAND(1);                             -- 使用种子的随机数-- 数学函数
SELECT SQRT(16), POWER(2, 3);               -- 平方根,幂运算
SELECT MOD(10, 3);                          -- 取余-- 最大最小值
SELECT GREATEST(1, 5, 3), LEAST(1, 5, 3);

8.3 日期时间函数

-- 获取当前时间
SELECT NOW(), CURDATE(), CURTIME();
SELECT CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME;-- 格式化日期
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日');-- 提取日期部分
SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW());
SELECT HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
SELECT DAYOFWEEK(NOW()), DAYOFYEAR(NOW());-- 日期计算
SELECT DATE_ADD(NOW(), INTERVAL 1 DAY);
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH);
SELECT DATE_ADD(NOW(), INTERVAL -1 YEAR);
SELECT DATE_SUB(NOW(), INTERVAL 1 WEEK);-- 日期差值
SELECT DATEDIFF('2023-12-25', '2023-01-01');
SELECT TIMESTAMPDIFF(YEAR, '1990-01-01', NOW());-- 时间戳转换
SELECT UNIX_TIMESTAMP(NOW());
SELECT FROM_UNIXTIME(1640995200);

8.4 条件函数

-- IF函数
SELECT username, IF(age >= 18, '成年', '未成年') as status FROM users;-- CASE语句
SELECT username,CASE WHEN age < 18 THEN '未成年'WHEN age BETWEEN 18 AND 65 THEN '成年'ELSE '老年'END as age_group
FROM users;-- COALESCE函数(返回第一个非NULL值)
SELECT username, COALESCE(phone, email, '无联系方式') as contact FROM users;-- NULLIF函数
SELECT NULLIF(age, 0) FROM users;           -- 如果age=0则返回NULL

8.5 聚合函数

-- 基本聚合
SELECT COUNT(*), COUNT(phone) FROM users;   -- 总数,非空phone数
SELECT SUM(age), AVG(age) FROM users;       -- 总和,平均值
SELECT MAX(age), MIN(age) FROM users;       -- 最大值,最小值-- 分组聚合
SELECT department, COUNT(*), AVG(salary)
FROM employees
GROUP BY department;-- 字符串聚合 (MySQL 5.7+)
SELECT department, GROUP_CONCAT(name) as employees
FROM employees
GROUP BY department;

9. 事务处理

9.1 事务基础

-- 开始事务
START TRANSACTION;
-- 或者
BEGIN;-- 提交事务
COMMIT;-- 回滚事务
ROLLBACK;

9.2 事务示例

-- 转账示例
START TRANSACTION;-- 检查账户余额
SELECT balance FROM accounts WHERE account_id = 1;-- 扣除转出账户金额
UPDATE accounts SET balance = balance - 1000 WHERE account_id = 1;-- 增加转入账户金额
UPDATE accounts SET balance = balance + 1000 WHERE account_id = 2;-- 如果一切正常,提交事务
COMMIT;-- 如果出现错误,回滚事务
-- ROLLBACK;

9.3 保存点 (Savepoint)

START TRANSACTION;INSERT INTO users (username, email) VALUES ('user1', 'user1@example.com');-- 设置保存点
SAVEPOINT sp1;INSERT INTO users (username, email) VALUES ('user2', 'user2@example.com');-- 回滚到保存点
ROLLBACK TO SAVEPOINT sp1;-- 释放保存点
RELEASE SAVEPOINT sp1;COMMIT;

9.4 事务隔离级别

-- 查看当前隔离级别
SELECT @@transaction_isolation;-- 设置隔离级别
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;-- 设置全局隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;

10. 备份和恢复

10.1 使用 mysqldump 备份

# 备份单个数据库
mysqldump -u username -p database_name > backup.sql# 备份多个数据库
mysqldump -u username -p --databases db1 db2 db3 > backup.sql# 备份所有数据库
mysqldump -u username -p --all-databases > all_backup.sql# 只备份表结构
mysqldump -u username -p --no-data database_name > structure.sql# 只备份数据
mysqldump -u username -p --no-create-info database_name > data.sql# 备份特定表
mysqldump -u username -p database_name table1 table2 > tables_backup.sql# 压缩备份
mysqldump -u username -p database_name | gzip > backup.sql.gz

10.2 恢复数据库

# 恢复数据库
mysql -u username -p database_name < backup.sql# 恢复压缩备份
gunzip < backup.sql.gz | mysql -u username -p database_name# 创建数据库并恢复
mysql -u username -p -e "CREATE DATABASE new_database;"
mysql -u username -p new_database < backup.sql

10.3 二进制日志备份

-- 查看二进制日志状态
SHOW MASTER STATUS;-- 查看二进制日志列表
SHOW BINARY LOGS;-- 刷新日志
FLUSH LOGS;
# 使用mysqlbinlog恢复
mysqlbinlog mysql-bin.000001 | mysql -u username -p database_name

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96415.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96415.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96415.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux: config: CONFIG_CHECKPOINT_RESTORE;CRIU

文章目录 config CHECKPOINT_RESTORE commit related 简介 参考 如何使用 Checkpoint/Restore 功能 步骤 1:确保内核支持 步骤 2:安装 CRIU 步骤 3:检查点(Checkpoint) 步骤 4:恢复(Restore) 步骤 5:验证 常见应用场景 注意事项 python config CHECKPOINT_RESTORE bo…

eclipse怎么把项目设为web

在 Eclipse 中将一个项目设置为 Web 项目&#xff08;或称动态 Web 项目&#xff09;主要有两种场景&#xff1a;​创建新的 Web 项目​ 和 ​将现有项目转换为 Web 项目。我将为你详细讲解这两种方法。前提条件&#xff1a;确保你有必要的 Eclipse 组件在开始之前&#xff0c;…

CVPR 2025|基于视觉语言模型的零样本3D视觉定位

论文信息题目&#xff1a;Zero-Shot 3D Visual Grounding from Vision-Language Models基于视觉语言模型的零样本3D视觉定位作者&#xff1a;Rong Li, Shijie Li, Lingdong Kong, Xulei Yang, Junwei Liang论文创新点提出全新框架&#xff1a;论文提出SeeGround这一无需训练的零…

Realtime API 语音代理端到端接入全流程教程(含 Demo,延迟 280ms)

在现代应用中&#xff0c;实时语音交互已经成为重要功能&#xff0c;而低延迟的语音传输更是用户体验的关键指标。本文将详细介绍如何使用 Realtime API 实现 语音代理 的端到端接入&#xff0c;包括环境搭建、接口调用、低延迟优化及 Demo 演示。通过本教程&#xff0c;开发者…

AI赋能办公:用Python解决发票合并打印难题

一、问题的提出今天网友提问&#xff1a;报销时&#xff0c;财务要求要把发票合并打印&#xff0c;即两张合成一张放在A4纸上&#xff0c;中间还要加一道黑色分界线&#xff0c;如何快速完成数十张发票的打印&#xff1f;问题的提出二、问题分析这个问题可以采用两种方法解决&a…

Shell编程之正则表达式与文本处理工具

一、正则表达式基础1. 正则表达式概述​定义​&#xff1a;正则表达式&#xff08;Regular Expression&#xff0c;简称Regex&#xff09;是由普通字符​&#xff08;如字母、数字、标点符号&#xff09;与元字符​&#xff08;具有特殊含义的专用字符&#xff09;组成的字符串…

使用 Spring AI Alibaba Graph 实现工作流

1 依赖<dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId><version>1.0.0.2</version> </dependency><dependency><groupId>com.alibaba.cloud.…

碰一碰系统源码于小程序打通技术开发整合方案,驱动AI技术开发源代码

碰一碰系统结合小程序开发数据互通&#xff0c;驱动AI技术开发源代码碰一碰系统作为门店获客技术落地的核心载体&#xff0c;已从标准化产品向实体店定制演进。本文从源码d的形式出发&#xff0c;解析企业级数字人分身系统的交互系统&#xff0c;为技术团队提供可落地的开发指南…

深度学习——自然语言处理NLP

自然语言处理中的词向量技术演进与实践一、传统统计语言模型的困境与突破1.1 统计语言模型的局限性早期NLP主要依赖统计语言模型&#xff0c;如n-gram模型&#xff0c;通过统计词序列的频率来预测语言概率。这类模型存在两个根本缺陷&#xff1a;早期统计语言模型的局限性1. 维…

uni-app头像叠加显示

展示代码<view class"bmBox"><view class"bmLeft">已报名&#xff1a;<text class"blueColor">10人</text></view><view class"bmRight dflex"><view class"avatarList"><ima…

私有化部署Ragflow的预训练模型

部署ragflow代码库中的det.onnx模型&#xff08;通常是目标检测或文档结构解析类模型&#xff0c;如版面分析模型&#xff09;到火山云&#xff0c;需基于ONNX Runtime推理框架&#xff0c;结合火山云的计算资源和服务能力实现。以下是具体步骤&#xff1a; 一、模型特性与依赖…

go中的singleflight是如何实现的?

大家周四快乐&#xff0c;今天分享粉丝投稿的面经。 内容整理如下&#xff1a;go go singleflight 的底层实现 singleflight 是 Go 语言标准库中的一个很有用的包&#xff0c;它主要用来处理并发请求时的重复问题。比如在高并发场景下&#xff0c;如果多个请求同时访问同一个资…

【开关电源篇】整流及其滤波电路的工作原理和设计指南-超简单解读

开关电源之整流电路1. 什么是半波整流电路&#xff1f;1.1 电路结构与工作原理1.2 输出特性分析2. 全波整流电路如何工作&#xff1f;2.1 电路结构特点2.2 工作过程分析2.3 优缺点对比3. 桥式整流电路有什么优势&#xff1f;3.1 电路组成3.2 工作原理详解3.3 性能特点4. 什么是…

创建GLFW窗口,开启OpenGL之路

前言&#xff1a;本系列文章主要是一个学习笔记和总结&#xff0c;具体学习过程参考https://learnopengl-cn.github.io/这个网站的是学习OpenGL的一个很完美的新手教程。在这个部分系列中&#xff0c;我会以自己的理解详细描述每个函数、方法的使用&#xff0c;以及关键参数的解…

es通过分片迁移迁移解决磁盘不均匀问题

POST _cluster/reroute {"commands": [{"move": {"index": "xxx_detail","shard": 2,"from_node": "el8P9Ul","to_node": "4sDv-RD"}}] }查看迁移进程 GET _cat/shards?v查看磁盘…

c++打包pyd文件给Python使用调用函数

c打包pyd文件给Python使用调用函数C语言源码&#xff1a;simplemath.cpp代码&#xff1a;// // Created by ASFOR on 2025/9/11. // #include <pybind11/pybind11.h>namespace py pybind11;// 一个简单的加法函数 int add(int a, int b) {return a b; }// 一个简单的乘…

hadoop的api操作对象存储

一、获取文件或目录1. 获取某个目录下的文件// 必须的依赖 import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileSystem, LocatedFileStatus, Path, RemoteIterator}// 获取某个目录下的文件路径 def list_file(conf: Configuration, dir_path: Str…

《UE5_C++多人TPS完整教程》学习笔记52 ——《P53 FABRIK 算法(FABRIK IK)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P53 FABRIK 算法&#xff08;FABRIK IK&#xff09; 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Stephen …

HttpServletRequest vs ServletContext 全面解析

HttpServletRequest vs ServletContext 全面解析 一、 核心区别概览特性HttpServletRequest (请求对象)ServletContext (Servlet上下文/应用对象)作用域请求范围应用范围生命周期从客户端发出请求开始&#xff0c;到服务器返回响应结束。从Web应用启动&#xff08;部署&#xf…

Java后端工程师如何学AI

Java后端工程师如何学AI 目录 前言为什么Java后端工程师要学习AIAI学习路径规划基础知识体系实践项目建议学习资源推荐学习时间规划常见问题与解决方案职业发展建议总结 前言 随着人工智能技术的快速发展&#xff0c;AI已经不再是计算机科学专业的专属领域。作为Java后端工…