十五、python學習之MySQL資料庫(二):資料庫的操作
一、資料庫的操作:
1.資料庫操作的概述:
在資料庫操作中,基本操作都是圍繞增刪改查來操作。簡稱CRUD
- C Create 建立
- R Read/Retrieve 查詢
- U Update 修改
- D Delete 刪除
2.資料庫操作
在數操作資料庫時,所有的資料庫語句都要以分號結束
資料庫操作不區分大小寫
- 建立資料庫
- create database 資料庫名
create database testdb;
- create database 資料庫名 character set utf8
create database testdb2 character set utf8;
-
顯示資料庫建立資訊 show create database 資料庫名
show create database testdb;
-
修改資料庫編碼 alter database 資料庫名 character set utf8
alter database testdb charset=utf8;
-
顯示所有資料庫
show databases;
刪除資料庫 drop database 資料庫名
drop database testdb2;
二、資料表的操作:
1.建立資料表:
create table 表名(屬性1 資料型別1[...] [,...])
--建立一個學生資訊表,屬性有學號(sid),姓名(sname),年齡(sage),性別(sgender)
create table student(sid int(11), sname varchar(30), sage smallint, sgender char(2));
2. 檢視當前資料庫所有擁有的資料表:
use 資料庫名; # 指定資料庫
show tables; # 顯示所有資料表
3.顯示建立資訊:
show create table 表名;
或者:
show create table 表名 \G # 結構化輸出,以記錄條目形式顯示 .\G後不用加分號
或者:查看錶結構
desc 表名;
4.使用alter table修改表結構:
4.1 增加欄位: 為已存在的表新增一個新的欄位:
語法: alter table 表名 add 列名 資料型別;
4.2 刪除欄位:在變種刪除一個已經存在的欄位:
語法: alter table 表名 drop 列名;
4.3 修改資料型別:修改表中現有欄位的資料型別:
語法: alter table 表名 modify 列名 新資料型別;
4.4 修改列的名及資料型別:修改表中現有欄位的列名和資料型別
語法:alter table 表名 change 原列名 新類名 新資料型別;
三、Mysql常用的資料資料型別:
資料表是由若干個欄位組成的,每個欄位表示不同型別的資料。所以在建立表的時候,需要為每個欄位指定相應的資料型別。
- 整數型別:
- 小數型別:
- 字串型別:
- 列舉類型別(派生自整型):
enum('男', '女')
- 時間型別:
四、增刪改查:
1.查詢資料:
作用:查詢資料就是客戶端通過DBMS從資料庫中取出滿足條件的資料。
語法:select 欄位名列表 from 表名;
2.插入資料:
作用:向資料庫中插入資料。
語法:insert into 表明[(欄位名,...)] values (值列表, ...);
2.1 插入所有欄位資料:
不指定插入的欄位,直接寫插入的資料。
insert into tstudent values(1001, "小明", 18, "男");
2.2 插入指定欄位,指定欄位順序和列中順序可以不同,值順序要和指定的列表准許相同。
insert into tstudent(sid, sname, sage) values(1001, "小明", 18);
2.3 插入多條資料:
insert into tstudent(sid, sname, sage) values(1001, "小明", 18), (1002, "小剛", 19);
3.修改資料:
作用:可以根據指定的條件,修改更新滿足條件的資料。
語法:updata 表明 set 欄位 = 值 [條件]
3.1更新所有資料:
update 表名 set 欄位名=值;
update stu set sage = 25;
3.2 更新滿足條件的資料
updata 表名 set 欄位 = 值 where 條件;
update stu set sname = 'alice' where sname = "tony";
4. 刪除資料:
作用:將資料從資料表中刪除
語法1: truncate 表名
語法2: delete from 表名 [條件]
4.1 刪除全部的資料:
/*方法一:*/
truncate stu; --truncate 表名; -> 刪除表中全部資料
/*方法二:*/
delete from stu; --不需要加條件,也不能加條件,刪除全部資料,重置自動編號到預設值,沒有事務,速度快。
/* 相當於 truncate stu,但是delete操作有事務操作,所以速度慢,而且不會重置自動編號。 */
4.2 刪除滿足條件的資料
/* 刪除stu表中snumber=1的資料 */
delete from stu where snumber= 1;
五、新增約束:
約束是一種限制,它通過對錶的行或列的資料做出限制,來確保表的資料的準確性,完整性、唯一性,可靠性、聯動性。
1.沒有約束時的問題:
- 資料冗餘;
- 失去資料完整性;
- 資料缺少唯一標識;
- 失去實體完整性;
- 失去域完整性;
- 失去引用完整性;
2. 資料常用約束:
2.1 主鍵約束:
作用:讓資料具有唯一標識
語法: primary key
- 在建立是設定主鍵約束:
create table t_student(sid int primary key, sname verchar(30));
- 建立後修改欄位:
/* 使用 alter table 表名 add constraint 約束名 primary key (ID) 新增主鍵約束*/
alter table student add constraint primary key(sid);
欄位被設定了主鍵約束,同時也具有了唯一性約束和非空約束。 在欄位中插入重複資料時,或不給資料時會報錯。
2.2 自增長:
作用:讓數字值自動累加
語法:auto_increment
自增長設定在數值型別欄位上,需要配合主鍵約束一起使用。如果沒有設定逐漸約束,是不允許設定自動增長的
/* 將主鍵sid設定成自動增長 */
create table t_student(sid int primary key auto_increment, sname varchar(30));
2.3 唯一性約束:
作用:保證資料的準確性,不會出現重複資料
語法:unique
create table t_student(sid int primary key auto_increment, sname varchar(30) unique);
一個表中可以給多個欄位設定唯一性,如果有需要的話。
2.4 非空約束:
作用:
不允許欄位為空,新增資料時必須給值
語法:not null
/*設定sname欄位為非空欄位*/
create table t_student(sid int, sname varchar(20) not null);
2.5 預設值:
作用:在新增資料是,如果沒有給定有預設約束欄位的資料,該欄位使用預設值填充語法:default
/* 給sname設定預設值NoName */
create table t_student(id int, name varchar(20) default "NoName");
2.6 外來鍵約束:
作用:讓兩表之間產生聯動關係。
語法:foreign key (欄位名) references 表名(欄位名)
--表1
create table t_class(cid int primary key, cname varchar(20));
--表2
create table t_student(sid int primary key, sname varchar(20), cid int, foreign key(cid) references)
設定外來鍵約束欄位所關聯的欄位,必須是主鍵約束欄位。
想要刪除有設定外來鍵的表,必須先刪除外來鍵所關聯的表或者解除外來鍵(如何解除外來鍵,請謹慎的往下看)。
2.7 檢查約束(在Mysql中):
作用:設定欄位的域範圍,也就是有效值範圍
語法:check(值範圍條件)
create table t_student(sid int primary key, sname varchar(20), sage int check(sage>0 and sage < 150), sgender char(10) check("boy" and "girl"));
3. 增加、刪除約束:
新增約束前應該保證該欄位上沒有新新增的約束,刪除約束前應保證該欄位上存在該約束.
3.1新增主鍵約束:
語法: alter table 表名 add constraint 約束名 primary key(欄位)
alter table t_student add constraint pk_id primary key(sid);
3.2 刪除主鍵約束:
語法:alter table 表名 drop primary key
alter table t_student drop primary key;
3.3 新增外來鍵:
語法: alter table 表名 add constraint 外來鍵約束名 foreign key(外來鍵欄位名) references 關聯表(關聯欄位)
/* t_student表的cid與t_class表的cid關聯 */
alter table t_student add constraint FK_id foreign key (cid) referances t_class(cid);
3.4 刪除外來鍵約束:
語法: alter table 表名 drop foreign key 外來鍵約束名
alter table t_student drop foreign key FK_id;
4.資料庫匯入匯出:
作用:使用資料庫匯入河道處功能,可以完成對資料庫的備份和遷移等操作.
4.1匯出資料庫:匯出資料庫使用mysqldump命令完成(在bash下操作)
語法: mysqldump -u root -p (注意不要輸入密碼) 要匯出的資料庫[(要匯出的資料表,..)] > 目標檔名.sql
4.1.1匯出整個資料庫:
# 匯出school資料庫並命名為school_bak.sql
mysqldump -u root -p school > school_bak.sql
4.1.2 匯出庫中的指定表
# 匯出school資料庫中的t_student表並命名為student_bak.sql
mysqldump -u root -p school t_student > student_bak.sql
4.2 匯入資料庫:
4.2.1 匯入資料庫前需要先建立一個空資料庫
4.2.2 語法:mysql -uroot -p 資料庫名 < 要匯入的檔案.sql
# 匯入school_bak.sql到資料庫school
mysql -u root -p school < school_bak.sql
也可以在mysql客戶端中使用:
-- 匯入./路徑下schoole.sql到當前資料庫
sources ./school.sql
5.資料表設計思想:
- 需求分析:根據使用者的需求,分析出需要記錄的資料
- 需求設計:根據分析出的資料,設計E-R模型圖
- 詳細設計:將E-R模型圖轉換成資料表
- 三大正規化:使用資料庫三大正規化的設計思想對資料表進行稽核
5.1 E-R模型圖:
概念:Entity-Relationship,實體關係圖 組成元素
E-R圖應用案例:將下邊的專案需求,通過ER圖形表示出來:
表示關係:
5.2 三大正規化:
資料庫在設計時,需要滿足三大正規化的設計思想。
三大正規化的理論非常抽象,有興趣可以查閱資料進行了解,
下面以簡單的形式描述三大正規化,方便大家有一個簡單的概念上的理解。
-
第一正規化 : 每一列都具有原子性,也就是不能再分割
-
第二正規化 : 每個表只描述一件事情
-
三正規化 : 表中不能存在冗餘欄位