sql分类 DDL、DML、DCL,与 commit 、Rollback、事务
DDL (Data Definition Language 数据定义语言)
这些语句定了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构
如: CREATE \ DROP \ ALTER \ RENAME \ TRUNCATE 等
注意: mySQL 8.0 DDL有原子性 drop table ta1 ,ta2 ; 若 ta2删除失败,则ta1 会回滚的。
DML(Data Manipulation Language 数据操作语言 ) 使用批次高
用于 添加、删除、更新和查询数据库记录 CRUD
如: CRUD INSERT \ UPDATE \ DELETE \SELECT 增删改查
DCL(Data Control Language 数据控制语言)
用去定义数据库、表、字段、用户的访问权限和安全级别
如: GRANT \ REVOKE \ COMMIT \ROLLBACK \SAVAPOINT 等
COMMIT: 提交数据,一旦执行commit ,则数据就永久的保存再了数据库中,意味着数据不可以回滚
ROLLBACK:回滚数据,一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次commit之后。
SQL Server
begin transaction 事务1
insert into Table_1 values(0,'AAzen11');
save transaction tans_2 --定义一个事务的保存点、当要回滚事务时,可以回滚到这里
delete from Table_1
if @@ERROR >0
begin
commit transaction 事务1
print '0000'
end
else
begin
rollback transaction tans_2
commit transaction 事务1
print '111'
end
if (exists (select * from sys.objects where name = 'DoSome'))
drop proc DoSome
go
create proc DoSome(
@id varchar(32)
)
as
begin transaction
begin try
truncate table [dbo].[TestOne];
insert into TestOne values(@id,'1','2');
delete from TestOne where id='2'
commit transaction
end try
begin catch
rollback transaction
end catch
exec DoSome 1
MySQL
事务的状态 要么commit 、要么 rollback, rollback to 不是事务的最终状态
---autocommit 默认是 True 语句会自动commit
set autocommit = False
Delete from 表名
Rollback
----以上是可以回滚
set autocommit = False
trurncate from 表名
Rollback
----以上是不可回滚
链事务
Truncate Table 和 Delete from
相同点:
都可以实现对表中所有数据的删除,同时保留表结构
不同点:
①Truncate table 一旦执行此操作,表数据全部清除,同时,数据是不可以回滚的
②Delete From 一旦执行此操作,表数据可以全部清除(可以加过滤条件 where,清除指定条件的数据,Truncate 不可以where条件)
同时,数据是可以实现回滚 需要开启不自动提交 set autocommit = False
Truncate table 比 delete 速度快,且使用的系统和事务日志资源少,但Truncate无事务且不触发Trigger,有可能造成事故。故不建议在开发代码中使用此语句
---- Truncate table 在功能上与不带where 子句的Delete语句相同
DDL 和DML
①DDL操作一旦执行,就不可以回滚,加指定 set autocommit = False 对 DDL操作无效(因为执行完DDL操作之后,一定会执行commit,而且commit 操作不受set autocommit= false 影响)
②DML的操作默认情况,一旦执行,也是不可以回滚的,因为 autocimmit 默认是 True。 如果在执行DML之前,执行了 set autocommit = False ,则执行的DML操作就可以实现回滚。
ha_lydms: 这篇博客让我看到了新的世界,感受到了新的思想。我觉得自己受益匪浅!
小王毕业啦: 博主的博文“FTP、http、tcp-CSDN博客”让我对这些网络协议有了全新的认识,文章内容详实,让我受益匪浅。博主的文字表达清晰,逻辑严谨,让我看到了博主的专业水平和研究精神。期待博主未来能够继续分享更多深入的技术文章,我会持续关注并学习。感谢博主的辛勤工作和分享,希望能够与博主共同进步!
0仰望星空007: 博主文章写的十分细致,结构严谨。感谢博主分享
0仰望星空007: 博主文章写的十分细致,结构严谨。感谢博主分享
0仰望星空007: 博主文章写的十分细致,结构严谨。感谢博主分享