事务
Mysql 的事务是由一系列的 SQL 指令所构成的逻辑处理单元,这些指令要么全部执行,要么全部不执行,可以使用 COMMIT 或 ROLLBACK 指令来结束一个事务。
Mysql 中事务的 ACID 特性:
- 原子性(Atomicity),事务中的所有操作要么全部执行成功,要么全部回滚。
- 一致性(Consistency),事务必须使所有的数据都保持一致的状态。
- 隔离性(Isolation),事务执行时其他事务是不知道的,在并发环境中,同一时间只有一个事务被允许对某一数据进行修改。
- 持久性(Durability),事务一旦提交,它对数据库中数据的改动就应该是永久性的。即使系统崩溃等故障情况,数据也不应该丢失。
在 Mysql 中,使用 BEGIN、COMMIT 和 ROLLBACK 开始和结束一个事务,事务的执行过程中如果发生错误,可以使用 ROLLBACK 将操作回滚到事务开始之前的原始状态。如果事务执行成功,可以使用 COMMIT 将操作修改的数据永久性的存储在数据库中。
视图
就是把一次查询的结果当作临时的表, 简化复杂的查询
举一个例子,假设我们有一个students表,表格结构如下:
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(11) | NO | PRI | NULL | auto_increment |
name | varchar(255) | NO | NULL | ||
age | int(11) | NO | NULL | ||
gender | varchar(255) | NO | NULL | ||
class | varchar(255) | NO | NULL | ||
create_at | timestamp | NO | NULL | ||
update_at | timestamp | NO | NULL |
我们可以通过以下 SQL 语句创建一个根据条件查询年龄大于等于18岁的学生的视图:
CREATE VIEW adult_students AS
SELECT id, name, age, gender, class
FROM students
WHERE age >= 18;
现在我们可以像查询表格一样查询这个视图,例如执行以下查询语句:
SELECT * FROM adult_students;
索引
Mysql的索引主要有以下几种:
- 唯一索引(Unique Index): 限制该列的数据必须唯一,可以是NULL值,一个表可以有多个唯一索引。
- 主键索引(Primary Key Index): 主键索引是一种特殊的唯一索引,不允许有NULL值,每个表只能有一个主键索引。
- 普通索引(Normal Index):普通索引没有任何限制,一个表可以有多个普通索引。
- 全文索引(Fulltext Index):全文索引专门用来创建全文索引,所谓全文索引就是对CHAR、VARCHAR以及TEXT字段进行全文检索。
索引的作用是提高查询效率。建立索引后,查询语句的执行流程变成先在索引树中搜索对应的值,然后再到数据表中查询对应的数据。
举例来说,假设有一张名为student的表,里面有学生的信息,包括姓名、年龄、性别等。如果要查询所有年龄为18岁的学生,就可以在age字段上建立一个普通索引。如果没有建立索引会从表中所有数据中根据条件查找年龄为18岁的学生,这个操作会比较耗时。
建立索引的缺点是会增加插入、修改、删除操作的时间,因为每次对数据进行修改都要维护一次索引。
综上所述,建立索引可以提高查询效率,但需要权衡插入、修改、删除效率的损失。根据实际情况,可以针对不同的查询场景建立不同的索引,以提高查询性能。
索引会建立单独的表, 索引值对应原始数据行. 减少查询的数据读取开销, 提高查询效率.
外键
外键是关系型数据库中的一种重要的约束。它用来建立两个表之间的链接,并保证参照完整性。在 MySQL 中,可以使用 FOREIGN KEY 关键字来创建外键。
下面是一个 MySQL 中的外键举例:
假设有两个表:Person 和 Order,每个人可以对应多个订单,每个订单只能由一个人创建。Person 表中有一个主键 person_id(人员 ID),而 Order 表中有一个外键 person_id,它指向 Person 表中的 person_id。
创建 Person 表:
CREATE TABLE Person (
person_id INT PRIMARY KEY,
name VARCHAR(20),
age INT
);
创建 Order 表:
CREATE TABLE Order (
order_id INT PRIMARY KEY,
person_id INT,
product_name VARCHAR(30),
FOREIGN KEY (person_id) REFERENCES Person(person_id)
);
通过这种方式,我们可以定义一个 Person 和 Order 之间的联系,并保证参照完整性。当尝试删除 Person 表中具有关联的行时,就会受到限制。
外键不仅可以保证参照完整性,还可以优化查询效率。比如在上述例子中,如果不建立外键约束,每次查询 Order 表时都需要和 Person 表进行 join 操作,而建立外键后,查询效率可以提高。
JOIN 和 UNION
MySQL的JOIN和UNION是用来查询数据库中的数据的常用语句。JOIN用于将多个表中的数据链接在一起,而UNION则可以将两个或多个查询的结果合并在一起。
JOIN可以分为以下几种类型:
- INNER JOIN(内连接):它只返回两张表中共有的值,即两张表都存在的行。
- LEFT JOIN(左连接):它返回包括左表中所有的行以及右表中存在的行。
- RIGHT JOIN(右连接):它返回包括右表中所有的行以及左表中存在的行。
- FULL OUTER JOIN(全连接):它返回所有符合条件的行,即包括两个表中所有的行。
UNION将两个或多个SELECT语句的结果集合并在一起,合并的结果中包括的行数等于各个查询的结果集中包含的行数之和。需要注意的是,UNION仅能够使用在每个SELECT语句的返回列是相互兼容的情况下。
举一个简单的例子,如果有服务表和客户表,其中服务表包含服务员的姓名和服务的时间,客户表包含客户的姓名和电话号码。如果需要查询所有的服务信息和客户信息,可以使用以下SQL语句:
SELECT s.name AS server_name, s.service_time, c.name AS customer_name, c.phone_number
FROM server AS s
LEFT JOIN customer AS c
ON s.name = c.name;
使用LEFT JOIN是因为服务表中的服务员都需要列出,但不一定每个服务记录都对应着客户的记录。如果不使用JOIN,查询结果将由两个独立的结果集组成,需要手动合并结果。
如果没有使用索引,则查询将需要扫描整个表,而使用了索引,则可以更快地定位到需要的数据,提高查询的速度和效率。
标签:JOIN,name,Person,基础,查询,索引,内容,MySQL,id From: https://www.cnblogs.com/livebz/p/17401446.html