文章目錄
數據導入
- 作用:將文件系統的內容導入到數據庫中
- 語法格式:
load data infile "文件名"
into table 表名
fields terminated by "分隔符"
lines terminated by “分隔符”
- 把/etc/passwd導入到mysql數據庫中
- 操作步驟:
(1) 在數據庫中創建對應的表
(2) 查看數據庫的默認搜索路徑
show variables like "secure_file_priv";
(3) 將系統文件拷貝到數據庫的默認搜索路徑中
sudo cp /etc/passwd /var/lib/mysql-files
(4) 將文件導入到數據庫表中
數據導出
- 作用:將數據庫中表的記錄保存到系統文件中
- 語法格式:
select .. from 表名
into outfile “文件名”
fields terminated by "分隔符"
lines terminated by "分隔符";
- 將userinfo 表中的用戶名、密碼和uid號三個字段導出到userinfo.txt中
將庫名mysql庫中的user表中的User,Host兩個字段值導出到user2.txt
- 注意
(1) 導出的內容由SQL查詢語句決定
(2) 執行導出命令時路徑必須指定在對應的數據庫目錄下
表的複製
- 語法格式
create table 表名 select 查詢命令;
只複製表機構
- 語法格式
create table 表名 select ... where false;
- 示例:只複製t2的表結構
create table new_t2 select * from t2 where false;
- 注意:
複製表的時候不會把原有表鍵的屬性複製過來
嵌套查詢
- 定義:把內層的查詢結果作爲外層查詢的條件
- 語法格式
select 查詢語句 where 條件(select 查詢語句);
- 示例:
# 將X_ID小於X_ID的平均值中的記錄查找出來
select * from xian where X_ID < (select avg(X_ID) from xian)
多表查詢
左連接
- 定義:以左表爲主顯示查詢結果
- 語法:
select 字段名列表 from 表1 left join 表2 on 條件;
- 示例:
# 1. 以左表爲準顯示省市的信息
select sheng.S_name, city.C_name from sheng left join city on sheng.S_ID = city.CFather_ID;
# 2. 顯示省、市、區的信息,要求市全部顯示
select sheng.S_name, city.C_name, xian.X_name from city left join sheng on sheng.S_ID = city.CFather_ID left join xian on city.C_ID = xian.XFather_ID;
右連接
- 定義:以右表爲主顯示查詢結果
- 語法:
select 字段名列表 from 表1 right join 表2 on 條件;
- 示例:
select sheng.S_name, city.C_name from sheng right join city on sheng.S_ID = city.CFather_ID;
數據備份(在linux終端操作)
命令格式
mysqldump -u用戶名 -p 源庫名 > 路徑
示例:將db3備份到mydata/db3.sql中
源庫名的表示方式
--all--databases 備份所有庫
庫名 備份單個庫
-B 庫1 庫2... 備份多個庫
庫名 表1 表2 ... 備份制定庫的指定表
示例:
- 備份所有庫爲all_mysql.sql放到主目錄下mydata目錄中
mysqldump -uroot -p --all-databases > home/parallels/mydata/all_mysql.sql
- 備份3個庫,放到mydata目錄中
mysqldump -uroot -p -B db1 db2 db3 > /home/parallels/mydata/three_db.sql
- 備份db3的三張表
mysqldump -uroot -p db3 t1 t2 t3 > /home/parallels/mydata/dbetable.sql
數據恢復(在linux終端操作)
命令格式
mysql -uroot -p 目標庫名 < 路徑
示例:恢復db3數據庫
--首先創建db3
create database db3;
--恢復命令
mysql -uroot -p db3 < /home/parallels/mydata/db3.sql
從所有庫的備份文件中恢復某一個庫(–one-database)
mysql -uroot -p --one-database 目標庫名 < 備份文件的路徑
示例:
--首先創建db3
create database db3;
--恢復命令
mysql -uroot -p --one-database db3 < /home/parallels/mydata/all_mysql.sql
注意:
(1)恢復庫時如果恢復到原有庫會將表中數據覆蓋,但新增的表不會刪除
(2)在恢復時,如果恢復的庫不存在,則先要創建空庫
ER模型&ER圖
定義
ER模型即實體-關係模型,ER圖即實體-關係圖
三個概念
- 實體
定義:現實世界中任何可以被認知、區分的食物
示例:學校:學生、教師、課程、班主任。。。
企業:職工、產品 - 屬性
定義:實體所具有的特性
示例:學生屬性:學號、姓名、班級、年齡、性別、專業。。。
產品屬性:產品編號、產品名稱、產品規格。。。 - 關係
定義:實體之間的關係
分類:一對一關係(1:1): 班級和班長
一對多關係(1:n):公司和職工,班級和學生
多對多關係(m:n):學生和課程,商店和顧客 - ER圖的繪製
矩形框代表實體,菱形框代表關係,橢圓形代表屬性
示例:學生選課系統的ER圖
事務&事務回滾
事務定義
一件事從開始發生到結束的整個過程
事務的屬性
- 原子性
原子性是指一個事務是不可分割的工作單位,事務中的各個操作要麼都做,要麼都不做 - 一致性
事務必須從一個一致性狀態到另一個一致性狀態 - 隔離性
一個事務的執行不能被其他併發事務干擾 - 持久性
一個事務一旦提交,它對數據庫的改變是永久性的
事務及事務回滾的應用
- mysql中默認sql語句會自動commit到數據庫
show variables like "autocommit";
- 開啓一個事務
start transaction;
## 此時autocommit會被禁用,sql命令不會對數據庫中數據做任何修改
- 終止事務
commit; ## 提交
rollback; ## 回滾
事務回滾(rollback)只針對對錶記錄的操作:增加、刪除、修改,對創建庫、創建表是無效的。
4. 示例
你:建行卡
你朋友:工商卡
你在建行的自動提款機給你朋友(工商銀行卡)轉賬
過程:
表1、建行:CCB
表2、工行:ICBC
開始轉賬
start transaction;
update CCB set money=95000 where name="你"
update ICBC set ... 斷電了...
rollback;
Python 數據庫變成
python數據庫接口(Python DB-API)
- 定義:爲開發人員提供 數據庫應用變成接口
- 支持的數據庫服務軟件:MySQL, Oracle, SQL_Server, Mogodb
- Python提供的操作MySQL的模塊
模塊名:pymysql - pymysql的使用流程
(1) 建立數據庫連接
(2) 創建遊標對象
(3) 使用遊標對象的方法和sql語句操控mysql數據庫
(4) 提交commit
(5) 關閉遊標
(6) 關閉數據庫連接
示例:
import pymysql
# 打開數據庫連接
db = pymysql.connect("localhost",
"root",
"22495249Pan",
charset="utf8")
# 創建遊標對象
cur = db.cursor()
# 創建庫Python
cur.execute("create database python;")
# 切換庫
cur.execute("use python;")
# 創建表t1
cur.execute("create table t1(\
id int primary key, \
name varchar(20), \
score tinyint unsigned);")
# 在t1中插入5條記錄
cur.execute("insert into t1 values\
(1, 'xiaomaomao', 88), \
(2, 'xiaoxiaomao', 90), \
(3, 'shishi', 80), \
(4, 'xiaomao', 90), \
(5, 'cat', 88);")
# 提交到數據庫
db.commit()
# 關閉遊標
cur.close()
# 關閉數據庫
db.close()
- 建立數據庫連接
(1) 語法格式
對象名 = pymysql.connect(“主機地址”, “用戶名”, “密碼”, “庫名”, charset=“utf8”)
(2) connect 對象(db)的方法
cursor() 創建一個遊標對象db.cursor()
commit() 提交到數據庫 db.commit()
rollback() 回滾 db.rollback()
close() 關閉與數據庫的連接db.close()
(3) cursor遊標對象(cur)的方法
execute() 執行sql命令
fetchone() 取得結果集的第一條記錄
fetchmany(數字) 取得結果集的幾條記錄
fetchall() 取得結果集的所有行
close() 關閉遊標對象