mysql中常用和面试重点

sql:关系型数据库的标准语言。

关系型数据库的三级模式:外模式:视图。                       视图是从一个或者是从几个基本表导出的表

                                           模式:

                                           内模式:存储文件的形式。       基本表是本省存在的表

sql语句的重点查询

1.新建一个学生表

    Student(sno,Sname,sex,sage,sdept)

     create table Student(

     sno char(9) primary key,

      sname  char(10),

      sex   char(2),

      sage   smallInt,

      sdept   char(20)   );

2.建立索引

  建立索引是加快查询速度的有效手段

  create  index  索引名 on 表名(列名)

3.数据查询(重点)

  select   [distinct] <目标表达式>

  from  表名

  where  条件表达式

  group by  <分组列名、>  having

  order by <列名>

                                                                            student表

学号

sno

姓名

Sname

性别

Ssex

年龄

Ssno

所在系

Sdept

201215121李勇20

CS

201215122李晨19

CS

201512123王敏18MA
201215125张立19IS

                                                                          course表

课程号

Cno

课程名

cname

先行课

学分

Ccredit

1

数据库

54
2数学 2
3信息系统63
4操作系统74
5数据结构 2
6数据处理64

 

                                                                            SC

学号

sno

课程号

cno

成绩

Grade

201215121192
201215121285
201215121388
201215122290
201215122380

(1)查询选修 课程的学号

        select sno from sc;

(2)选出的结果是重复的

      select distinct sno from sc;

(3)查询学号‘201215121’的学生的详细情况

  select * from student where sno like '201215121';

(4)查询选修了课程名为“信息系统”的学生学号和姓名

select sno,sname

where sno in

(select sno from sc where cno in

(select cno from course where cname="信息系统"));

4.关系型数据库的理论片

 数据库的范式:

   第一范式:每一个分量不许是不可分的数据项

   第二范式:每一个非主属性依赖于任何一个候选码

   第三范式:没有非主属性

  E-R表达式:主要是用来进行描述实体和属性之间的关系。

数据库编程:

   游标:是为用户开设的一个数据缓冲区,存放sql语句的执行结果

   存储过程和存储函数:

          存储过程:是过程化SQL语句的数据,编译和优化都在服务器中,则成为存储过程

           优点: 不像SQL语句进行语法分析和优化工作,因而运行 效率是比较高的。

                      降低了客户机与服务器之间的通信

   存储函数和存储过程是比较相似的,不同的是函数是具有返回值的

1.函数的定义格式

CREATE    OR  replace function(函数名【参数1,参数2】Returns<类型> as  <过程sql块>)

2.事务:是用户定义数据库操作的序列,这些事要么做要么不做

事务的四个特性:

 原子性:事务的操作要么全做,要么都不做

 隔离性:并发执行时,各个事务之间是不能互相干扰的

一致性:两次操作数据的结果是一致的。

持续性:事务一旦提交,它对数据库中数据的改变就是 永久的。

数据库优化

1. 添加索引
    
    1). 什么时候考虑添加索引
        数据量大 
        查询频次高的表
    2). 针对什么样的字段添加索引?
        
        经常在where条件之后出现的字段 
    3). 数据库表的索引太多会有什么影响?
    
        会insert , update , delete 的效率 ;        
    4). 索引的使用规则?
        
        explain
        EXPLAIN SELECT * FROM product WHERE NAME LIKE '测试商品201%
2. select 语句中 尽量不适用 select * from ..., 使用具体的字段代替 select name , age  from ...; 
   
    ---> select * , * 代表所有的列, 不同的表, 列也不同, 需要解析列, 会查找所有的字段. 效率低 

3. where 和 having, where子句中不能跟组函数. 当使用where 和 having 都可以使用时, 尽量使用where.

    1). select deptno, avg(sal) from emp where deptno = 10 group by deptno;  ---> 先过滤,后分组, 分组的对象数据少, 效率高.

    2). select deptno, avg(sal) from emp  group by deptno having deptno = 10; ---> 先分组后过滤.

4. 如果需要查询多张表, 可以使用子查询, 也可以使用多表查询时, 理论上,尽量使用多表查询 ---> 因为性能高.

    因为子查询, 对数据操作两次或多次, 而多表查询则只操作一次, 所以效率高---------> 不考虑笛卡尔积的情况下.

    但是,如果表中的数据太多, 多表产生的笛卡尔积太大, 会影响多表查询的效率.

5. 尽量不使用集合运算. 

    参与运算的集合越多, 运行效率越低.  UNION(并集) , UNION ALL(全并集) , INTERCEPT(交集) , MINUS(差集)

6. 尽量不适用in操作符.

    ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采
    
    用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程

    在业务密集的SQL当中尽量不采用IN操作符,用 EXISTS 方案代替。

7. 强烈不建议使用 not in 操作符.
    
    此操作是强列不推荐使用的,因为它不能应用表的索引  ;  可以使用 not exists 来替代

8. IS NULL 或 IS NOT NULL 操作(判断字段是否为空)

    判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的 ;

    用其它相同功能的操作运算代替,如:a is not null 改为 a>0 或a>’’等。不允许字段为空,
   

9. LIKE的模糊查询如果用的不好也会降低性能.

    LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题
    如LIKE '%5400%' 这种查询不会引用索引,而LIKE '5400%'则会使用索
10. 查询表顺序的影响

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值