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

相關文章
相關標籤/搜索