淺談資料庫(五)
阿新 • • 發佈:2018-11-10
1、資料備份(mysqldump,在Linux終端操作) 1、命令格式 mysqldump -u使用者名稱 -p 源庫名 > ***.sql 2、源庫名的表示方式 --all-databases 備份所有庫 庫名 備份1個庫 -B 庫1 庫2 庫3 備份多個庫 庫名 表1 表2 表3 備份多張表 3、練習 1、備份所有庫,放到mydata目錄下 :All.sql mysqldump -uroot -p --all-databases > All.sql 2、備份db4庫中的 sheng、city、xian三張表,db4scx.sql mysqldump -uroot -p db4 sheng city xian > db4scx.sql 3、備份MOSHOU和db4兩個庫,md.sql mysqldump -uroot -p -B db4 MOSHOU > md.sql 2、資料恢復 1、命令格式(Linux終端) mysql -u使用者名稱 -p 目標庫名 < ***.sql 2、從所有庫備份All.sql中恢復某一個庫 mysql -u使用者名稱 -p --one-database 庫名 < All.sql mysql -uroot -p --one-database db4 < All.sql 3、示例 1、在db4.sheng新增一條記錄 insert into sheng values(null,300000,"黑龍江"); 2、在db4庫,新建一張表t888 create table t888(id int); 3、從 db4.sql 恢復db4庫 mysql -uroot -p db4 < db4.sql 注意 : 1、恢復庫時,如果恢復到原庫會將表中資料覆蓋,新增表不會刪除 2、恢復庫時,如果庫不存在,則必須先建立空庫 3、MySQL調優 1、建立索引 在select、where、order by常涉及到的欄位建立索引 2、選擇合適儲存引擎 1、讀操作多 :MyISAM 2、寫操作多 :InnoDB 3、SQL語句優化(避免全表掃描) 1、where子句儘量不使用 != ,否則放棄索引全表掃描 2、儘量避免NULL判斷,全表掃描 優化前: select number from t1 where number is null; 優化後: 在number欄位設定預設值0,確保number欄位無NULL select number from t1 where number=0; 3、儘量避免用or連線條件,否則全表掃描 優化前: select id from t1 where id=10 or id=20; 優化後: select id from t1 where id=10 union all select id from t1 where id=20; 4、模糊查詢儘量避免使用前置 %,否則全表掃描 select variable from t1 where name="secure%"; 5、儘量避免使用in和not in,否則全表掃描 優化前 : select id from t1 where id in(1,2,3,4); 優化後 : select id from t1 where id between 1 and 4; 6、不能使用 select * ... 用具體欄位代替*,不要返回用不到的任何欄位 4、事務和事務回滾 1、定義 :一件事從開始發生到結束的整個過程 2、作用 :確保資料一致性 3、事務和事務回滾應用 1、SQL命令會 autocommit 到資料庫執行 2、事務操作 1、開啟事務 mysql> begin; | start transactions; mysql> SQL命令 ... ## 此時autocommit被禁用 ## 2、終止事務 mysql> commit; | rollback; 3、案例 1、背景 你 :建行卡 朋友 :工行卡 你在建行自動取款機 給你朋友 轉5000塊錢 2、建表 表1、CCB create table CCB( name varchar(20), money decimal(20,2) ); insert into CCB values("有錢人",100000); 表2、ICBC create table ICBC( name varchar(20), money decimal(20,2) ); insert into ICBC values("沒錢人",0); 3、開始轉賬 成功: mysql> begin; mysql> update CCB set money=money-5000 where name="有錢人"; mysql> update ICBC set money=money+5000 where name="沒錢人"; mysql> commit; #####轉賬成功##### 失敗 : mysql> begin; mysql> update CCB set money=money-5000 where name="有錢人"; mysql> update ICBC set 工行伺服器故障... ; mysql> rollback; #####轉賬失敗##### 5、與Python互動 1、互動型別 1、python3 模組名 :pymysql 安裝 : 1、線上 :sudo pip3 install pymysql 2、離線 :pymysql.tar.gz 解壓:setup.py python3 setup.py install 2、python2 模組名 :MySQLdb 安裝 :sudo pip install mysql-python 2、pymysql使用流程 1、建立資料庫連線物件(db=pymysql.connect("root". 2、建立遊標物件cur(操作資料庫的物件) 3、遊標物件:cur.execute("insert into sheng ...;") 4、提交到資料庫執行 :db.commit() 5、關閉遊標物件cur.close() 6、關閉資料庫連線物件db.close() 示例 :01_pymysql示例.py 3、connect連線物件 1、db = pymysql.connect(引數列表) 1、host :主機地址 2、user :使用者名稱 3、password :密碼 4、database :庫 5、charset :編碼方式,推薦utf8 6、port :埠(3306) 2、db (資料庫連線物件) 的方法 1、db.close() :斷開連線 2、db.commit() :提交到資料庫執行 3、db.cursor() :遊標物件,用來執行SQL命令 4、db.rollback() :回滾 3、cursor 遊標物件 的方法 1、execute(SQL命令) :執行SQL命令 2、close() :關閉遊標物件 3、fetchone() :獲取查詢結果的第1條資料 4、fetchmany(n) :獲取n條資料 5、fetchall() :獲取所有資料 ## fetchmany(n) 和 fetchall() 得到的結果一定是一個大元組套著小元組 ((),(),()) 6、WorkBench 圖形化介面管理工具 Navicat : Windows中圖形化介面管理工具 7、orm(Object Relation Mapping) 物件關係對映 1、示例 import sqlalchemy class User: __tablename__ = "t1" id = Column(Integer,primary_key=True) name = Column(String(20)) 解釋: 一個類 User --> 資料庫1張表 表中2個欄位 :id 和 name