MySQL學習筆記二

數據導入

  1. 作用:將文件系統的內容導入到數據庫中
  2. 語法格式:
load data infile "文件名" 
into table 表名
fields terminated by "分隔符"
lines terminated by “分隔符”
  1. 把/etc/passwd導入到mysql數據庫中
  2. 操作步驟:
    (1) 在數據庫中創建對應的表
    在這裏插入圖片描述
    (2) 查看數據庫的默認搜索路徑
show variables like "secure_file_priv";

在這裏插入圖片描述
(3) 將系統文件拷貝到數據庫的默認搜索路徑中

sudo cp /etc/passwd /var/lib/mysql-files

在這裏插入圖片描述
在這裏插入圖片描述
(4) 將文件導入到數據庫表中
在這裏插入圖片描述

數據導出

  1. 作用:將數據庫中表的記錄保存到系統文件中
  2. 語法格式:
select .. from 表名
into outfile “文件名”
fields terminated by "分隔符"
lines terminated by "分隔符";
  1. 將userinfo 表中的用戶名、密碼和uid號三個字段導出到userinfo.txt中
    在這裏插入圖片描述
    將庫名mysql庫中的user表中的User,Host兩個字段值導出到user2.txt
    在這裏插入圖片描述
  2. 注意
    (1) 導出的內容由SQL查詢語句決定
    (2) 執行導出命令時路徑必須指定在對應的數據庫目錄下

表的複製

  1. 語法格式
create table 表名 select 查詢命令;
只複製表機構
  1. 語法格式
create table 表名 select ... where false;
  1. 示例:只複製t2的表結構
create table new_t2 select * from t2 where false;
  1. 注意:
    複製表的時候不會把原有表鍵的屬性複製過來

嵌套查詢

  1. 定義:把內層的查詢結果作爲外層查詢的條件
  2. 語法格式
select 查詢語句 where 條件(select 查詢語句);
  1. 示例:
# 將X_ID小於X_ID的平均值中的記錄查找出來
select * from xian where X_ID < (select avg(X_ID) from xian)

多表查詢

左連接
  1. 定義:以左表爲主顯示查詢結果
  2. 語法:
select 字段名列表 from 表1 left join 表2 on 條件;
  1. 示例:
# 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;
右連接
  1. 定義:以右表爲主顯示查詢結果
  2. 語法:
select 字段名列表 from 表1 right join 表2 on 條件;
  1. 示例:
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 ...		備份制定庫的指定表

示例:

  1. 備份所有庫爲all_mysql.sql放到主目錄下mydata目錄中
mysqldump -uroot -p --all-databases > home/parallels/mydata/all_mysql.sql
  1. 備份3個庫,放到mydata目錄中
mysqldump -uroot -p -B db1 db2 db3 > /home/parallels/mydata/three_db.sql
  1. 備份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. 實體
    定義:現實世界中任何可以被認知、區分的食物
    示例:學校:學生、教師、課程、班主任。。。
    企業:職工、產品
  2. 屬性
    定義:實體所具有的特性
    示例:學生屬性:學號、姓名、班級、年齡、性別、專業。。。
    產品屬性:產品編號、產品名稱、產品規格。。。
  3. 關係
    定義:實體之間的關係
    分類:一對一關係(1:1): 班級和班長
    一對多關係(1:n):公司和職工,班級和學生
    多對多關係(m:n):學生和課程,商店和顧客
  4. ER圖的繪製
    矩形框代表實體,菱形框代表關係,橢圓形代表屬性
    示例:學生選課系統的ER圖
    在這裏插入圖片描述

事務&事務回滾

事務定義

一件事從開始發生到結束的整個過程

事務的屬性
  1. 原子性
    原子性是指一個事務是不可分割的工作單位,事務中的各個操作要麼都做,要麼都不做
  2. 一致性
    事務必須從一個一致性狀態到另一個一致性狀態
  3. 隔離性
    一個事務的執行不能被其他併發事務干擾
  4. 持久性
    一個事務一旦提交,它對數據庫的改變是永久性的
事務及事務回滾的應用
  1. mysql中默認sql語句會自動commit到數據庫
show variables like "autocommit";
  1. 開啓一個事務
start transaction;
## 此時autocommit會被禁用,sql命令不會對數據庫中數據做任何修改
  1. 終止事務
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)
  1. 定義:爲開發人員提供 數據庫應用變成接口
  2. 支持的數據庫服務軟件:MySQL, Oracle, SQL_Server, Mogodb
  3. Python提供的操作MySQL的模塊
    模塊名:pymysql
  4. 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. 建立數據庫連接
    (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() 關閉遊標對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章