-
维护数据库的完整性,一致性,你喜欢用触发器还是自写业务逻辑?为什么?
尽可能用约束,比如主键、外键、唯一键、非空字段等,具体问题具体分析,数据量巨大的不要用触发器,小的可以用,数据量到了一定量一定要自写业务逻辑。 -
什么是事务?什么是锁?
事务transaction时并发控制的基本单位,它时一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位。事务时数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这回产生冲突,为了解决并发性问题,需要锁。悲观锁是假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作;乐观锁是假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性,乐观锁不能解决脏读问题。 -
什么是索引?有什么优点?
索引是数据库中用于提高检索性能的排好序的数据结构,通过建立特定的数据结构将某个列或多个列的值与它们在数据库中的行关联起来,以加快查询速度。
索引从功能逻辑上分为普通索引、唯一索引、主键索引、全文索引;物理实现上分为聚簇索引和非聚簇索引;按照作用字段分为单列索引和联合索引。
索引优点是提高查询性能。缺点是占用存储空间和索引的维护开销。 -
视图是什么?游标是什么?举例游标的使用方法?
视图是一种虚拟的表,具有和物理表相同的功能,可以对视图进行增改查,视图通常是有一个表或者多个表的行或列的子集,对视图的修改不影响基本表,视图可以进行数据过滤,将用户不需要或泄露私密信息的数据过滤掉,只将有用的数据作为一个单独的对象展现出来。
游标是对查询出来的结果集作为一个单元来有效处理,游标可以定在该单元中的特定行,从结果集的当前行检索一行或者多行,可以对结果集当前行做修改。
游标的使用,1.Declare游标,声明游标 2.Open游标,打开游标 3.从一个游标中Fetch信息,提取数据 4.Close游标,关闭或释放游标 -
什么是存储过程?有什么优点?
储存过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数来执行。存储过程只在创造时进行编译,以后每次执行存储过程都不需要再重新编译,而一般SQL语句每执行一次就编译一次,当对多个报表进行复杂操作时,可将此复杂操作用存储过程封装起来使用,存储过程可以重复使用,可减少开发人员的工作量,安全性比较高,可以设定用户使用权限。
优点:1.减少网络通信量,比一条一条执行SQL语句要效率高 2.执行速度更快 3.更强的适应性 4.分布式工作
缺点:1.更改比较繁琐 2.可移植性差 -
触发器分为几种,分别有什么作用?
触发器分为四种,1.DML触发器,当发出UPDATE\INSERT\DELETE命令时就可以触发;2.Instead-of触发器,当像一个由多个表联接成的视图做DML操作时,在触发器写代码分别对各表做相应的DML操作,一般情况下不允许;3.DDL触发器,当发出CREATE\DROP\ALTER\TRUNCATE命令时会触发已定义好的触发器,可以监控某个用户或者整个数据库的所有对象的结构变化;4.DB事件触发器,当STARTUP\SHUTDOWN\LOGON\LOGOFF数据库时触发,可以用来监控数据库什么时候关闭、打开,或者用户的logon、logoff数据库情况。 -
Char和vchar最长长度是多少?
非空Char最大总长度是255字节,非空varchar最大总长度是65533字节;
可空char最大总长度是254字节,可空varchar最大总长度是65532字节。 -
如何优化一条sql语句?
1.查询SQL尽量不要不要用select*,而是具体字段;2. 避免在where子句中使用or连接条件;3. 尽量使用数值替换字符串类型,比如性别;4. 使用varchar代替char;5. Where中使用默认值代替null;6. Inner join\left join\right join,优先使用inner join;7. 提高group by语句的效率,先过滤再分组;8. 操作delete或者update语句,价格limit或者循环批次删除;9. 批量插入性能提升;10. 表连接不宜太多,索引不宜太多,一般5个以内;11. 符合索引最左特性;12. 优化like语句;13. 设计表的时候,所有表和字段都添加相应的注释 -
有哪几种锁,什么情况下用不同的锁?
悲观锁是假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作;乐观锁是假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性,乐观锁不能解决脏读问题。乐观锁可以使用自增长的整数表示数据版本号,更新时检查版本号是否一致,也可以使用时间戳来实现。悲观锁需要使用数据库的锁机制。在实际生产环境中,如果并发量不大且不允许脏读,可以使用悲观锁解决并发问题;但如果系统的并发非常大的话,悲观锁就会带来非常大的性能问题,所以我们就要选择乐观锁的方法。