欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > #MySQL 语句大全(完整实用教程)

#MySQL 语句大全(完整实用教程)

2025/4/5 14:31:10 来源:https://blog.csdn.net/weixin_48668249/article/details/146981756  浏览:    关键词:#MySQL 语句大全(完整实用教程)

📌 MySQL 语句大全(完整实用教程)


📌 1. 数据库操作

✅ 创建数据库

CREATE DATABASE mydb;  -- 创建名为 mydb 的数据库

✅ 使用数据库

USE mydb;  -- 选择数据库

✅ 删除数据库

DROP DATABASE mydb;  -- 删除数据库(谨慎使用)

⚠️ 注意点:

  • 删除数据库会 丢失所有数据,操作前需备份!

📌 2. 表操作

✅ 创建表

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,  -- 自增主键name VARCHAR(50) NOT NULL,  -- 不能为空age INT DEFAULT 18,  -- 默认值 18email VARCHAR(100) UNIQUE  -- 唯一约束
);

✅ 查看表结构

DESC users;  -- 查看表的字段信息
SHOW CREATE TABLE users;  -- 查看完整建表语句

✅ 修改表

ALTER TABLE users ADD phone VARCHAR(20);  -- 添加新列
ALTER TABLE users MODIFY name VARCHAR(100);  -- 修改字段类型
ALTER TABLE users DROP COLUMN phone;  -- 删除列

✅ 删除表

DROP TABLE users;  -- 删除表(谨慎使用)

⚠️ 注意点:

  • DROP TABLE 不可恢复,需谨慎。
  • ALTER TABLE 可能 影响性能,大表操作前需测试。

📌 3. 数据操作(CRUD)

✅ 插入数据

INSERT INTO users (name, age, email) VALUES ('Alice', 25, 'alice@example.com');

✅ 批量插入数据

INSERT INTO users (name, age, email) VALUES('Bob', 30, 'bob@example.com'),('Charlie', 22, 'charlie@example.com');

✅ 查询数据

SELECT * FROM users;  -- 查询所有字段
SELECT name, age FROM users;  -- 查询指定字段
SELECT * FROM users WHERE age > 25;  -- 条件查询
SELECT * FROM users ORDER BY age DESC;  -- 按年龄降序排列
SELECT * FROM users LIMIT 5;  -- 取前 5 条记录

✅ 更新数据

UPDATE users SET age = 26 WHERE name = 'Alice';  -- 更新 Alice 的年龄

✅ 删除数据

DELETE FROM users WHERE name = 'Bob';  -- 删除 Bob

⚠️ 注意点:

  • DELETE 语句如果没有 WHERE,会删除整个表的数据
  • 可使用 LIMIT 限制删除的条数。

📌 4. 约束(Constraints)

✅ 主键约束

CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,order_number VARCHAR(20) NOT NULL UNIQUE
);

✅ 外键约束

CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);

⚠️ 注意点:

  • FOREIGN KEY 约束确保数据一致性,删除或更新数据时需注意级联操作

📌 5. 高级查询

✅ 聚合函数

SELECT COUNT(*) FROM users;  -- 统计总人数
SELECT AVG(age) FROM users;  -- 计算平均年龄
SELECT MAX(age), MIN(age) FROM users;  -- 查找最大、最小年龄

✅ 分组查询(GROUP BY)

SELECT age, COUNT(*) FROM users GROUP BY age;  -- 按年龄分组统计人数

✅ 连接查询(JOIN)

SELECT users.name, orders.order_number
FROM users
JOIN orders ON users.id = orders.user_id;

⚠️ 注意点:

  • JOIN 操作会影响性能,大数据量时需优化索引。

📌 6. 事务控制(Transactions)

✅ 开启事务

START TRANSACTION;

✅ 执行事务

UPDATE users SET age = 40 WHERE name = 'Alice';
COMMIT;  -- 提交事务

✅ 回滚事务

ROLLBACK;  -- 回滚到事务开始前

⚠️ 注意点:

  • 事务适用于 银行转账订单处理等操作,确保数据一致性。

📌 7. 索引(Indexes)

✅ 创建索引

CREATE INDEX idx_name ON users(name);  -- 创建索引

✅ 查看索引

SHOW INDEX FROM users;  -- 查看索引

✅ 删除索引

DROP INDEX idx_name ON users;

⚠️ 注意点:

  • 索引加速查询,但会降低写入速度,需平衡。

📌 8. 备份 & 恢复

✅ 备份数据库

mysqldump -u root -p mydb > mydb_backup.sql  # 备份数据库

✅ 恢复数据库

mysql -u root -p mydb < mydb_backup.sql  # 还原数据库

⚠️ 注意点:

  • 定期备份数据,避免数据丢失。

📌 9. 常见问题 & 解决方案

⚠️ 端口占用(3306 被占用)

netstat -tulnp | grep 3306  # 查看占用进程
kill -9 <PID>  # 终止进程

⚠️ root 用户无权限

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
FLUSH PRIVILEGES;


📌 触发器(Triggers)

🔹 什么是触发器?

触发器(Trigger)是一种特殊的存储过程,在对数据库表执行 INSERTUPDATEDELETE 操作时自动触发执行。用于 数据验证、日志记录、自动更新等

✅ 创建触发器(案例)

CREATE TRIGGER before_insert_users
BEFORE INSERT ON users
FOR EACH ROW
SET NEW.name = UPPER(NEW.name);

📌 说明:

  • 该触发器在 users 表执行 INSERT 语句之前触发,
  • 将新插入的 name 字段转换为大写。

✅ 删除触发器

DROP TRIGGER IF EXISTS before_insert_users;

⚠️ 注意点:

  • 触发器不能被 ALTER 修改,如需修改,需先 DROPCREATE
  • 触发器执行过程中不能直接修改同一个表的数据,否则会引发递归调用。

📌 存储过程(Stored Procedures)

🔹 什么是存储过程?

存储过程(Stored Procedure)是一组预编译的 SQL 语句集合,封装一系列数据库操作,提高执行效率并减少代码重复。

✅ 创建存储过程(案例)

DELIMITER $$
CREATE PROCEDURE GetUserCount()
BEGINSELECT COUNT(*) FROM users;
END $$
DELIMITER ;

📌 说明:

  • DELIMITER $$ 用于改变默认的 ; 结束符,防止 CREATE PROCEDURE 语句因 ; 过早终止。
  • GetUserCount 存储过程用于统计 users 表的总记录数。

✅ 调用存储过程

CALL GetUserCount();

✅ 删除存储过程

DROP PROCEDURE IF EXISTS GetUserCount;

⚠️ 注意点:

  • 存储过程适用于 重复执行的复杂 SQL 操作,如报表查询、数据批量更新等。
  • 存储过程可接收 输入参数 并返回 输出参数

📌 游标(Cursors)

🔹 什么是游标?

游标(Cursor)用于 遍历查询结果集,通常用于存储过程中的批量数据处理。

✅ 声明游标

DECLARE cur CURSOR FOR SELECT name FROM users;

✅ 使用游标(案例)

DELIMITER $$
CREATE PROCEDURE PrintAllUserNames()
BEGINDECLARE done INT DEFAULT 0;DECLARE username VARCHAR(255);DECLARE cur CURSOR FOR SELECT name FROM users;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;OPEN cur;FETCH cur INTO username;WHILE done = 0 DO-- 这里可以对 username 进行进一步处理SELECT username;FETCH cur INTO username;END WHILE;CLOSE cur;
END $$
DELIMITER ;

📌 说明:

  • DECLARE cur CURSOR FOR 声明游标,指定查询语句。
  • OPEN cur; 打开游标。
  • FETCH cur INTO username; 获取一行数据。
  • CLOSE cur; 关闭游标。

✅ 调用游标

CALL PrintAllUserNames();

⚠️ 注意点:

  • 使用 DECLARE CONTINUE HANDLER 捕获游标遍历结束时的 NOT FOUND 事件。
  • WHILE done = 0 DO 循环执行 FETCH 语句,直到数据全部遍历完毕。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词