MySQL高级

不排版了,需要资料的可以关注,私发信息分享给你


    数据库备份和还原
        见ppt资料
    约束
        主键约束
            作用
                能够唯一的标识表中的每一行数据(作用)
            语法
                建表时:
                     create table 表名 ( id int  primary key , 其他字段, ... );
                修改表:
                    alter table 表名 add primary key(字段);
                删除
                     alter table 表名 drop primary key;
            主键自增
                字段名 字段类型 primary key auto_increment;
            DELETE和TRUNCATE删表对id的影响
                 delete删除表中的数据,不重置auto_increment的值
                 truncate摧毁表,重建表,auto_increment重置为1
            设置主键从指定值自增
                alter table 表名 auto_increment = 起始值;
            主键有什么作用及特点?
                唯一.非空.非业务相关
        唯一约束
            作用
                被唯一约束的字段,本列数据不允许出现重复数据,null除外,null可以出现多个。
            关键字
                unique
            语法
                创建表时
                    create table  表名(
   字段名 字段类型 unique,
    ......
);
                修改表时
                    alter table 表名 add unique(字段);
        非空约束
            作用
                被非空约束的字段,本列数据不允许出现null(即空)数据。插入数据如果该字段为空将会报错。
            关键字
                not null
            语法
                创建表时
                    create table  表名(
   字段名 字段类型 not null,
    ......
);
                修改表时
                    alter table 表名 modify 字段 类型 not null
        默认值约束
            作用
                被默认值约束的字段,相当于给字段添加默认值,插入数据时如果字段没有被赋值,则使用默认值
            关键字
                default
            语法
                创建表时
                    create table  表名(
   字段名  字段类型 default 默认值,
   其他字段
);
                修改表时
                    alter  table 表名 modify 字段 类型 default 默认值;
        小结
            
    表关系与外键约束
        一对多(1:n)关系表设计
            在从表(多方)创建一个字段作为外键,从表外键值指向主表(一方)的主键。
            例如:班级和学生,部门和员工,客户和订单,分类和商品
        多对多(m:n)关系表设计
            需要创建第三张表作为中间表,中间表至少两个字段,这两个字段分别作为外键指向各自一方的主键。
            例如:老师和学生,学生和课程,用户和角色
        一对一(1:1)关系表设计
            外键唯一
                任选一方为从表建立唯一约束的外键
            主外键一体
                主表的主键和从表的主键,形成主外键关系
        外键约束
            概述
                外键就是从表中设定一个字段,用来保存主表中的主键值。外键约束了从表的外键值只能是主表的主键值。
            语法
                创建表时
                    create table 表名(
    其他字段
    外键字段名 int,
    constraint  外键名 foreign key (当前表外键字段名 ) references 主表名(主表主键)
);

 

                关键字
                    constraint 外键名称
                        表示约束,并给约束指定名称
                    foreign key(当前表外键字段名)
                        表示给当前表字段添加外键
                    references 主表(主表主键)
                        表示关联主表中的主键 
                修改表时
                    alter table 表名 add constraint 外键名 foreign key(当前表外键字段名) references 主表(主表主键);
                外键删除
                    alter table 从表名 drop foreign key 外键名称;
            注意事项
                添加数据时
                    先添加主表中的数据,再添加从表中的数据
                删除数据时
                    先删从表中的数据,再删主表中的数据
                修改数据时
                    如果主表中的主键被从表引用了,不能修改此主键的值
            外键的级联
                级联操作就是在修改或者删除主键时可以同时对从表的外键进行修改删除
                设置语法
                    on update cascade 
                        表示主表进行更新操作后,从表对应的数据也要进行更新操作
                    on delete cascade
                        表示主表进行主键删除后,从表外键对应的数据也要删除;
        小结
            
    多表查询
        笛卡尔积
            作用
                作用:同时获取两张或多张表数据
            语法
                select * from 表一,表二;
            消除方式
                从表.外键 = 主表.主键
        连接查询
            内连接查询
                作用
                    把多张表中相互关联的数据查询出来,两表直接关联的数据
                隐式内连接
                    select 列名 from 左表,右表 where 从表.外键=主表.主键
                显式内连接
                    select 列名 from 左表 [inner] join 右表 on 从表.外键=主表.主键
            外连接查询
                左外连接
                    select 列名 from 左表 left join 右表 on 从表.外键=主表.主键
                右外连接
                    select 列名 from 左表 right join 右表 on 从表.外键=主表.主键
                
        子查询
            作用
                子查询就是将一个查询的结果做为另一个查询的条件,形成查询语句的嵌套,嵌套的SQL查询就是子查询,子查询语句需要使用括号括起来。
            单行单列
                如果子查询是单行单列,父查询使用比较运算符:>  < = 等符号连接
            多行单列
                如果子查询是多行单列,可以认为是一个数组,父查询使用in、any 、all关键字
                
            多行多列
                如果子查询是多行多列,子查询可以认为它是一张虚拟表,可以使用表连接再次进行多表查询
                
    事务
        事务简介
            数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令
            简单理解 : 如果一个包含多个步骤的业务操作 , 被事务管理 , 要么这些操作同时操作成功 , 要么同时失败
            事务是一个不可分割的工作逻辑单元
        事务操作
            操作方式
                自动提交事务(默认的):在执行一条sql语句时自动开启及提交一次事务;
                手动提交事务:先开启,再提交;如果我们自己管理事物,那么Mysql将不再自动管理事务
            执行流程
                
            语法
                开启事务: start transaction;
提交事务: commit;
回滚事务: rollback;
            提交事务的方式
                自动提交
                    mysql就是自动提交的
                             一条DML(增删改)语句会自动提交一次事务
                手动提交
                    Oracle默认就是手动提交事务
                        需要先开启事务,再提交
            修改事务提交方式
                查看事务的默认提交方式:SELECT @@autocommit; 
                    1 代表自动提交  
                    0 代表手动提交
                修改默认提交方式
                    set @@autocommit = 0;  

注意 : 如果修改了手动提交任务,增删改之后需要执行commit
            如何开启事务? 
                1) mysql默认事务自动开启,在进行增删改时,无需手动提交;

2) 通过start transaction可以手动开启事务,那么这个开启的事务就需要手动提交
            如何提交事务和回滚事务?
                commit;
rollback;
        事务四大特征
            隔离性(Isolation)
                多个用户并发的访问数据库时,一个用户的事务不能被其他用户的事务干扰,多个并发的事务之间要相互隔离。
                
            持久性(Durability)
                当事务提交或回滚后,数据库会持久化的保存数据。
                
            原子性(Atomicity) 
                原子是不可分割的最小操作单位,事务要么同时成功,要么同时失败
            一致性(Consistency)
                事务操作前后,数据总量不变
        事务并发访问问题
            事务的并发访问引发的三个问题
                事务在操作时的理想状态:多个事务之间互不影响,如果隔离级别设置不当就可能引发并发访问问题。
                
                脏读
                    脏读是一个事务,读取到另一个事务中没有提交的数据
                不可重复读
                    在一个事务内多次读取表中的数据,多次读取的内容不同,多发生在其他事务update操作时
                幻读(虚读)
                    一个事务内读取到了别的事务插入或者删除的数据,导致前后读取记录行数不同,多发生在delete或insert时
        事务的隔离级别
            
            说明:
                其实上述三个问题中,最严重的就是脏读(读取了错误数据),这个问题一定要避免;
关于不可重复读和虚读其实并不是逻辑上的错误,而是数据的时效性问题,所以这种问题并不属于很严重的错误;
如果对于数据的时效性要求不是很高的情况下,我们是可以接受不可重复读和虚读的情况发生的;
            安全和性能对比
                安全: 串行化>可重复读>读已提交>读未提交 
                性能: 串行化<可重复读<读已提交<读未提交 
            数据库有哪些隔离级别?
                1.读未提交: 
                    会出现 : 脏读,不可重复读,幻读
                2.读已提交:
                    会出现 : 不可重复读,幻读
                3.可重复读:    
                    会出现 : 幻读
                4.串行化
            Mysql数据库默认的隔离级别是什么?
                epeatable read (可重复读)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值