mysql與pymysql

qq_42839893發表於2021-01-04

mysql基本命令指令碼

關係型資料庫

1.支援複雜的sql語句查詢

2.支援事務

非關係型資料庫

1.NQSQL不需要經過SQL層的處理

2.可擴充套件性,因為是鍵值對的形式所以水平擴充套件非常容易

事務

事務是邏輯上的一組操作,組成這組操作的各個單元,要不全部成功,要不全部失敗,這個特性就是事務

注意:MYSQL支援事務,但是要求必須是innoDB引擎

解決這個問題: mysql的事務解決這個問題,因為mysql的事務特性,要求這組操作,要不全都成功,要不全都失敗,這樣就避免了某個操作成功某個操作失敗。利於資料的安全

如何使用:

1.在執行sql語句之前,我們要開啟事務start transaction; 2.正常執行我們的sql語句; 3.當sql語句執行完畢,存在2種情況 第一種;全部成功,我們講sql語句對資料庫造成的影響提交到資料庫中,commit 第二種;某些sql語句失敗,我們執行rollback(回滾),將對資料庫的操作趕緊撤銷

一 進入到資料庫

net start mysql57

-h host 主機名

-u user 使用者名稱

-p password 密碼

啟動資料庫

mysql -hlocalhost -uroot -p

注:root超級管理員 可以建立和管理其他的使用者,root使用者不可以遠端登入

二 對於庫的操作

CREATE 建立

DROP 刪除

ALTER 修改

SHOW 展示

(1) 檢視所有的資料庫

show databases;

(2) 建立資料庫

create database 庫名;

create database if not exists 庫名; 防止建立同名的庫出現錯誤

(3) 檢視創庫語句

show create database 庫名;

(4)使用資料庫(進入到當前的庫中)

use 庫名

(5)檢視當前所在的資料庫

select database

(6)資料庫的刪除

drop database 庫名

(7)建立資料庫並設定字符集

create database 庫名 character set utf8;

(8)建立資料庫 並設定字符集

create database 小杰 character 字符集;

三 對於表的操作

0.檢視所有的表

show tables;

1.建立表

mysql> create table if not exists fs(
    -> id int unsigned primary key auto_increment,
    -> username varchar(20),
    -> sex tinyint,
    -> age tinyint unsigned,
    -> info varchar(100)
    -> );
複製程式碼

2.檢視錶結構

desc 表名;

mysql> create table if not exists fs(
    -> id int unsigned primary key auto_increment,
    -> username varchar(20),
    -> sex tinyint,
    -> age tinyint unsigned,
    -> info varchar(100)
    -> );
複製程式碼

3.刪除表中的某個欄位

alter table 表名 drop 欄位名;

4.刪除表

drop table if exists 表名;刪除表如果該表存在

5.增加表中的資料

insert into 表名 欄位名 values(值);

6.檢視錶資料

select * from 表名;

7.檢視創表語句

show create table 表名(\G);(豎著檢視)

8.重新命名錶名

rename table 原表名 to 新表名;

9.修改表結構

alter table 表名 add|change|drop 欄位名 (型別);

四 MYSQL表的建立

欄位型別

(1) 整形

mysql與pymysql
型別 大小 範圍 無符號範圍 用途 tinyint 1位元組 -128,127 0,255 小整數值 smallint 2位元組 -32768,32767 0,65535 大整數值 int 4位元組 2-》10位置 4... 10 位的 大整數值 float(m,n) 4個位元組 單精度浮點型 double(m,n) 8個位元組 雙精度浮點型 decimal(m,n) 根據儲存的值 小資料值(更加精準) 浮點數中的m代表當前儲存的長度 n代表小數的位數 m-n代表整數的位數 超出則報錯 整形後面的數字的意義: 整形後面給定數字 並不是限定當前儲存值的長度 並沒有任何的意義 除非配合可選引數 zerofill 零填充 才有意義 字串型別後面給定的長度 則是限制當前儲存資料的長度 整形預設長度會比本身長度大1,因為是符號位

(2) 字串型別

mysql與pymysql
char和varchar的相同和不同點 :

char和varchar的儲存長度都為0-255

char的執行效率高於varchar

varchar要比 char更節省儲存空間

當char儲存的值達不到指定的長度時 則使用空來佔位

enum和set區別

enum只能選擇其中的一個值

set可以選擇多個值 多個值使用逗號來隔開

(3) 時間和日期

mysql與pymysql

五 欄位約束

unsigned 無符號 正數

只能用於數值型別 不允許出現負數 儲存長度會擴大一倍

zerofill 零填充

只能用於數值型別 當指定的位數不足的時候 零填充

default 預設值

如果當前欄位沒有傳值 則值為預設值 (不設定預設值 預設為null)

null 和 not null

預設為null 當不插入值則插入的為null,當設定當前欄位為 not null的時候

則該欄位必須傳值

comment 設定當前欄位的說明

auto_increment 自增

注意

SQL 語句以分號作為結束

SQL命令 不區分大小寫

資料庫的切換使用use

\c 撤銷當前命令

\G 豎著檢視

當遇到在終端中 不管怎樣輸入命令都不執行 name檢視一下左側 是否為->

在Windows下 不區分庫,表名的大小寫 但是在Ubuntu下區分

退出資料庫的幾種方式

\q exit quit

六 資料操作

1 增

a 全列插入

格式:insert into (表名) values(...);

說明:主鍵列是自動增長,但是在全列插入時需要佔位,通常使用0,插入成功以後以實際資料為準

b.預設插入

格式:insert into 表名 (欄位1,欄位2,...) values (...)

c.同時插入多條資料

格式:insert into 表名 values (...),(...),...

2.刪

格式:delete from 表名 where 條件;

示例:delete from student where id=4;

注意: !!沒有條件是全部刪除,慎用;

3改

格式:update 表名 set 欄位1=值1,欄位2=值2,.... where 條件

示例:update student set age=16 where id = 7;

注意:如果沒有條件,是全部欄位都修改;

4查

1.基本語法

格式:select * from 表名

說明:from 關鍵字後面是表名,表示資料來源於這張表

       select 後面寫表中的欄位名," * " 表示所有欄位名,  
       在select 後面欄位名,可以使用as為欄位名起別名
       這個別名顯示在結果集中
       如果要查詢多個欄位,直接使用逗號分隔
複製程式碼

示例:select name,age from student; select name as a,age from student;

2.消除重複行

在select後面欄位名的前面使用distinct可以消除重複的行

示例:select distinct genger from student

3.條件查詢

a.語法: select * from 表名 where 條件;

b.比較運算子

 等於
 大於
 小於
 大於等於
 小於等於
 不等於
複製程式碼

需求:查詢id大於8的所有資料

示例:select * from student where id > 8;

邏輯運算子

and or not

需求;查詢id>7的女同學

示例;select * from student where id>7 and gender=0;

d.模糊查詢

like %:表示任意多個任意字元 :表示任意一個字元 需求:查詢姓習的同學 示例:select * from student where name like "習%"; 示例:select * from student where name like "習";

e.範圍查詢

in:表示在一個非連續的範圍內

between..and...:表示在一個連續的範圍內

需求:查詢編號為8,10,12的學生

示例:select * from student where id in(8,10,12);

需求;查詢編號為6-8的學生

示例; select * from student where id between 6 and 8;

f:空判斷

注意:null與" "是不同的

判斷空: isnull

判斷非空: is not null

需求:查詢沒有地址的同學 示例;select * from student where address is null

g:優先順序

小括號,not 比較運算子,邏輯運算子 and比or優先順序高

4.聚合

為了快速得到統計的資料,提供了5個聚合函式

a.   count(*)   表示計算總行數,括號中可以寫*和欄位名;
b.   max(列)   表示求此列的最大值
c.   min(列)   表示求此列的最小值
d.   sum(列)   表示求此列的和
e.   avg(列)   表示求此列的平均值
複製程式碼

需求:查詢學生總數:

示例:select count(*) from student;

需求:查詢女生編號的最大值;

示例:select max(id) from student where gender=0;

需求:查詢女生編號的最小值;

示例:select min(id) from student where gender=0;

需求:查詢所有學生的年齡和

示例:select sum(age) from student;

需求:查詢所有學生的年齡平均值

示例:select avg(age) from student;

5 分組

按照欄位分組,表示此欄位相同的資料會被放到一個集合中,分組後,只能查詢出相同的資料列。對於有差異的資料列,無法顯示在結果集中,可以對分組後的資料進行統計,做聚合運算

語法:select 列1,列2,聚合...... from 表名 group by 列1,列2,列3,......

需求:查詢男女生總數

示例:select gender,count(*) from student group by gender;

python操作mysql

python操作mysql步驟

import pymysql

(1) 連結mysql資料庫

db = pymysql.connect(主機名,使用者名稱,密碼,資料庫名)

(2) 設定字元編碼

db.set_charset('utf8')

(3) 建立遊標物件

cursor = db.cursor()

(4) 準備sql語句

sql = '...'

(5) 執行sql語句

cursor.execute(sql)

(6) 獲取所有結果集

cuesor.fetchall()

(7) 獲取一條結果集

cursor.fetchone()

(8) 獲取受影響的行數

cursor.rowcount

(9) 關閉資料庫連結

db.close()

pymysql的事務處理

預設開啟事物處理

需要提交或者回滾

import pymysql
db = pymysql.connect('127.0.0.1','root','123456','hz03')
db.set_charset('utf8')
cursor = db.cursor()
try:
    sql = 'insert into goods values(null,1,"商品名稱",12.1)'
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()
print(cursor.rowcount)
db.close()
複製程式碼

示例: import pymysql

1.連線mysql資料庫

db = pymysql.connect('localhost','root','abcdef','test')

2.設定字元編碼

db.set_charset('utf8')

3. 建立遊標物件

cursor = db.cursor()

4. 準備sql語句

sql = 'select * from hz03'

5. 執行sql語句

cursor.execute(sql)

6. 獲取所有結果集

date = cursor.fetchall() print('結果集為',date)

7. 獲取受影響的行數

print('受影響的行數為',cursor.rowcount)

8. 關閉資料庫連線

db.close()

相關文章