mysql 备份 恢复 事物 ER模型 pymysql交互

MySQL-Day03回顾
一、索引
    一、普通索引(index)
    二、惟一索引(unique)
    三、主键索引&自增加(PRI,不容许重复且不能为NULL)
        一、注意
            一个表中只能有一个主键字段,常把编号设为主键字段
        二、建立表时建立主键
            一、字段名 数据类型 primary key auto_increment,
            二、primary key(字段名)
        三、在已有表中建立主键
            alter table 表名 add primary key(字段名);
        四、删除主键
            一、先删除自增加属性(modify)
                alter table 表名 modify 字段名 数据类型;
            二、再删除主键(drop)
                alter table 表名 drop primary key;
        五、在已有表中添加自增加属性(modify)
            alter table 表名 modify 字段名 数据类型 primary key auto_increment;
    四、外键索引(foreign key)
        一、做用:让当前表字段值在另外一个表的范围内选择
        二、建立表时建立
            一、foreign key(参考字段名)
                references 被参考表名(被参考字段名)
                on delete 级联动做
                on update 级联动做
        三、在已有表中建立
            alter table 表名 add foreign key(参考字段名)
            references 被参考表名(被参考字段名)
            on delete 级联动做
            on update 级联动做
            ## 在已有表中添加外键会受到表中原有数据的限制
        四、级联动做
            一、cascade(级联更新)
                一、当主表删除记录时,从表级联删除
                二、当主表更新被参考字段值时,从表级联更新
            二、restrict(检查外键限制,默认)
                一、当主表删除记录时,从表有相关联记录则不让主表删除
                二、当主表更新被参考字段值时,从表有相关联记录则不让主表更新
            三、set null
                一、当主表删除记录时,从表中相关联记录的参考字段值设置为NULL
                二、当主表更新记录时,从表中相关联记录的参考字段值设置为NULL
            四、no action(同restrict,当即检查外键限制)
        五、使用规则
            一、两张表被参考字段和参考字段数据类型要一致
            二、被参考字段必须是key的一种,通常是primary key
        六、删除外键
            一、查看外键名
                show create table 表名;
            二、删除外键限制
                alter table 表名 drop foreign key 外键名;
二、数据导入
    一、语法格式
        load data infile "文件名"
        into table 表名
        fields terminated by "分隔符"
        lines terminated by "分隔符"
        ## 文件名处要写绝对路径
    二、数据导入步骤
        一、在数据库中建立的对应的表
        二、查看数据库的搜索路径
            show variables like "secure_file_priv";
        三、将文件拷贝到搜索路径中
            ~$ sudo cp 文件名 搜索路径
        四、执行导入命令
            mysql> load data infile ...
三、数据导出
    一、语法格式
        select 字段名列表 from 表名
        into outfile "文件名"
        fields terminated by "分隔符"
        lines terminated by "分隔符"
        ## 文件名必需要写绝对路径
    二、数据导出步骤
        一、查看数据库搜索路径
            show variables like "%secure%";
        二、执行导出命令
            mysql> ...
四、表复制
    一、语法格式: create table 表名 select查询语句;
    二、复制表结构
        create table 表名 select * from 表名 where false;
    三、注意:复制表不会把原表的 键 属性复制过来
五、嵌套查询
    一、定义:把内层的查询结果做为外层的查询条件
    二、语法格式
        select 查询语句 where 字段名 运算符(select查询语句);
六、多表查询
    一、笛卡尔积(不加where条件)
        select 字段名列表 from 表名列表;
    二、加where条件
        select 字段名列表 from 表名列表 where 条件;
七、链接查询
    一、内链接(inner join)
        一、语法格式
            select 字段名列表 from 表1 inner join 表2 on 条件 ...;
         ### 只显示匹配到的行
    二、外链接
        一、左链接(以左表为主显示查询结果left join)
            select 字段名列表 from 表1 left join 表2 on 条件..
        二、右链接(以右表为主显示查询结果right join)
            select 字段名列表 from 表1 right join 表2 on 条件..
    三、补充
        一、select sheng.S_name,city.C_name from sheng
             left join city on sheng.S_ID=city.CFather_ID;
        二、select sheng.S_name,city.C_name,xian.X_name
             from sheng left join city
             on city.CFather_ID=sheng.S_ID
             left join xian on city.C_ID=xian.XFather_ID;
二、数据备份(在Linux终端操做)
    一、命令格式
        mysqldump -u用户名 -p 源库名 > 路径/XXX.sql
    二、源库名的表示方式
        --all-databases    备份全部库
        库名               备份单个库
        -B 库1 库2 ...     备份多个库
        库名 表1 表2 ...   备份指定库的指定表
    三、练习
        一、备份全部库为all_mysql.sql放到主目录下mydata目录中
        二、备份三个库,放到mydata目录中
        三、备份省、市、县三张表
三、数据恢复(在Linux终端操做)
    一、命令格式
        mysql -uroot -p 目标库名 < 路径/XXX.sql
    二、从全部库的备份文件中恢复某一个库(--one-database)
        mysql -uroot -p --one-database 目标库名 < 路径/all_mysql.sql
    三、练习
        一、先备份db3库,删除省、市、县三张表
        二、在db3库中建立一张表 t888
            create table t888(id int);
        三、恢复db3库
    四、注意
        一、恢复库时若是恢复到原有库会将表中数据覆盖,新增的表不会删除
        二、在恢复时若是要恢复的库不存在,则先要建立空库
四、ER模型&ER图
    一、定义
        ER模型即实体-关系模型,ER图即实体-关系图
    二、三个概念
        一、实体
            一、定义:现实世界中任何能够被认知、区分的事物
            二、示例
                一、学校 :学生、教师、课程、班主任 ...
                二、企业 :职工、产品
        二、属性
            一、定义 :实体所具备的特性
            二、示例
                一、学生属性:学号、姓名、年龄、性别、专业 ...
                二、产品属性:产品编号、产品名称、规格 ...
        三、关系
            一、定义 :实体之间的关系
            二、分类
                一对一关系(1:1) 班级和班长
                一对多关系(1:n) 公司和职工、班级和学生
                多对多关系(m:n) 学生和课程、商店和顾客
        四、ER图的绘制
            一、矩形框表明实体,菱形框表明关系,椭圆形表明属性
            二、示例
                学生选课系统
五、workbench(图形化界面操做数据库)
六、事务&事务回滚
    一、事务定义
        一件事从开始发生到结束的整个过程
    二、属性
        一、原子性:一个事务是不可分割的工做单位,事务中的各个操做要么都作,要么就都不作
        二、一致性:事务必须从一个一致性状态到另外一个一致性状态
        三、隔离性:一个事务的执行不能被其余并发事务干扰
        四、持久性:一个事务一旦提交,它对数据库的改变是永久性的
    三、事务及事务回滚的应用
        一、mysql中默认sql语句会自动commit到数据库
            show variables like "autocommit";
        二、事务应用
            一、开启事务
                mysql> start transaction;
                ## 此时autocommit被禁用,SQL命令不会对数据库中数据作修改
            二、终止事务
                mysql> commit; | rollback;
        三、注意
            事务&事务回滚只针对对表记录的操做:增长、删除、修改,对建立库、建立表是无效的
        四、案例
            一、背景
                你 :   建行卡
                你朋友:工商卡
                你在建行的自动提款机给你朋友(工商银行卡)转帐
            二、过程
                表一、建行:CCB
                表二、工行:ICBC

                ###开始转帐
                mysql>start transaction;
                mysql>update CCB set money=95000 where name="你";
                mysql>update ICBC set ... 断电了...;
                mysql>rollback

                ###验证
                mysql>select * from CCB;
七、Python数据库编程
    一、python数据库接口(Python DB-API)
        一、定义:为开发人员提供的数据库应用编程接口
        二、支持的数据库服务软件
            MySQL、Oracle、SQL_Server、Sybase、Mogodb ...
        三、Python提供的操做MySQL的模块
            模块名:pymysql
        四、pymysql的使用流程
            一、创建数据库链接
            二、建立游标对象
            三、使用游标对象的方法和SQL语句操控MySQL数据库
            四、提交commit
            五、关闭游标
            六、关闭数据库链接
        五、创建数据库链接
            一、语法格式
                对象名(db) = pymysql.connect("主机地址","用户名","密码","库名",charset="utf8")
            二、connect对象(db)的方法
                一、cursor() 建立一个游标对象db.cursor()
                二、commit() 提交到数据库 db.commit()
                三、rollback() 回滚 db.rollback()
                四、close() 关闭与数据库的链接 db.close()
            三、cursor游标对象(cur)的方法
                一、execute() 执行sql命令
                二、fetchone() 取得结果集的第一条记录
                三、fetchmany(数字) 取得结果集的 几条 记录
                四、fetchall() 取得结果集的全部行
                五、close() 关闭游标对象
                属性:rowcount : 返回命令执行所影响的条数
        
        pymysql.connect --->>db ---> db.cursor() ----> 执行


        
            

    
    
    















python

相关文章
相关标签/搜索