mysql总结

1.  数据库的三大范式?

答:

       第一范式(1NF):所有的数据都是不可再分的数据单位。

       例:

       一个电话号码可以分为家庭电话和手机号码,所以说电话号码不属于第一范式,而家庭电话和手机号码属于第一范式,因为它们不能再分了。

       第二范式(2NF):所有的非主属性完全依赖组合关键字。

       例:

       一个表里面有id,name,课程号,课程名,成绩,总分,id是主键,那么这个就不符合第二范式,因为课程号,课程名,成绩,总分并不依赖于组合关键字,name却依赖于id,所以不符合第二范式的完全依赖,如果想要符合第二范式的话就要设两个表,一个表放置idname,一个放置课程号,课程名,成绩,总分,因为name完全依赖id, 课程名,成绩,总分完全依赖课程名,所以说这个符合第二范式。

       第三范式(3NF):不存在非关键词段对任一候选关键词段的传递函数依赖。

       例:

       一个表里面有idname,部门号,部门名,部门负责人,id是主键,而部门,部门负责人是非主关键字它们都对主关键字的传递函数依赖,所以说这个不符合第三范式,如果要符合第三范式的话,就要分成两个表来进行,第一个表里要有idname,而第二个表里是部门号,部门名和部门负责人,这样才符合第三范式。

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是每次删除一行的数据,所以说truncatedelete删除速度要快

    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.DDLDML是什么?

答:

  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、将插入或更新数据限制在一定范围中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值