一、数据库操作
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;
假设有两个表 students
和 courses
,通过 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