try catch finally,return執行
mysql 的概述
1.什麼是資料庫
資料庫就是一個 儲存資料的倉庫
2. 都有哪些公司在用資料庫
購物網站, 金融機構, 遊戲網站, 論壇網站
3. 提供資料庫服務的軟體
-
軟體分類
mysql sql_server oracle mariadb db2 mongodb
-
在生產環境中,如何選擇使用哪個資料庫
-
是否開源
- 開源軟體: 個人使用,免費, 企業使用, 收費 mysql mariadb mongodb
- 商業軟體: 收費 oracle db2 sql_server
-
是否跨平臺
- 不跨平臺: sql_server
- 跨平臺: 以上都是
-
公司的型別
商業軟體: 政府部門, 金融機構
開源軟體: 個人公司, 中小型企業
-
4.mysql 的特點
-
關係型資料庫
-
關係型資料庫的特點
- 資料是以行和列的形式去儲存的
- 這一系列的行和列稱為 表
- 表中的每一行 叫 一條記錄
- 表中的每一列 叫 一個欄位
- 表和表之間的邏輯關聯叫關係
-
什麼叫關係型資料庫
-
關係型資料庫儲存
表1 : 學生資訊表
姓名 年齡 班級
牛郎 25 aid1803
織女 23 aid1801
-
非關係型資料庫中儲存
-
-
-
跨平臺
可以在 unix linux windows 上執行資料庫服務
-
支援 多種程式語言
python, java, php ...
5. mysql 的安裝
-
ubuntu 安裝 mysql 服務 redhat(紅帽子),centos, ubuntu
-
安裝服務端
sudo apt install mysql-server
-
安裝客戶端
sudo apt install mysql-client
-
-
windows 安裝 mysql 服務
- 官網下載 安裝包
- 雙擊, 按照教程安裝即可
6. mysql 服務
-
服務端啟動
-
檢視 mysql 服務狀態
sudo /etc/init.d/mysql status
-
停止, 啟動, 重啟 mysql 服務
sudo /etc/init.d/mysql stop |start | restart
-
-
客戶端連線
-
命令格式
mysql -h 主機地址 -u使用者名稱 -p密碼
mysql -hlocalhost -uroot -p123456
-
本地連線 可以 省略 -hlocalhost
-
MYSQL 基本操作
7. 基本sql 命令
sql 命令的使用規則
- 每條 sql 命令必須以 ; 結尾
- sql 命令不區分字母大小寫
- 使用 \c 來終止命令的執行 (linux 中 ctrl + c)
庫的管理
-
庫的基本操作
-
檢視已有的庫
show databases;
-
建立庫
create database 庫名
create database 庫名 default charset=utf8
-
檢視建立庫的語句
show create database 庫名
-
檢視當前所在庫
select database();
-
切換庫
use 庫名;
-
檢視庫中已有表
show tables;
-
刪除庫
drop database 庫名;
-
-
庫名的命名規則
-
可以使用數字, 字母 , 下劃線_ , 但不能使用純數字
-
庫名區分字母大小寫
-
庫名具有唯一性
-
不能使用特殊字元和 mysql 關鍵字
-
練習
- 建立庫 aid1803db, 指定字符集為 utf-8
- 切換到該庫 aid1803
- 檢視當前所在庫
- 檢視庫中已有的表
- 檢視 aid1803 的字符集(檢視建立庫的語句)
- 刪除庫 aid1803db
create database aid1803 default charset=utf8;
use aid1803;
select database();
show tables;
show create database aid1803;
drop database aid1803;
表的管理
-
表的基本操作
-
建立表(指定字符集)
create table 表名(欄位名 資料型別, 欄位名 資料型別, ... ...);
create table 表名(欄位名 資料型別, 欄位名 資料型別, ... ...)default charset = utf8;
-
檢視 建立表的語句(字符集)
show create table 表名;
-
查看錶結構
desc 表名; -
刪除表
drop table 表名;
-
-
表的命名規則(同庫的命名規則)
-
練習
- 建立庫 python
- 在庫 python 中建立表 py_mysql, 指定字符集 utf8, 表中欄位有 id int 和 name char(20) 兩個欄位
- 查看錶 py_mysql 的字符集以及儲存引擎
- 檢視 py_mysql 的表結構
- 刪除表 py_mysql
create database python; use python; create table py_mysql (id int,name char(20))default charset=utf8; show create table py_mysql; desc py_mysql; drop py_mysql;
-
注意:
- 所有的資料都是以檔案的形式存放在資料庫目錄下
- 資料庫目錄: /var/lib/mysql
8.更改庫, 表 的預設字符集
-
方法
通過 mysql 服務的配置檔案來實現
-
步驟
實際可能不同, 但是 大致一樣
9. 表記錄管理
在表中插入記錄
insert into 表名 values(值1),(值2),...,(值n);
insert into 表名 (欄位名列表) values(值1),...(值n);
查詢表記錄
select * from 表名; #查詢所有欄位
select 欄位1, 欄位2,....,欄位n from 表名;
練習
- 檢視所有的庫
- 建立新庫 stu1
- 在庫 stu1 中建立表 students, 欄位要求如下
- id int
- name char(15)
- age int
- address char(20)
- 在表中插入一條記錄
- 在表中一次性插入兩條記錄
- 查看錶 stu1 的表結構
- 檢視所有表記錄
- 刪除表 students
- 刪除庫 stu1
1. show databases;
2. create database stu1;
3. create table students(id int,name char(15),age int,address char(20));
4. insert into students values(1,"mingyue",17,"china");
5.insert into students values(2,"shenxian",18,"jap"),(3,"xianhua",19"american");
6. show create table student;
7. select * from students;
8.drop table students;
9.drop database stu1;
10.客戶端把資料儲存到資料庫伺服器上的過程
- 連線到資料庫伺服器 mysql -uroot -p123456
- 選擇一個庫: use 庫名
- 建立表 或者 修改表 : create .....
- 斷開與資料庫伺服器的連線: exit | quit | \q
11.資料庫名詞
DB database 資料庫
DBMS database management system 資料庫管理系統:管理資料庫的軟體
DBS database system 資料庫系統 dbs = db + dbms + 資料庫應用+ users
12.資料庫中的資料型別
-
數值型(有符號signed和無符號unsigned)
-
整型
- int 大整型(4個位元組) 無符號:0~ 2**32 -1
- tinyint 微小整型(1個位元組)
- 有符號(signed 預設):-128 ~ 127
- 有符號(unsigned ):0~255
-
浮點型
-
float(4 個位元組, 最多顯示 7 個有效位)
-
用法
欄位名 float(m,n) m: 表示總位數 n:小數位位數
salary float(5,2) 取值範圍: -999.99 ~ 999.99
-
注意
-
浮點型插入整數時會自動補全小數位位數
-
小數位如果多於指定的位數, 會對指定位的下一位進行四捨五入
float(5,2) -> 23.128 -> 23.13
-
-
-
double( 8 個位元組, 最多顯示 15 個有效位)
-
用法
欄位名 double
其餘 和 float 一致,
-
-
decimal (M + 2 個位元組, 最多顯示 28 個有效位)
-
用法
decimal(28,5)
-
-
-
-
字元型別
- char(定長)
- 取值範圍: 1~255
- 預設為 1 (不指定寬度)
- varchar(變長)
- 取值範圍: 1~ 65535
- 注意
- varchar 沒有預設寬度, 必須給定一個寬度值 name varchar(20)
- char 和 varchar 的特點
- char 定長浪費儲存空間, 但是效能高
- varchar 節省儲存空間, 但是效能低下,
- char(定長)
-
列舉型別
-
定義
欄位值只能在列舉的範圍內選擇
-
enum(...) 單選(最多有 65535 個不同的值)
欄位名 enum(值1, 值2,... , 值n)
-
set(...) 多選(最多有64 個不同的值)
欄位名 set(值1, 值2,....,值n)
-
-
日期時間型別
- year: 年 YYYY
- date: 日期 YYYYMMDD
- time: 時間 HHMMSS
- datatime: 日期時間 YYYYMMDDHHMMSS
- timestamp: 日期時間 YYYYMMDDHHMMSS
注意
- 插入記錄時, datatime 欄位不給值, 預設返回 NULL
- timestamp 欄位不給值預設返回系統當前時間
練習
-
建立表 stuinfo, 欄位要求如下:
學號 id 大整型
姓名 name 變長, 寬度為 15
班級 classes 定長, 寬度為 7
年齡: age 微小整型, 要求不能輸入負數
身高: height 浮點型, 小數位為 2 位,
-
查看錶結構
-
在表 stuinfo 中插入2 條記錄(行)
-
查詢所有表記錄
-
查詢所有學生的姓名, 年齡和身高
create table stuinfo(id int, name varchar(15),classes char(7),age tinyint unsigned,height float(7,2));
desc stuinfo;
insert into stuinfo values(1,"mingyue","1803",18,1.85),(2,"shenhua","1803",19,1.86);
select * from stuinfo;
select name,age,height from stuinfo;
13. 表字段的操作
alter table 表名 執行動作;
新增欄位
alter table 表名 add 欄位名 資料型別 first | after 欄位名;
刪除欄位
alter table 表名 drop 欄位名;
修改欄位資料型別
alter table 表名 modify 欄位名 新資料型別;
不能從 int 改成 tinyint , 在修改資料型別時, 會受到表中原有資料的限制
修改欄位名
alter table 表名 change 舊名 新名 資料型別;
修改表名
alter table 表名 rename 新表名;
14. 概念: 面試題
- 填空題
- mysql 中的資料型別 有 數值型 列舉型 字串型 日期型
- 關係型資料庫的核心內容是
- 簡答題
- 簡述客戶端把資料儲存到資料庫伺服器上的過程
- char 和 varchar 的區別? 各自的特點?
- 操作題
- 建立一個學校的庫 school
- 在庫中建立一張表 students 來儲存學生資訊 學號 姓名 年齡 成績 性別 愛好 入學時間
- 檢視students 的表結構
- 在 students 中新增一個欄位id, 新增在第一列,
- 在表中隨意插入 5 條記錄
- 檢視所有的學生資訊
- 檢視所有學生的姓名和成績
- 練習一個 vi 文字編輯器
MySql設計規範
字元型別的寬度和數值型別的寬度的區別
- 數值型別的寬度僅僅為顯示寬度, 只用於 select 查詢顯示, 和 佔用的儲存空間大小無關, 可用 zerofill 檢視效果
- 字元型別的寬度超過則無法儲存
where 條件子句
配合查詢, 修改, 刪除 , 操作 一起使用
語法格式
select * from 表名 where 條件;
表記錄的管理
刪除表記錄
delete from 表名 where 條件;
注意: delete 語句後如果不加 where 條件子句, 會將表中所有記錄全部刪除
更新表記錄
updata 表名 set 欄位名1=值1 欄位名2=值2,... where 條件;
update語句後如果不加 where 條件子句會將表中所有記錄全部更改
運算子操作
數值比較&字元比較
數值比較: = != >= > < <=
字元比較運算子 = !=
範圍內比較
運算子
between and
in
not in
語法
between 值1 and 值2
in(值1, 值2,...值n)
匹配空 非空
空: is null
非空 : is not null
注意:
- null : 空值,必須用 is 或者 is not 去匹配
- "" : 空字串,用 = 或者 != 去匹配
模糊查詢
_ : 匹配單個字元
% : 匹配0 到多個字元
示例:
- select name from sanguo where name like "_%_";
- select name from sanguo where name like "%";
- select name from sanguo where name like "___";
- select name from sanguo where name like "趙%"
正則匹配查詢
-
where 欄位名 regexp "正則表示式";
-
正則表示式符號
^ : 以.... 開頭
$ : 以.... 結尾
. : 匹配任意一個字元
[]: 包含... 內容 [0~9]: 匹配帶數字的 [a-z]:匹配帶小寫字母的
*: 星號前面的字元出現 0 個或者多次 .*
sql 查詢
總結 (執行順序)
3.5 select ... 聚合函式 from 表名
- where...
- group by...
- having ...
- order by...
- limit ...
order by
- 作用: 給查詢的結果進行排序
- 語法格式: order by 欄位名 排序方式;
- 排序方式
- asx(預設): 升序
- desc : 降序
limit(永遠放在 sql 語句的最後寫)
- 作用: 限制希納是查詢記錄的個數
- 用法
- limit n: 顯示 n 條記錄
- limit m,n: 從第 (m+1)條開始, 顯示 n 條記錄
聚合函式
- 分類
- avg(欄位名): 求欄位的平均值
- sum(欄位名): 求和
- max(欄位名): 求最大值
- min(欄位名):求最小值
- count(欄位名): 統計該欄位記錄的個數
select sum(欄位名) from 表名;
count(欄位名) 空值不會被統計,空字串會被統計
group by(先分組,再聚合)
select 欄位名 from 表名 group by 欄位名;
select country,avg(gongji) from sanguo group country;
執行過程:
- 先分組(此時未去重) group by country
- 再聚合( 求每組的平均攻擊值)
- 去重
select country,count(*) from hero
group by country
order by count(*) desc
limit 2;
having
- 作用: 對查詢的結果進行進一步篩選
distinct
作用: 不顯示欄位的重複值
select distinct 欄位名 from 表名;
注意:
- distinct 處理的是 distinct 和 from 之間的所有欄位, 所有欄位的值必須完全相同才可以去重
- distinct 不能對任何欄位做聚合處理
查詢表資料的時候, 可以做數學運算
select 欄位名*10 from 表名
+ - * / 都可以
約束
-
作用
為了保證資料的完整性 一致性 有效性, 可以限制無效的資料插入到資料表中
-
約束分類
-
預設約束(default)
-
作用: 在插入記錄時, 如果不給該欄位賦值,則使用預設值
-
格式
欄位名 資料型別 default 預設值,
-
-
非空約束
-
作用: 不允許該欄位的值有空值 NULL 記錄
-
格式
欄位名 資料型別 not null
-
-
索引
-
定義
對資料庫中表的一列或者多列的值進行排序的一種結構(Mysql 中索引用 Btree 方式)
-
索引的優點
可以加快資料的檢索速度
-
索引的缺點
- 當對錶中的資料進行增加, 修改, 刪除的時候, 索引需要動態維護, 降低了資料的維護速度
- 索引需要佔用物理儲存空間(資料庫目錄 /var/lib/mysql)
-
索引示例
- 執行 insert_.py 檔案 , 插入100 萬條資料
- 開始效能分析 set profiling = 1
- 執行 查詢語句 select name from t1 where name="lucy999999";
- 檢視效能分析結果 show profiles;
- 在 name 欄位建立索引 create index name on t1(name);
- 執行查詢語句 select name from t1 where name="lucy99999";
- 檢視效能分析結果 show profiles;
- 關閉效能分析 set profiling = 0;
SQL 高階
索引
- 普通索引
- 唯一索引
- 主鍵屬性
普通索引
使用規則:
建立
檢視
- desc 表名; -> 檢視key 標誌為MUL
- show index from 表名 \G
刪除
drop index 索引名 on 表名;
唯一索引
unique
使用規則
- 一個表中可以有多個 unique 欄位
- unique 欄位的值不允許重複,可以為空值 NULL
- unique 的 KEY 標誌是 UNI
建立
基本等同 index建立
-
建立表時建立 : unique(欄位名) ,unique(欄位名)
-
已有表中建立
create unique index 索引名 on 表名(欄位名);
檢視, 刪除
desc 表名
show index from 表名;
drop index 索引名 on 表名;
主鍵索引
primary key
自增長屬性(auto_increment)
使用規則
- 一個表中只能有一個主鍵欄位
- 對應欄位的值不允許重複 且 不能為空值 NULL
- 主鍵欄位的KEY標誌為 PRI
- 把表中能夠唯一標識一條記錄的欄位設定為主鍵, 通常把表中記錄編號的欄位設定為主鍵
建立主鍵
-
建立表時建立
- 欄位名 資料型別 primary key auto_increment, 其他欄位
- primary key(欄位名); // 在最後寫 可以 型別 auto_increment,
-
在已有表中新增主鍵
alter table 表名 add primary key(欄位名) ;
-
刪除主鍵
-
先刪除自增長屬性(modify)
alter table 表名 modify id int;
-
刪除主鍵
alter table 表名 drop primary key;
-
主鍵有什麼約束
欄位值不允許重複也不允許為空值
主鍵約束 = 唯一約束 + not null
外來鍵約束
走神了....
資料匯入
把檔案系統的內容匯入到資料庫中
load data infile "檔名"
into table 表名
fields terminated by "分隔符"
lines terminated by "\n"
例項
-
在資料庫中建立對應的表
create table userinfo( username char(20), password char(20), uid int, gid int, comment varchar(50), homedir varchar(50), shell varchar(50) )
-
將要匯入的檔案拷貝到資料庫的預設搜尋路徑中
-
檢視資料庫的預設搜尋路徑
show variables like "secure_file_priv";
/var/lib/mysql-files
-
sudo cp /etc/passwd /var/lib/mysql-files/
-
-
執行資料匯入語句
load data infile "/var/lib/mysql-files/passwd" into table userinfo fields terminated by ":" lines terminated by "\n";
資料匯出
將資料庫表中的記錄儲存到系統檔案裡
select ... from 表名
into outfile "檔名"
fields terminated by "分隔符"
lines terminated by "\n";
表的複製
create table 表名 select 查詢命令 ;
複製 userinfo 表中的全部記錄 , userinfo2
create table userinfo2 select * from userinfo;
複製 userinfo 表中username, password , uid 三個欄位的第 2 - 10 條記錄, userinfo.
create table userinfo3 select username,password,uid from userinfo limit 1,9;
複製表結構
create table 表名 select 查詢命令 where false;
複製表的時候不會把原有表的key 屬性複製過來
巢狀查詢(子查詢)
把內層的查詢結果作為 外層的查詢條件
例項
把uid 的值 小於 uid 平均值的使用者名稱 和 uid 號顯示出來
select username,uid from userinfo
where uid < (select avg(uid)from userinfo) ;
連線查詢
-
內連線
-
從表中刪除與其他被連線的表中沒有匹配到的行
-
語法格式
select 欄位名列表 from 表1
-
-
外連線
- 左連線
- 右連線
多表查詢
- select 欄位名列表 from 表名列表;
- select 欄位名列表 from 表名列表 where 條件;
mysql 使用者賬戶管理
開始 mysql 遠端連線
-
開始mysql 遠端連線
-
獲取 root 許可權 sudo -i
-
cd 到配置檔案所在路徑 cd /etc/mysql/mysql.conf.d/
-
vi mysqld.cnf
bind-address = 127.0.0.1
修改這一行, 註釋 或者 改成 * 任意
-
重啟 mysql 服務 /etc/init.d/mysql restart
-
新增授權使用者
-
使用 root 使用者連線到伺服器
mysql -uroot -p123456
-
新增新的授權使用者
create user "使用者名稱“@"ip地址"" identied by "密碼";
create user "tiger"@"%" identified by "123456";
ip地址的表示方式:
- % 表示使用者可以從任何地址連線到伺服器
- localhost 使用者只能從本地連線
- 指定一個 ip 表示使用者只能從此 ip 連線到伺服器
給使用者授權
grant 許可權列表 on 庫.表 to "使用者名稱"@"ip地址" with grant option;
grant all privileges on *.* to "tiger"@"%" with grant option;
許可權列表 : select, update, delete , insert , alter, drop, create, ...
庫.表: *.* 表示所有庫的所有表
連線遠端資料庫命令 : mysql -hIP地址 -umonkey -p密碼
練習
新增一個 授權使用者 monkey , 所有人都可以連線, 只對 db1 庫有查詢許可權
- 新增授權使用者 monkey
- 給 monkey 使用者授權
- 驗證 : mysql -hIP地址 -umonkey -p密碼
ip 地址檢視 : linux 命令列: ifconfig
刪除授權使用者
drop user "使用者名稱"@"IP地址";
drop user "tiger"@"%";
資料備份與恢復
備份
mysqldump -uroot -p 原庫名 > 路徑/*.sql
mysqldump -uroot -p db2 > /home/tarena/db2.sql
源資料庫的表示方式
--all-databases 備份所有庫
庫名 備份單個庫
-B 庫1 庫2 ... 備份多個庫
庫名 表1 表2 .. 備份制定庫的指定表
恢復
mysql -u使用者名稱 -p目標庫名 < 路徑/xxx.sql
備份分為 完全備份 和 增量備份
完全備份: mysqldump
增量備份: binlog日誌, xbackup 工具
從所有庫的備份檔案中恢復某一個庫 (--one-database)
mysql -u使用者名稱 -p --one-database 目標庫名 < all_mysql.sql
mysql -uroot -p --one-database db2 < all_mysql.sql
注意:
- 恢復庫時庫中新增的表不會刪除
- 恢復時必須先建立空庫
事務和事務回滾
- 事務: 一件事從開始發生到結束的整個過程
- 作用: 確保資料的一致性
mysql 中預設 sql 語句會自動 commit 到資料庫
show variables like "autocommit";
事務應用
開始事務
start transaction;
此時 autocommit 被禁用 , sql 命令不會對資料庫中資料做修改
終止事務
commit; 提交: 代表資料庫 成功被修改
or
rollback; 回滾: 表示資料庫 出現了問題, 沒有 被修改
案例
儲存引擎
用來處理 表的 處理器
innodb myisam
儲存引擎的基本操作
-
檢視 已有表的儲存引擎
show create table 表名;
-
建立表時指定儲存引擎
create table 表名(...) engine = myisam;
-
檢視所有的儲存引擎
show engines;
常用儲存引擎的特點
- innodb 特點
- 共享表空間
- 支援行級鎖
- myisam 特點
- 獨享表空間
- 支援表級鎖
如何決定使用那種 儲存引擎
- 執行查詢操作多的表使用 myisam 儲存引擎(使用 innodb 浪費資源)
- 執行寫操作比較多的表使用 innodb 儲存引擎
如何更改表的 預設儲存引擎
-
sudo -i
-
cd /etc/mysql/mysql.conf.d/
-
vi mysqld.cnf
[mysqld]
default-storage-engine = myisam
-
/etc/init.d/mysql restart
Memory 儲存引擎
memory : 表記錄儲存在記憶體中
表名.frm 表結構
特點 : 服務重啟之後結構在, 表記錄都消失
鎖
-
枷鎖的目的
解決客戶端併發訪問的衝突問題
-
鎖型別
讀鎖(select) 共享鎖
加讀鎖之後不能更改表中內容,但可以進行查詢
寫鎖(insert, update, delete ) 互斥鎖, 排他鎖
-
鎖粒度 操作完成後, 會自動釋放鎖
表級鎖
行級鎖
mysql 調優
- 選擇合適的儲存引擎
- 經常用來讀的表使用 myisam 儲存引擎
- 其餘的表都用 innodb 儲存引擎
- sql 語句調優 ( 儘量避免全表掃描)
- 在 select, where, order by , 常涉及到的欄位上建立索引
- where 子句中 儘量不要使用 != , 否則將放棄使用 索引 進行全表掃描
- 儘量避免用 NULL 值判斷, 否則會全表掃描
- 儘量避免 使用or 來連線條件, 也會進行全表掃描
- 模糊查詢儘量避免使用 前置 %, 導致全表掃描
- 儘量避免使用 select * ..., 要用具體的欄位列表代替 * , 不要返回用不到的任何欄位
python 資料庫程式設計
python資料庫介面 (python db-api)
為開發人員提供的資料庫應用程式設計介面
支援的資料庫服務軟體: mysql Oracle SQL_Server, mongodb..
python提供的操作 mysql 模組
python3: pymysql
python2: MySQLdb
pymsql 模組使用流程
- 建立資料庫連線
- 建立遊標物件
- 使用遊標物件的方法操作資料庫
- 提交 commit
- 關閉遊標物件
- 關閉資料庫連線
例項
#coding = utf-8
#1. 建立資料庫連線
db = pymysql.connect("localhost","root","123456","db2") #這邊並不需要指定 預設字符集
#2. 建立遊標物件
cursor = db.cursor()
# 3. 利用遊標物件 cursor 的方法來操作資料庫
cursor.execute("insert into sheng values(1,20000,'四川省');")
# 4. 提交到資料庫 commit
db.commit()
# 5. 關閉遊標物件
cursor.close()
# 6. 關閉資料庫連線
db.close()
建立資料庫連線 語法格式
2.32.43
-
語法格式
物件名 = pymysql.connect("主機地址","使用者名稱","密碼","庫名",charset= "utf-8")
-
connect連線物件支援的方法
- cursor() 建立一個遊標物件 db.cursor()
- commit() 提交到資料庫執行(表記錄增刪改)
- rollback() 回滾
- close() 關閉資料庫連線
-
遊標物件支援的方法
- execute("sql命令") 執行sql 命令
- fetchone() 取得結果集的第一條記錄
- fetchmany(n) 取得結果集的n 條記錄
- fetchall() 取得結果集的所有記錄
- close() 關閉遊標物件
例項
查詢表中記錄
#coding = utf-8
import pymysql as mq
db = mq.connect("192.168.102.133","mingyue","123","test")
cursor = db.cursor()
# 執行 sql 語句
cursor.execute("select * from t1;")
data = cursor.fetchall()
print("fetchone的結果:",data)
# 提交資料改變
db.commit()
# 關閉遊標物件
cursor.close()
# 關閉資料庫物件
db.close()
'''
fetchone的結果: ((1,), (1,), (2,), (3,))
'''
最終以元組的形式返回資料, 如果接收的長度 小於 查詢資料的長度, 會進行截斷操作
對元組進行處理, 就可以實現對資料的處理
python 使用面對物件 封裝 sql操作
#coding = utf-8
import pymysql
class mysql:
def __init__(self,host,user,passwd,dbname,tablename):
'''
初始化 資料庫物件
'''
self.db = pymysql.connect(host,user,passwd,dbname)
self.cur = db.cursor()
self.dbname = dbname
self.tablename = tablename
def select(self,name):
'''
查詢 資料庫中 內容
'''
checkcont = "select %s from %s;"%(name,tablename)
self.cur.execute(checkcont)
self.cur.close()
def insert(self,tablename,l):
'''
插入內容到資料庫中
'''
try:
for i in l:
s = "insert into %s values (%s,%s,%s);"%(self.tablename,i[0],i[1],[2])
self.cur.execute(s)
self.db.commit()
except:
print("插入失敗,出現異常")
self.db.rollback()
def execute(self,sql):
'''
執行sql 命令
'''
try:
self.cur.execute(sql)
self.db.commit()
except:
print("命令執行失敗,出現異常,請檢查 sql 語句是否正確書寫")
self.db.rollback()
def __del__(self):
'''
解構函式
關閉遊標物件
關閉 資料庫物件
'''
self.cur.close()
self.db.close()
mysql 的圖形化操作
安裝 mariadb 系統自動會 新增一個 heidiSQL 可以使用這個 遠端連線資料庫
然後其他動動手指即可
E-R 模型 & ER圖
實體 - 關係 模型
- 實體
- 屬性
- 關係
可以進行聯想
-
定義: 實體之間的關係
-
分類
一對一關係 (1:1) : 班級與 班長 連結串列
一對多關係 (1:n) : 公司 和 職工 , 班級 和 學生 二叉樹
多對多關係(m:n) : 學生和課程 集合
學生和課程的 ER圖
矩形框代替實體,菱形框代表關係, 橢圓形代表屬性