mysql数据库SQL语句大全详解(下)

六、事务管理

1、开始事务

sql 复制代码
START TRANSACTION;

2、提交事务

sql 复制代码
COMMIT;

3、回滚事务

sql 复制代码
ROLLBACK;

4、保存点

设置保存点:

sql 复制代码
SAVEPOINT savepoint_name;

回滚到保存点:

sql 复制代码
ROLLBACK TO SAVEPOINT savepoint_name;

七、视图

1、创建视图

sql 复制代码
CREATE VIEW view_name AS SELECT columns FROM table WHERE condition;

示例:

sql 复制代码
CREATE VIEW user_emails AS SELECT username, email FROM users;

2、查询视图

sql 复制代码
SELECT * FROM view_name;

3、删除视图

sql 复制代码
DROP VIEW view_name;

八、存储过程和函数

1、创建存储过程

sql 复制代码
CREATE PROCEDURE procedure_name (parameters)
BEGIN
    SQL statements;
END;

示例:

sql 复制代码
CREATE PROCEDURE GetUserEmails()
BEGIN
    SELECT username, email FROM users;
END;

2、调用存储过程

sql 复制代码
CALL procedure_name(parameters);

3、创建函数

sql 复制代码
CREATE FUNCTION function_name (parameters) RETURNS datatype
BEGIN
    SQL statements;
    RETURN value;
END;

示例:

sql 复制代码
CREATE FUNCTION GetUserCount() RETURNS INT
BEGIN
    DECLARE count INT;
    SELECT COUNT(*) INTO count FROM users;
    RETURN count;
END;

4、调用函数

sql 复制代码
SELECT function_name(parameters);

九、触发器

1、创建触发器

sql 复制代码
CREATE TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE ON table_name
FOR EACH ROW
BEGIN
    SQL statements;
END;

示例:

sql 复制代码
CREATE TRIGGER before_insert_user BEFORE INSERT ON users
FOR EACH ROW
BEGIN
    SET NEW.created_at = NOW();
END;

2、删除触发器

sql 复制代码
DROP TRIGGER trigger_name;

十、用户和权限管理

1、创建用户

sql 复制代码
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

2、删除用户

sql 复制代码
DROP USER 'username'@'host';

3、授予权限

sql 复制代码
GRANT privileges ON database.table TO 'username'@'host';

示例:

sql 复制代码
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'username'@'localhost';

4、撤销权限

sql 复制代码
REVOKE privileges ON database.table FROM 'username'@'host';

示例:

sql 复制代码
REVOKE INSERT, UPDATE ON mydb.* FROM 'username'@'localhost';

5、刷新权限

sql 复制代码
FLUSH PRIVILEGES;

在对用户权限进行修改后,刷新MySQL的权限缓存以确保更改生效。

十一、备份与恢复

1、备份数据库

使用 mysqldump 命令可以备份整个数据库或单个表。

sql 复制代码
mysqldump -u username -p database_name > backup_file.sql

示例:

sql 复制代码
mysqldump -u root -p mydb > mydb_backup.sql

2、恢复数据库

使用 mysql 命令可以从备份文件恢复数据库。

sql 复制代码
mysql -u username -p database_name < backup_file.sql

示例:

sql 复制代码
mysql -u root -p mydb < mydb_backup.sql

十二、优化和性能

1、查询性能分析

使用 EXPLAIN 语句分析查询性能。

sql 复制代码
EXPLAIN SELECT * FROM table_name WHERE condition;

2、优化表

sql 复制代码
OPTIMIZE TABLE table_name;

3、更新表统计信息

sql 复制代码
ANALYZE TABLE table_name;

4、缓存查询结果

​​​​​​​ 配置 query_cache 参数来缓存查询结果,提高查询性能。

sql 复制代码
SET GLOBAL query_cache_size = value;
SET GLOBAL query_cache_type = ON;

十三、安全和备份策略

1、数据加密

加密连接:配置MySQL使用SSL/TLS进行客户端与服务器之间的加密通信。

加密数据:使用MySQL的原生加密函数,如 AES_ENCRYPT()AES_DECRYPT() 进行数据加密。

2、备份策略

定期备份:设置定期备份策略,确保数据的定期备份。

异地备份:将备份文件存储在异地,以防止物理灾害。

3、访问控制

最小权限原则:只授予用户所需的最小权限。

审计日志:开启审计日志,记录用户的所有操作。

十四、常用函数和操作符

bash 复制代码
1、字符串函数:
CONCAT(str1, str2, ...):连接字符串。
UPPER(str):转换为大写。
LOWER(str):转换为小写。
SUBSTRING(str, pos, len):提取子字符串。

2、日期和时间函数:
NOW():当前日期和时间。
CURDATE():当前日期。
DATE_ADD(date, INTERVAL value unit):日期加上时间间隔。
DATEDIFF(date1, date2):计算两个日期之间的天数。

3、数学函数
ABS(x):绝对值。
CEIL(x):向上取整。
FLOOR(x):向下取整。
ROUND(x, d):四舍五入到d位小数。

4、聚合函数:
COUNT(column):计算列的数量。
SUM(column):计算列的总和。
AVG(column):计算列的平均值。
MAX(column):计算列的最大值。
MIN(column):计算列的最小值。


5、逻辑和比较操作符:
=:等于。
<> 或 !=:不等于。
>:大于。
<:小于。
>=:大于或等于。
<=:小于或等于。
AND:逻辑与。
OR:逻辑或。
NOT:逻辑非。

十五、示例综合应用

以下是一个综合示例,展示了如何创建数据库、表、插入数据、查询、更新和删除数据,以及创建视图、存储过程和触发器。

sql 复制代码
-- 创建数据库
CREATE DATABASE company;

-- 选择数据库
USE company;

-- 创建员工表
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    position VARCHAR(50),
    salary DECIMAL(10, 2),
    hire_date DATE
);

-- 插入数据
INSERT INTO employees (name, position, salary, hire_date)
VALUES ('Alice', 'Manager', 75000, '2020-01-15'),
       ('Bob', 'Developer', 60000, '2019-03-22'),
       ('Charlie', 'Analyst', 55000, '2021-07-11');

-- 查询数据
SELECT * FROM employees;

-- 更新数据
UPDATE employees SET salary = 65000 WHERE name = 'Bob';

-- 删除数据
DELETE FROM employees WHERE name = 'Charlie';

-- 创建视图
CREATE VIEW manager_view AS
SELECT name, salary FROM employees WHERE position = 'Manager';

-- 查询视图
SELECT * FROM manager_view;

-- 创建存储过程
CREATE PROCEDURE RaiseSalary(IN employee_id INT, IN increase DECIMAL(10, 2))
BEGIN
    UPDATE employees SET salary = salary + increase WHERE id = employee_id;
END;

-- 调用存储过程
CALL RaiseSalary(2, 5000);

-- 创建触发器
CREATE TRIGGER before_insert_employee
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
    SET NEW.hire_date = IFNULL(NEW.hire_date, CURDATE());
END;
相关推荐
一勺菠萝丶10 分钟前
MongoDB 常用操作指南(Docker 环境下)
数据库·mongodb·docker
lucky_syq1 小时前
Hive SQL和Spark SQL的区别?
hive·sql·spark
m0_748244831 小时前
StarRocks 排查单副本表
大数据·数据库·python
C++忠实粉丝1 小时前
Redis 介绍和安装
数据库·redis·缓存
wmd131643067121 小时前
将微信配置信息存到数据库并进行调用
数据库·微信
是阿建吖!2 小时前
【Linux】基础IO(磁盘文件)
linux·服务器·数据库
凡人的AI工具箱2 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
ClouGence2 小时前
Redis 到 Redis 数据迁移同步
数据库·redis·缓存
m0_748236582 小时前
《Web 应用项目开发:从构思到上线的全过程》
服务器·前端·数据库
苏三说技术2 小时前
Redis 性能优化的18招
数据库·redis·性能优化