数据库知识点:(1)DDL,DML,DCL的区别(2)DROP,TRUNCATE,DELETE的区别(3)UNION与UNION ALL的区别

嘿,这个数据库的事情真是令人困惑。
让我告诉你我当时踩过的陷阱。

我们只讲DDL、DML、DCL。
它真的很大。

当时我刚刚接手一个项目。
服务器在美国,数据库是MySQL。
客户极力要求做一个新功能,但我手一抖,就写了一个DROP TABLE,直接删除了客户的一个重要表。
我当时脸色就惨白了,客户就嚷嚷着,说三个月的数据丢失了。
最后老板让人把备份拿出来,花了一晚上才恢复。
你说这是大事,真是恶心。

所以你看,DROP就是DDL,删除表、索引等,执行完就没有了,没办法后悔。
这就是为什么我后来学会了在改变任何事情之前要三思而后行。
备份确实是个好东西。

说到TRUNCATE,我以前也陷入过这个陷阱。
有一次,一个表中数据太多,运行速度很慢。
客户询问是否可以清除数据。
我用的是TRUNCATE TABLE,但是忘记了表还有外键约束,直接报错。
当时确实很尴尬。
顾客正在观看。
我在更改 SQL 时道歉,将 TRUNCATE 替换为 DELETE FROM table_name WHERE 1 =0。
至少数据没有被删除,只是折腾而已。
所以你看,虽然TRUNCATE速度很快,但是使用时一定要小心。

删除更好。
这就是DML。
可以根据情况删除,执行后可以回滚。
相对来说是比较安全的。
我正在做一个项目,不小心删除了一些数据。
我及时发现并很快使用ROLLBACK恢复了。
客户没有说什么,只是叮嘱我下次小心点。

我们来谈谈 UNION 和 UNION ALL。
我也曾对此感到困惑。
有一次我写报告的时候,需要合并两个表的数据,但是客户说不需要去重。
我一兴奋就用了UNION,但是客户说数据重复了,要求用UNION ALL。
你看,UNION去除重复,效率较低。
UNION ALL 不会删除重复项并且速度更快。
所以选择哪一种就要根据情况而定。

总之,你必须小心这个数据库的事情。
当时我因为一个DROP TABLE而陷入了很长一段时间的麻烦,客户差点解雇我。
所以你看,你必须理解这些命令,但在使用它们时你必须极其小心。

MySQL事务的ACID特性及并发问题知识点总结

上周在研究MySQL事务处理的时候,发现了一个很有趣的现象。
首先我们来说说ACID的特点。
原子就像一个完整的拼图,要么所有的碎片拼在一起,要么全部散开。
一致性确保数据库的状态保持一致,就像购物时库存和订单同时更新一样。
隔离就像多个人同时在游泳池里游泳,确保他们不会互相干扰。
不变性就像保险库一样,即使在发生故障时也可以安全地恢复数据。

然后我想到并发问题也是事务处理的一个大问题。
举个例子,脏读就像去超市,看到某种产品打折,就买了,但一查,发现价格又恢复原价了。
这个问题可以通过指定更高的隔离级别来解决。

2 02 3 年,我发现了一个新问题,就是假读。
就像在图书馆看书一样。
同一本书你看了两遍,发现内容变了。
该问题的解决方案是使用序列隔离级别,或者通过间隙锁定在可再现读级别部分解决。

我还检查了与事务相关的命令。
例如,查看自动提交模式,可以使用@@autocommit;设置,要设置手动提交,请设置 autocommit=0;。

主要的机制,如redolog和undolog,分别记录事务修改后的数据和修改前的数据。
锁定机制包括共享锁和排它锁,用于控制并发访问。

一般来说,在业务设计时,需要根据场景确定隔离级别,平衡安全和性能。
例如,金融系统需要消除脏读数,而统计场景可能容忍不可重复的读数。
我发现了这一点,这种平衡非常有趣。