什么是存储过程?有哪些优缺点?
存储过程是一些预编译的SQL语句,直白的说存储过程是一个记录集,它是由一些SQL语句组成的代码块,这些代码块想一个方法一样实现一些功能,然后再给这个代码块起一个名字,在用到这个功能的时候调用.
存储过程是一个与编译的代码块,执行的效率比较高
存储过程替代了大量的SQL语句,降低了网络通信量,提高通信速率,一定程度上确保数据的安全.
索引是什么?有什么作用以及优缺点?
索引是对数据库中一或多个列的值进行排序的结构,是帮助Mysql高效获取数据的数据结构.
也可以这样理解:索引就是加快检索表中数据的方法,数据库的索引类似书籍的索引.在书籍中,索引允许用户不许翻阅整个书籍就能够迅速的找到所需要的信息,在数据库中,索引也允许数据库程序迅速的找到表中的数据,而不必扫描整个数据库.
MySql数据库几个基本的索引类型:普通索引,唯一索引,主键索引,全文索引.
- 索引加快数据库的检索速速
- 索引降低了插入,删除,修改等维护任务的速度
- 唯一索引可以确保每一行数据的唯一性
- 通过使用索引,可以在查询过程中使用优化隐藏器,提高系统的性能
- 索引需要占物理和数据空间
什么是事务?
事务是并发控制的基本单位.它是一个操作序列,这些操作要么都执行,要么都不执行,维护数据库数据的一致性.
数据库的乐观锁和悲观锁是什么?
乐观锁和悲观锁是数据库管理系统中的并发控制器主要采用的技术手段.
数据库管理系统中的并发控制器确保多个事务同时存取数据库中同一事务时不破坏事务的隔离性和统一性.
悲观锁:假定会发生冲突,屏蔽一切可能违反数据完整性的操作.
乐观锁:假定不会发生冲突,只是在提交操作的时候检查是否违反数据完整性.
事务的四个特性
- 原子性:事务是一个不可分割的工作单位,事务中的操作要么都执行成功,要么都不发生.
- 一致性:事务前后数据的完整性必须保持一致.(比如转账)
- 隔离性:一个用户的所操作的事务不会被其他的事务所干扰,多个并发的事务之间要相互的隔离.
- 持久性:一个事务一旦被提交了,那么对数据库的影响是永久生效的,接下来数据库即使发生故障也不会对其有任何影响.
脏读:一个事务读到了另一个事务未提交的数据
不可重复读:一个事务读取到了另一个事务已经提交(Update)的数据,引发另一个事务,在事务中的多次查询结果不一致.
虚读/幻读:一个事务读取到了另一个事务已经提交(insert)的数据,导致另一个事务,在事务中多次查询的结果不一致.
四种隔离级别:
1.读未提交:一个事务读到另一个事务没有提交的数据.(什么都解决不了)
2.读已提交:一个事务读到另一个事务已提交的数据.(解决了脏读)
3.可重复读:一个事务读到的数据始终保持一致,无论另一个事务是否提交(解决脏读,不可重复读)
4串行化:同时执行一个事务,相当于事务的单线程(全部解决)
MySql的默认隔离级别为:可重复读
Oracle的默认隔离级别为:读已提交
使用索引查询一定能提高查询的性能吗?为什么?
通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价.
索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.
单一说说drop,delete和truncate的区别?
SQL中的这三个命令都代表删除,但是三者有一些的区别:
- drop用于删除表,操作无需提交,立即生效.
- delete用于删除表中的数据,必须提交,可以回滚.
- truncate应用于删除表中的数据,不需要提交,无法回滚.
mysql中varchar与char的区别以及varchar(30)中的30代表的涵义
(1) varchar与char的区别
答:变长和固定长度
(2)varchar(50)中50的涵义
答: 字符最大长度50,所代表的字节数与字符集有关,比如是utf8占3个字节,那么varchar(50)字段在表中最大取到150个字节
(3) int(20)中20的涵义
答:int是类型的数字,在2进制记录里,长度最大为20,数字范围是-219~(219-1);