MySQL 数据库经验总结

一、数据库操作

1. 创建数据库

sql 复制代码
CREATE DATABASE database_name;

例如,创建一个名为 my_database 的数据库:

sql 复制代码
CREATE DATABASE my_database;

2. 选择数据库

sql 复制代码
USE database_name;

要使用刚才创建的 my_database 数据库:

sql 复制代码
USE my_database;

3. 删除数据库

sql 复制代码
DROP DATABASE database_name;

请注意,删除数据库是不可逆的操作,需谨慎使用。

二、表操作

1. 创建表

sql 复制代码
CREATE TABLE table_name (
    column1 data_type,
    column2 data_type,
   ...
);

例如,创建一个名为 students 的表,包含 id(整数,自增主键)、name(字符串,最大长度 50)和 age(整数)列:

sql 复制代码
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT
);

2. 查看表结构

sql 复制代码
DESCRIBE table_name;

sql 复制代码
SHOW CREATE TABLE table_name;

3. 删除表

sql 复制代码
DROP TABLE table_name;

三、数据插入

1. 插入单行数据

sql 复制代码
INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...);

students 表插入一条学生数据:

sql 复制代码
INSERT INTO students (name, age) VALUES ('Alice', 20);

2. 插入多行数据

sql 复制代码
INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,...),
       (value3, value4,...),
      ...;

例如:

sql 复制代码
INSERT INTO students (name, age)
VALUES ('Bob', 21),
       ('Charlie', 19);

四、数据查询

1. 基本查询

sql 复制代码
SELECT column1, column2,... FROM table_name;

例如,从 students 表中选择所有学生的姓名和年龄:

sql 复制代码
SELECT name, age FROM students;

2. 条件查询

sql 复制代码
SELECT column1, column2,... FROM table_name WHERE condition;

查询年龄大于 18 岁的学生:

sql 复制代码
SELECT * FROM students WHERE age > 18;

3. 排序结果

sql 复制代码
SELECT column1, column2,... FROM table_name ORDER BY column_name ASC|DESC;

按年龄升序排列学生数据:

sql 复制代码
SELECT * FROM students ORDER BY age ASC;

按年龄降序排列:

sql 复制代码
SELECT * FROM students ORDER BY age DESC;

4. 限制结果行数

sql 复制代码
SELECT column1, column2,... FROM table_name LIMIT offset, row_count;

获取前 10 条学生记录:

sql 复制代码
SELECT * FROM students LIMIT 0, 10;

获取第 11 到 20 条记录:

sql 复制代码
SELECT * FROM students LIMIT 10, 10;

5. 聚合函数

sql 复制代码
SELECT COUNT(column_name), SUM(column_name), AVG(column_name), MIN(column_name), MAX(column_name) FROM table_name;

例如,计算学生的总数、年龄总和、平均年龄、最小年龄和最大年龄:

sql 复制代码
SELECT COUNT(*), SUM(age), AVG(age), MIN(age), MAX(age) FROM students;

6. 分组查询

sql 复制代码
SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;

按照年龄分组,计算每个年龄组的学生数量:

sql 复制代码
SELECT age, COUNT(*) FROM students GROUP BY age;

7. 连接查询

sql 复制代码
-- 内连接(INNER JOIN)
SELECT column1, column2,... FROM table1 INNER JOIN table2 ON table1.column = table2.column;

-- 左连接(LEFT JOIN)
SELECT column1, column2,... FROM table1 LEFT JOIN table2 ON table1.column = table2.column;

-- 右连接(RIGHT JOIN)
SELECT column1, column2,... FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;

假设有两个表 studentscourses ,通过 student_id 关联,获取学生及其选修课程的信息:

sql 复制代码
SELECT s.name, c.course_name 
FROM students s 
INNER JOIN courses c ON s.student_id = c.student_id;

五、数据更新

sql 复制代码
UPDATE table_name SET column1 = value1, column2 = value2,... WHERE condition;

将学生 Alice 的年龄更新为 21 岁:

sql 复制代码
UPDATE students SET age = 21 WHERE name = 'Alice';

六、数据删除

sql 复制代码
DELETE FROM table_name WHERE condition;

删除年龄小于 18 岁的学生记录:

sql 复制代码
DELETE FROM students WHERE age < 18;

七、索引

索引是提高数据库查询性能的重要手段。

1. 创建普通索引

sql 复制代码
CREATE INDEX index_name ON table_name (column_name);

例如,为 students 表的 name 列创建索引:

sql 复制代码
CREATE INDEX idx_name ON students (name);

2. 创建唯一索引

sql 复制代码
CREATE UNIQUE INDEX index_name ON table_name (column_name);

确保某列的值唯一。

3. 查看索引

sql 复制代码
SHOW INDEX FROM table_name;

4. 删除索引

sql 复制代码
DROP INDEX index_name ON table_name;

八、存储过程和函数

1. 创建存储过程

sql 复制代码
DELIMITER //
CREATE PROCEDURE procedure_name(parameter_list)
BEGIN
    -- 存储过程的逻辑
END //
DELIMITER ;

例如,创建一个计算两个数之和的存储过程:

sql 复制代码
DELIMITER //
CREATE PROCEDURE add_numbers(num1 INT, num2 INT)
BEGIN
    SELECT num1 + num2 AS sum;
END //
DELIMITER ;

2. 调用存储过程

sql 复制代码
CALL procedure_name(parameter_values);

调用上述存储过程:

sql 复制代码
CALL add_numbers(5, 3);

3. 创建函数

sql 复制代码
DELIMITER //
CREATE FUNCTION function_name(parameter_list) RETURNS data_type
BEGIN
    -- 函数的逻辑
    RETURN result;
END //
DELIMITER ;

例如,创建一个返回字符串长度的函数:

sql 复制代码
DELIMITER //
CREATE FUNCTION str_length(str VARCHAR(255)) RETURNS INT
BEGIN
    RETURN CHAR_LENGTH(str);
END //
DELIMITER ;

4. 调用函数

sql 复制代码
SELECT function_name(parameter_values);

调用上述函数:

sql 复制代码
SELECT str_length('Hello');

九、事务

事务用于保证数据的一致性和完整性。

sql 复制代码
START TRANSACTION;
-- 一系列操作
COMMIT;  -- 提交事务
ROLLBACK;  -- 回滚事务

例如,在转账操作中确保数据的一致性:

sql 复制代码
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;

十、备份与恢复

1. 数据备份

可以使用 mysqldump 命令来备份数据库。

mysqldump -u username -p database_name > backup.sql

2. 数据恢复

使用以下命令从备份文件中恢复数据。

mysql -u username -p database_name < backup.sql
相关推荐
尘浮生14 分钟前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
偶尔。53516 分钟前
什么是事务?事务有哪些特性?
数据库·oracle
安迁岚18 分钟前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
xoxo-Rachel27 分钟前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
JH30731 小时前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介1 小时前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
冷心笑看丽美人1 小时前
Spring框架特性及包下载(Java EE 学习笔记04)
数据库
武子康2 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot
代码吐槽菌2 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
路有瑶台3 小时前
MySQL数据库学习(持续更新ing)
数据库·学习·mysql