数据库知识点小记

Posted by Futari on 2023-12-11
Estimated Reading Time 1 Minutes
Words 491 In Total
Viewed Times

设置主键

MySQL设置或者后续新增主键,都需要包含主键字段为not null,否则不允许创建

Oracle后续alter增加主键,如果被设置为主键的字段没有显式设置初始not null,那么新增的主键会自动将该字段设置为not null,在创建表的时候,字段之后直接跟上primary key也是默认隐式的增加了not null约束

Case-When

使用数据库原生的判断,case when,判断类似于

1
2
3
4
5
switch (case):
case a:
break;
case b:
break;

执行到某个分支后跳出,不会继续执行,即if-else if

对于条件,开头的and是可以自动去除的,但是仅对于and,其他的or等条件不会进行处理,所以使用其他运算符要处理好使用位置

SQL运算符优先级

比如常见的and和or联用,那么 A AND B OR C,相当于 (A AND B) OR C,同优先级则从左往右执行

in与not in

今天碰到一个SQL,由于条件很多所以不展示,只关注where的A not in B条件,在本地库测试的时候查询结果正确,但迁移到线上环境反馈查不出数据,手动select查看A数据,发现查出的某数据确实不在B中,那么为什么查不出呢?

难道是因为char长度的不对应?

后续我们知道oracle char类型长度不同也是能关联的,而且这里就算不对应,那么not in应该更能查出来才对啊

而且在本地库验证,发现in和not in合集 = 不加in/not in条件,也是符合我们日常经验的。

逐步去条件,发现问题就是出现在not in语句上,原本应该查出来8条,但是一直是0条,且in条件能查出两条是对的,那么是不是not in失效了呢?

百度:


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !