T-SQL基础和规范的小知识点
1. CHAR和VARCHAR,以及NCHAR和NVARCHAR的区别
1. char和nchar是定长;varchar和nvarchar是变长
2. char和varchar是非Unicode数据;nchar和nvarchar是Unicode数据
3. char , varchar最多存储8000个英文,4000个汉字;nchar , nvarchar可以存储4000个字符,无论英文还是汉字
(所以nchar和nvarchar更适用于存储多种语言)
2. CASE表达式
1. CASE表达式是标量表达式,返回一个符合条件的值,它不是语句!
2. 其中WHEN子句可以使用标量或返回标量的表达式,也可以使用逻辑表达式
3. 数据库脏读
一个事务A正在读取访问数据并修改它,但修改没有提交,这时另一个事务B也访问这个数据,然后使用了这个数据,由于这个数据是还未提交的数据,所以B读到的就是脏数据。
意思就是更新到一半的数据,或者A在更新时遇到问题,事务回滚了
那么解决这个问题就是要锁定数据库,但是呢,又有了另一个规范?NOLOCK
4. WITH(NOLOCK)
在查询语句后加上WITH(NOLOCK)来提高查询的速度,但是NOLOCK执行的时候又不发出共享锁,意思就是允许脏读了?
所以到底应该怎样选择可能还是要看场景吧,但是我觉得大表的话,还是提高性能更重要,hhhh
5. 数据库表归档
对数据定期的导出和删除:
- 创建一个新表,表结构与原表类似
- 建存储过程,分批将规定时间段的数据归档到新表中,然后删除原表中已经归档的旧数据
- 还可以创建事件定期执行存储过程
总结:
在编写SQL时不仅功能要实现,还要考虑严谨,性能是很重要的