本课程将深入浅出地讲解MySQL数据库的基本操作语法,涵盖数据查询、插入、更新及删除等核心内容,适合初学者快速掌握SQL语言基础。
MySQL提供了丰富的操作符与函数来处理数据库中的各种需求。下面将详细介绍其中的一些关键点:
### 事务处理
- **开始事务**:使用`start transaction;`命令启动一个新的事务。
- **提交事务**:通过执行`commit;`命令,可以确认并保存所有在当前事务中所做的更改。
- **回滚事务**:若要撤销未被提交的变更,可利用`rollback;`指令来实现这一操作。
### 语句块中的自动提交
可以在一个特定的操作序列(如更新表中的记录平均值)中使用`start transaction;`命令关闭自动提交模式。这样可以确保一系列相关操作要么全部成功完成并提交,要么在发生错误时回滚所有更改,从而保持数据的一致性。
### 事务的保存点与恢复
- **设置保存点**:通过执行`savepoint pointName;`创建一个可用来撤销后续变更的标记。
- **回到指定的保存点**:使用命令`rollback to savepoint pointName;`可以撤回所有在该保存点之后的操作,但保留之前的所有更改。
### 数据库隔离级别
MySQL允许设置事务处理中的不同隔离等级以控制并发操作的影响。这可以通过执行以下语句来实现:
```sql
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
```
### 注释与特殊字符
- **单行注释**:使用`#`或`-- `进行。
- **多行注释**:通过`/* ... */`来实现。
此外,MySQL还支持一些特殊的转义序列:
```sql
select hello / world!; -- 输出 hello/ world!
```
### 用户变量与存储过程
用户自定义的变量可通过设置语句创建,并用于执行复杂的数据库操作。例如:
```sql
set @num1 = 0, @result = 0;
@result := (@num1 := 5) + 3; -- 结果为8,同时将@num1设为5
create procedure get(out result int)
begin
select max(age) into result from temp;
end;
call get(@temp); -- 调用存储过程
select @temp; -- 查询结果
```
### 函数与游标使用示例
- **创建函数**:
```sql
create function addAge(age int) returns int return age + 5;
```
- **使用游标进行记录处理**:
```sql
CREATE PROCEDURE cur_show()
BEGIN
DECLARE done INT DEFAULT FALSE; -- 设置循环终止条件
DECLARE v_id, v_age INT;
DECLARE v_name VARCHAR(20);
-- 声明游标的查询语句与打开、关闭命令
OPEN cursor_temp;
REPEAT
FETCH cur_temp INTO v_id, v_name, v_age; -- 获取记录
IF NOT done THEN
IF isnull(v_name) THEN update temp set name = concat(test-json,v_id) where id=v_id;
ELSEIF isnull(v_age) THEN update temp set age=22 where id=v_id; END IF;
END IF;
UNTIL done
END REPEAT;
CLOSE cur_temp; -- 关闭游标
END
```
### 触发器的创建与使用
触发器用于在表上的数据发生特定操作时自动执行某些SQL语句。例如,当插入新记录到`temp`表中时,可以将该事件通过以下方式捕捉并处理:
```sql
CREATE TRIGGER trg_temp_ins BEFORE INSERT ON temp FOR EACH ROW
BEGIN
-- 插入日志信息
insert into temp_log values(NEW.id, NEW.name);
END;
```
以上是MySQL在事务管理、数据操作以及数据库对象创建等方面的一些基础和高级用法。