1、触发器的作用?
触发器是一种特殊的存储过程,主要通过事件触发而被执行。可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作而不允许未经许可的更改和变化,可以级联运算,如:某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
2、什么是存储过程?用什么来调用?
存储过程是一个预编译的SQL语句。优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。调用:1)可以用一个命令对象来调用存储过程 2)可以供外部程序调用,比如:Java程序
3、存储过程的优缺点?
优点:1)存储过程是预编译过的,执行效率高 2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯 3)安全性高,执行存储过程需要有一定权限的用户 4)存储过程可以重复使用,可以减少数据库开发人员的工作量
缺点:移植性差
4、索引的作用?优缺点?
索引是一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。他很类似与现实生活中的目录,不需要查询整本书的内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是减慢了数据录入的速度,同时也增加了数据库的尺寸大小
5、什么样的字段适合创建索引?
唯一、不为空、经常被查询的字段
6、索引的类型有哪些?
逻辑上
单行索引、多行索引、唯一索引、非唯一索引、函数索引、域索引
物理上:
分区索引、非分区索引
7、什么是事务?什么是锁?
事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败,以后的操作就会回滚到操作前状态,或者是上一个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。
锁:是实现事务的关键,所可以保证事务的完整性和并发行,与现实生活中的锁一样,可以使某些数据的拥有者,在某段时间内不能使用某些数据或者数据结构。
8、什么是视图?优缺点?
视图:是一种虚表,其本质是一个SQL语句,为了方便查询,是一个表或者多个表的行或列的子集。对视图的修改会影响基本表。视图创建后不会自动消失,必须人为删除。
视图的优缺点?
优点:1)对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。2)用户通过简单的查询可以从复杂查询里得到结果。3)维护数据的独立性,视图可从多个表检索数据 4)对于相同的数据,可以产生不同的视图
缺点:性能:查询视图时,必须把视图的查询转换成对基本表的查询,如果这个视图是又由一个复杂的多表查询所定义,那么就无法更改数据
9、列举几种表的连接方式?区别?
内连接、自连接、外连接、交叉连接
内连接:只有两个元素表相匹配的才能在结果集中显示。
外连接:
左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。
右外连接:右边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示。
全外连接:连接的表中不匹配的数据全部会显示出来。
交叉连接: 笛卡尔效应,显示的结果是链接表数的乘积。
10、主键和外键的区别?
主键在本表中是唯一的,不可为空的,外键可以重复,可以为空
外键和另一张表的主键关联,不能创建对应表中不存在的外键
11、在数据库中查询语句速度很慢时,如何优化?
1)创建索引 2)减少表之间连接 3)优化sql,尽量让sql很快定位数据,不要做全表查询,尽量使用索引,把数据量大的表排在前面 4)简化查询字段,没用的字段不要,尽量返回少量数据 5、尽量用PreparedStatement来查询,不要用Statement
12、当数据库的数据量很大时,有什么优化方案?
1)创建索引 2)对缓存进行配置,修改缓存的大小,当再次查询相同的条件时,可以从缓存中进行获取 3)对慢查询日志进行分析,进行有目的的优化 4)分库分表,对数据量进行分流 5)子查询优化,子句中用到in或exist关键字时,可以用join查询替代,服务器对join的查询优化远高于子查询优化
13、数据库的三范式?
第一范式:列不可再分
第二范式:行可以唯一区分,主键约束
第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束
14、varchar和char的区别?
char定长,varchar为边长;char中英文字符占一字节,中文占两字节,varchar中英文字符均占两字节
15、从数据库中随机取50条数据
select * from 表 order by rand() limit50;
16、order by 和 group by
order by:排序查询:desc 降序 asc 升序
group by:分组查询:having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。