mysql笔记
MySQL 笔记
增删改查
MySQL 中常用的增删改查语句如下:
插入数据
插入数据可以使用 INSERT INTO 语句,语法如下:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
其中,table_name 为表名,column1、column2、column3 等为列名,value1、value2、value3 等为对应列的值。
例如,向 students 表中插入一条记录:
INSERT INTO students (name, age, gender) VALUES ('Tom', 18, 'Male');
更新数据
更新数据可以使用 UPDATE 语句,语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
其中,table_name 为表名,column1、column2 等为列名,value1、value2 等为对应列的新值,condition 为更新条件。
例如,将 students 表中所有年龄大于 20 岁的学生的性别修改为 Female:
UPDATE students
SET gender = 'Female'
WHERE age > 20;
删除数据
删除数据可以使用 DELETE 语句,语法如下:
DELETE FROM table_name WHERE condition;
其中,table_name 为表名,condition 为删除条件。
例如,删除 students 表中所有性别为 Male 的学生记录:
DELETE FROM students WHERE gender = 'Male';
查询数据
查询数据可以使用 SELECT 语句,语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition;
其中,table_name 为表名,column1、column2 等为列名,condition 为查询条件。
例如,查询 students 表中所有年龄大于 18 岁的学生的姓名和性别:
SELECT name, gender FROM students WHERE age > 18;
事务
事务是指一组数据库操作,它们要么全部执行成功,要么全部执行失败。MySQL 中使用事务可以保证数据的一致性和完整性。
MySQL 中的事务是通过 ACID(原子性、一致性、隔离性、持久性)特性来实现的。在 MySQL 中,使用 BEGIN、COMMIT 和 ROLLBACK 语句来管理事务,例如:
BEGIN; -- 开始事务
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 提交事务
如果在事务执行过程中出现错误,可以使用 ROLLBACK 语句将事务回滚到原来的状态,例如:
BEGIN; -- 开始事务
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
-- 这里出现错误,事务回滚
ROLLBACK; -- 回滚事务
连接
连接是指将两个或更多表中的数据联合在一起,以便进行更复杂的查询和分析。在 MySQL 中,常见的连接方式有 INNER JOIN、LEFT JOIN 和 RIGHT JOIN。
INNER JOIN
INNER JOIN 是指只返回两个表中符合连接条件的记录。例如,连接 students 表和 scores 表,返回所有学生的成绩:
SELECT students.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id;
上面的语句将返回每个学生的姓名和成绩。
LEFT JOIN
LEFT JOIN 是指返回左表(左边的表)中所有记录和右表(右边的表)中符合连接条件的记录。如果右表中没有符合条件的记录,则返回 NULL。例如,连接 students 表和 scores 表,返回所有学生的成绩,如果学生没有成绩,则返回 NULL:
SELECT students.name, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id;
上面的语句将返回每个学生的姓名和成绩,如果学生没有成绩,则返回 NULL。
RIGHT JOIN
RIGHT JOIN 是指返回右表中所有记录和左表中符合连接条件的记录。如果左表中没有符合条件的记录,则返回 NULL。例如,连接 students 表和 scores 表,返回所有成绩和对应的学生姓名,如果学生没有姓名,则返回 NULL:
SELECT students.name, scores.score
FROM students
RIGHT JOIN scores ON students.id = scores.student_id;
上面的语句将返回每个成绩和对应的学生姓名,如果学生没有姓名,则返回 NULL。
索引
索引是一种数据结构,它可以提高数据库的查询效率。在 MySQL 中,常见的索引类型包括 B-tree 索引、哈希索引、全文索引等。
B-tree 索引
B-tree 索引是 MySQL 中最常用的索引类型。它可以对任何数据类型进行索引,包括字符串、日期、数字等。B-tree 索引可以在 O(log n) 的时间内查找到记录,效率比较高。
在 MySQL 中,可以使用 CREATE INDEX 语句创建 B-tree 索引,例如:
CREATE INDEX index_name ON table_name (column1, column2, ...);
其中,index_name 为索引名,table_name 为表名,column1、column2 等为列名。
哈希索引
哈希索引是一种使用哈希算法进行索引的数据结构。它适用于等值查询,但不适用于范围查询、模糊查询等。
在 MySQL 中,可以使用 CREATE INDEX 语句创建哈希索引,例如:
CREATE INDEX index_name ON table_name (column) USING HASH;
其中,index_name 为索引名,table_name 为表名,column 为列名。
全文索引
全文索引是一种针对文本数据进行索引的数据结构。它可以对字符串进行分词,并建立索引以便快速搜索。在 MySQL 中,可以使用 FULLTEXT 索引创建全文索引,例如:
CREATE FULLTEXT INDEX index_name ON table_name (column1, column2, ...);
其中,index_name 为索引名,table_name 为表名,column1、column2 等为列名。
存储引擎
存储引擎是 MySQL 中用来管理数据存储和检索的模块。不同的存储引擎有不同的特点和优缺点,可以根据实际情况选择合适的存储引擎。
常见的 MySQL 存储引擎包括 MyISAM、InnoDB、Memory 等。
MyISAM
MyISAM 是 MySQL 的默认存储引擎,它适用于读密集型应用,支持表级锁和全文索引,但不支持事务和行级锁。
InnoDB
InnoDB 是 MySQL 中功能最强大的存储引擎之一,适用于读写密集型应用。它支持事务、行级锁和外键约束等功能。
Memory
Memory 存储引擎是 MySQL 中用于处理临时数据的存储引擎,它将表存储在内存中,速度非常快,但数据不会持久化保存。
总结
MySQL 是一款功能强大的关系型数据库管理系统,它支持 SQL 语言,能够进行数据的增删改查等操作。除此之外,MySQL 还支持事务、连接、索引、存储引擎等高级特性,可以满足不同应用的需求。在使用 MySQL 时,应根据实际情况选择合适的存储引擎和索引类型,以提高数据库的效率和性能。