数据库0403

not in()内如果有null,需要手动去除,不会自动忽略空值。in会自动忽略空值

on和where在inner join 时没有区别,但在left join,right join,full join时存在差异,on是在生成临时表时进行处理,若left join,则不论on是否为真,均列出所有的项;where则是在临时表生成后处理表,若left join,则在列出所有项后,再对其进行条件处理

group by和having count(*).统计每个组的个数。

1、存储引擎:show engines\g。

    myISAM:格式文件、数据文件、索引文件。可压缩,节省空间,只读节省速度;不支持事务;适合少更新

                     大读取;

    InnoDB:支持事务。速度不如myISAM;mysql服务器崩溃后提供自动恢复;支持级联更新,级联删除;

    MEMORY:数据及索引存储在内存中;数据非持久;最快

2、事务:transaction,是一个最小的不可再分的工作单元。通常一个事务对应了一个完整的业务(如银行

                转账)。而一个完整的业务需要批量的DML语句(insert,update,delete)共同联合完成。DML语句

                才有事务。业务逻辑不同,DML语句个数不同。

      关于银行账户转账:001转账10000.0到002

update t_name set balance=40000.0 where actno='act-001';
update t_name set balance=20000.0 where actno='act-002';

    以上两条数据必须同时成功或失败,最小单元不可再分。当第一条DML语句执行成功之后,并不能将底层

    数据库中第一个账户的数据修改。只是将操作记录,这个记录在内存中完成,当第二条DML语句执行成功

    之后,和底层数据库数据同步。若第二条DML语句执行失败,清空历史操作记录。这个功能需要事务。

3、事务四大特性ACID:原子性、一致性、隔离性、持久性

4、开启事务:Start Transaction;事务结束:End Transaction;提交事务:Commit Transaction;

     回滚事务:Rollback

5、开启标志:任何一条DML(insert update delete)语句

     结束标志:提交、回滚

6、事务未结束前,DML语句不改变底层数据库,只有事务成功结束时才修改数据库。

7、mysql自动提交事务。若想解除自动提交:一、start transaction;二、SET AUTOCOMMIT=OFF;

      以上打开或关闭自动提交机制,只对当前会话有效。

8、隔离性:事务A和B之间有一定的隔离性。

      隔离级别:-读未提交  read uncommited :

                            事务A未提交的数据,事务B可以读到。"脏数据"、"Dirty Read"。最低隔离级别,

                            数据库默认隔离级别要高于该级别


                       -读已提交  read commited  (oracle默认)

                            事务A提交的数据,事务B才能读到。避免"脏数据"。这种隔离会导致"不可重复读取"


                       -可重复读  repeatable read (masql默认)

                            事务A提交之后的数据,事务B读取不到。避免"脏数据",避免"不可重复读取",导致"幻象读"

                            读取的是缓存中数据,A操作作用于数据库,不影响缓存


                       -串行化     serializable

                            事务A和事务B,A在操作数据库表中数据时,事务B只能排队

                            很少使用,用户体验低,可以避免幻象读。串行执行、不并发

9、修改隔离级别:

        第一种:修改my.ini配置文件:

                  可选值:-READ-COMMITED

                                -READ-UNCOMMITE

                                -REPEATABLE-READ

                                -SERIALIZABLE

                             [mysqld]下面添加:transaction-isolation=READ-COMMITED

        第二种:使用命令方式:

                  可选值:-READ COMMITED

                                -READ UNCOMMITE

                                -REPEATABLE READ

                                -SERIALIZABLE

                    SET  (无/session(会话)/global(全局)) TRANSACTION ISOLATION LEVEL 可选值

          查看隔离级别:select @@(无/session/global)tx_isolation

10、并发事务与隔离级别示例

  READ UNCOMMITED:设置全局隔离级别、事务、设置手动提交、编写sql语句、不提交、在第二个窗口可读

  READ COMMITE           设置全局隔离级别、事务、设置手动提交、编写sql语句、提交、在第二个窗口可读

  REPEATABLE READ       设置全局隔离级别、事务、设置手动提交、编写sql语句、提交、在第二个窗口不可读

  SERIALIZABLE


11、索引(了解)index:提高程序查询效率。主键自动添加索引。索引和表存储在硬盘文件中

      检索方式:一、全表扫描;二、通过索引进行检索提高查询效率。

      一张表多个字段,每个字段都可以添加索引。

      适合添加索引情况:该字段数据量庞大;少DML操作;该字段经常出现在where条件中

12、创建索引:create index dept_dname_index on dept(dname)

        删除索引:drop index dept_dname_index on dept;

13、视图、DBA。导出:mysqldump 数据库名 >F:\文件名.sql -uroot -密码;导入:source

14、数据库设计三范式:

        一范式:有主键,要求每一个字段原子性不可再分

        二范式:要求所有非主键字段完全依赖主键,不能产生部分依赖。(减少联合主键)

        三范式:所有非主键字段不能传递依赖于主键字段

        一对多:多一方添加外键,对应一一方的主键

        多对多:学生表存学生信息,教师表存教师信息,师生关系表存师生对应信息

        一对一:第一种:分两表存储,共享主键;第二种:分两表存储,外键唯一








    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值