1. 数据库的三大范式?
答:
第一范式(1NF):所有的数据都是不可再分的数据单位。
例:
一个电话号码可以分为家庭电话和手机号码,所以说电话号码不属于第一范式,而家庭电话和手机号码属于第一范式,因为它们不能再分了。
第二范式(2NF):所有的非主属性完全依赖组合关键字。
例:
一个表里面有id,name,课程号,课程名,成绩,总分,id是主键,那么这个就不符合第二范式,因为课程号,课程名,成绩,总分并不依赖于组合关键字,而name却依赖于id,所以不符合第二范式的完全依赖,如果想要符合第二范式的话就要设两个表,一个表放置id和name,一个放置课程号,课程名,成绩,总分,因为name完全依赖id, 课程名,成绩,总分完全依赖课程名,所以说这个符合第二范式。
第三范式(3NF):不存在非关键词段对任一候选关键词段的传递函数依赖。
例:
一个表里面有id,name,部门号,部门名,部门负责人,id是主键,而部门,部门负责人是非主关键字它们都对主关键字的传递函数依赖,所以说这个不符合第三范式,如果要符合第三范式的话,就要分成两个表来进行,第一个表里要有id和name,而第二个表里是部门号,部门名和部门负责人,这样才符合第三范式。
2. 数据库的左连接,右连接和全连接?
答:
左连接:数据库的左连接就是以左边的数据为基准,往右边查询相匹配的数据,如果左边有的而右边却没有,左边的数据全部显示出来,右边没有的将显示为NULL;
例:
mysql> select s.name,c.result from study s left join studytresult c on s.id=c.st
u_id;
+------+--------+
| name | result |
+------+--------+
| 张三 | 100 |
| 李四 | NULL |
| 王五 | 80 |
| 萝卜 | NULL |
| 青菜 | 70 |
| 麻子 | 90 |
+------+--------+
右连接:数据库的右连接就是以右边的数据为基准,往左边查询相匹配的数据,如果右边有的而左边却没有,右边的数据全部显示出来,左边没有的将显示为NULL;
例:
mysql> select s.name,c.result from study s right join studytresult c on s.id=c.s
tu_id;
+------+--------+
| name | result |
+------+--------+
| 张三 | 100 |
| 王五 | 80 |
| 青菜 | 70 |
| 麻子 | 90 |
| NULL | 60 |
+------+--------+
全连接:把左连接和右连接用union 连接起来就是全连接,因为MySQL不支持全连接。
例:
mysql> select*from studenttwo left join resulttwo on studenttwo.id=resulttwo.stu
_id union select*from studenttwo right join resulttwo on studenttwo.id=resulttwo
.stu_id;
+------+------+------+-------+--------+
| id | name | id | score | stu_id |
+------+------+------+-------+--------+
| 1 | 张三 | 1 | 100 | 1 |
| 2 | 李四 | NULL | NULL | NULL |
| 3 | 王五 | 2 | 80 | 3 |
| 4 | 萝卜 | NULL | NULL | NULL |
| 5 | 青菜 | 3 | 70 | 5 |
| NULL | NULL | 4 | 60 | 7 |
+------+------+------+-------+--------+
3. 游标机制及其使用过程?
答:
游标机制:
每次只读一条记录的机制.
游标的使用过程:
1. 声明(定义)游标
2. 打开游标
3. 使用游标
4. 关闭游标
4. 能在纸上写出查找两个表中相同的数据?
答:
select * from 表一 where 列名= (select 列名 from 表二 where 表一.列名=表二.列名);
5. 如何删除一个表中的重复记录?
答:
delete from 表名 where 列名 = 重复的记录;
6. 字段如何进行空判断?
答:在声明字段的时候,在字段的后面加上not null,如:create table A(name varchar not null);
7. 存储过程,函数,触发器区别?
答:
过程与函数的区别:过程里面没有返回值,可以有一个或多个输出参数,函数有且只有一个返回值.
触发器与存储过程的区别:触发器是一种特殊的存储过程, 区别在于触发器是事件触发自动执行的,而存储过程需要调用执行.
8. 触发器行级触发与语句级触发是什么区别?
答:
语句级(不管插入多少条数据,一次将全部删除)
行级(不管插入多少条数据,一次只删除一条)
9. Delete 与 truncate 的区别?
答:
1.truncate是每次删除一页的数据,而delete是每次删除一行的数据,所以说truncate比delete删除速度要快
2.truncate操作立即生效,所以删除之后不能恢复数据,而delete要等待事务提交之后才生效,所以可以恢复。
3.delete语句是DML,如果有相应的触发器,执行的时候将被触发;truncate是DDL,操作不触发触发器.
10.Sql效率:select * from A where age > 20 ;
select * from A where age – 20 > 0;
哪个好,为什么?
答:
select*from A where age > 20 的sql效率要好,因为它是把20以上的数据都查询出来,>20只查询了一次就把>20的数据查询出来了,而第二个 age – 20 > 0 却是要先减去20 再查询大于0 的数据, age – 20>0要查询两遍才能把数据查询出来,而age >20只要一遍就能把数据查询出来,所以age>20的效率要比age – 20>0要好。
11.MySQL中支持事务的表类型是什么?
答:
InnoDB 和 Berkeley(BDB).
12.DDL与DML是什么?
答:
DDL(data define language)是数据定义语言,支持create,drop,alter 也就是所谓的创建,清除和替换.
DML(data manipulate language)是数据操作语言,支持select,insert,delete,update 也就是所谓的增,删,查,改.
13.表中记录如何排序与分组?
答:
使用group by 分组 和 order by 排序;
Order by 列名;是升序,order by 列名desc;是降序.
分组:重复的分为一组
升序排序:
降序排序:
14.存储过程的优点?
答:
1.减少应用程序的逻辑复杂性。
2.存储过程允许模块化设置。
3.存储过程创建后,可以多次调用,对存储过程的修改对应用程序毫无影响。
4.存储过程可以快速的执行效率。
5.能够减少网络流量。
6.可以作为一种安全机制来充分利用,防止sql被黑客攻击。
15.什么是视图及其特点?
答:
视图是一个虚拟的表,里面可以有一个表或者是表里面的几个字段,视图里面的数据会随着表里面的数据的改变而改变.
视图的特点:
1.限制表中特定行和列的使用,因此视图可以用来控制一个或多个表中特定部分的访问。
2.简化操作,隐藏复杂查询。
3.安全性,让客户只能看到视图,没有操作的任何权限。
4.合并分割数据。
5.将插入或更新数据限制在一定范围中。
16.数据库中的约束类型?
答:
1.空约束
2.默认约束
3.主键约束
4.外键约束
5.唯一性约束
6.检查约束
17.什么是索引及其优点和建立索引的原则?
答:
索引:索引就是加快检索表中数据的方法,数据库的索引类似于书籍的索引,在数据库中,索引允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。
索引的优点:
1.创建唯一性索引,保证数据库表中每一行数据的唯一性
2.大大加快数据的检索速度,这也是创建索引的最主要的原因
3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5.通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。
索引的缺点:
1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大
3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。索引既然提高了数据的查询速度,就降低了增加和删除的速度.
索引的原则:
1.更新频率低,查询频率高,存在大量重复值的时候使用聚簇索引。
2.经常同时存储多列且每列都有重复值的时候使用组合索引。
3.控制好复合索引的前导列,否则无法起到索引的效果,前导列一定是使用最频繁的列。
4.多表操作前,优化器会考虑带有索引的表。
5.任何对列的操作都会使索引失效,如果要操作的话,尽量把操作移动到等号的右边。
6.使用in or 语句等会使索引失效
7.在索引中,不能使用NULL,否则会导致索引失效。
18.聚集索引及非聚集索引和唯一索引?
答:
聚集索引: 与基表的物理顺序相同,数据值的顺序总是按照顺序排序的.它的优点查询速度快,缺点是对表进行修改速度较慢
非聚集索引: 非聚簇索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致.添加记录不会引起数据顺序的重组.所以修改比聚簇索引快
唯一索引: 保证在索引列中的全部数据是唯一的
视图与表的区别:
1.表的数据存在于磁盘上,视图默认情况下物理上是不存在的.
2.视图由表派生出来的一个数据库对象,视图又叫虚表.
3.唯一物理存在的视图名和从表中查询行的方法.
视图的作用:
1、限制表中特定行和列的使用,因此视图可以用来控制一个或多个表中特定部分的访问;
2、简化操作,隐藏复杂查询;
3、安全性,让客户只能看到视图,没有操作的任何权限;
4、合并分割数据;
5、将插入或更新数据限制在一定范围中。