主要内容
- MySQL中TRUNCATE和DELETE的区别
- 算法题:使用位运算来代替加减运算符
MySQL中TRUNCATE和DELETE的区别?
初次看到这个题目,说实在的非常的茫然,因为我好像从来没有用到过TRUNCATE这个关键字(PS:看来我就是一个连SQL都不会写的lz),下面是学习后的辨析,总结:
- 是否可以使用条件
1
2delete from student where id=1; # 可以携带条件,删除满足条件的记录
delete from student; # 删除表中所有的数据
delete是可以是使用条件的,而truncate是不能使用条件的
1 | truncate table student |
而且delete和truncate都是只删除数据,会保留数据表的。
是否可以回滚
因为delete是数据操作语言(DML),因此是可以回滚的。而truncate是数据定义语言(DDL),是无法被回滚的。效率
也正是因为truncate是不支持回滚的,因此需要处理事务日志,因此trucate删除数据更加快,且耗费的资源更少。
算法题:使用位运算来代替加减运算符
例题:
[leetcode371]:两整数之和 不使用运算符 + 和 - ,计算两整数 a 、b之和。
分析:
要使用位运算来代替加减运算,就需要分析一波。位运算是如何实现加法的。 0 + 0 =0 0 + 1 =1 1 + 0 =1 1 + 1 =0(进位1) 很明显的规律就是相同位为0,不同位为1.也就是异或。
那么它的进位有什么特点呢? 比如:5+4
1 | 0101 |
很明显,进位就是按位与。 但是进位是应该放在高一位的,所以我们需要将进位结果左移一位。
所以我们的解放方案是:
- a+b的计算方案拆分为(a+b的无进位结果)+(a+b的进位结果)
- 循环这个操作,直到进位为0为止(可以递归)
解法:
1 | class Solution { |
v1.5.2