面试积累之数据库篇(六)

事务的4大属性:
原子性,隔离性,一致性,持久性

sql完整性约束:
主键约束
唯一约束
检查约束
外键约束
默认约束

sql语言分为4大类:数据查询语言DQL,数据操纵语言DML(插入更新删除),数据定义语言DDL(创建数据库中的对象),数据控制语言DCL。
DDL 创建数据库中各种对象,表、视图、索引、同义词、聚簇。
DDL操作是隐性提交的,不能rollback

DCL,数据控制语言:grant授权,回滚rollback ,commit提交
提交数据有三种类型:显式提交、隐式提交及自动提交。下面分
别说明这三种类型。

(1) 显式提交
用COMMIT命令直接完成的提交为显式提交。其格式为:
SQL>COMMIT;

(2) 隐式提交
用SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,
EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。

(3) 自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,
系统将自动进行提交,这就是自动提交。其格式为:
SQL>SET AUTOCOMMIT ON;

  1. truncate与delete的区别?(delete from table和truncate table 的区别!)
    相同点:都会删除表内的数据
    不同点:
    1、truncate和 delete只删除数据不删除表的结构(定义)而drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
    2、delete语句是dml语句,事务提交后才会生效。而truncate和drop是ddl语句,语句执行立即生效。
    3、速度,一般来说: drop> truncate > delete
    4.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
    使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
  1. 一学生表!有班及id,学号!成绩!一求平均成绩!二求比平均成绩高的学生的所有信息
    select id,avg(成绩) from table group by id
    select * from table where 成绩 > (select 成绩 from (select id,avg(成绩) 成绩 from table group by id)as a )

数据库的三大范式:
第一范式:数据原子性,不能再分
第二范式:主键,能唯一标识
第三范式:每个表都不包含其他表的非主键信息,比如帖子表已经有发帖人的id,那么就不应该有发帖人的姓名

行转列

create table student(id int primary key auto_increment,
name varchar(20) ,course varchar(20) ,sorce varchar(20));

insert into student values(0,"菜菜","语文","89");
insert into student values(1,"菜菜","数学","89");
insert into student values(2,"菜菜","英语","89");
insert into student values(3,"张良","语文","92");
insert into student values(4,"张良","数学","93");
insert into student values(5,"张良","英语","94");

select name,
max(case course when '语文' then sorce else '0' end)  '语文',
max(case course when '数学'  then sorce else '0' end) '数学',
max(case course when '英语' then sorce else '0' end) '英语'
from student group by name;


函数和过程的区别:

存储过程:
可以不需要返回值。sql语句中不可以调用
函数:
一定要有返回值,sql语句可以调用  

数据库索引的优点和缺点:
数据库索引的数据结构基础是B+tree,用来提高数据库表的数据访问速度。

优点:
避免了进行数据库全表扫描,只需要检索较少的索引页和数据页。
索引能让数据库查询数据的速度上升, 而使写入数据的速度下降,原因很
简单的, 因为平衡树这个结构必须一直维持在一个正确的状态, 增删改
数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每
次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正
确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。

数据库触发器:

DML触发器:遇到DML事件时触发执行,像insert\update\delete。一种DDL触发器:遇到DDL事件时触发,像Login Datatabase、更改数据库状态、create语句等。

你可能感兴趣的:(面试积累之数据库篇(六))