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