mysql與pymysql

mysql基本命令腳本

關係型數據庫

1.支持複雜的sql語句查詢python

2.支持事務mysql

非關係型數據庫

1.NQSQL不須要通過SQL層的處理sql

2.可擴展性,由於是鍵值對的形式因此水平擴展很是容易數據庫

事務

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

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

解決這個問題: mysql的事務解決這個問題,由於mysql的事務特性,要求這組操做,要不全都成功,要不全都失敗,這樣就避免了某個操做成功某個操做失敗。利於數據的安全bash

如何使用:

1.在執行sql語句以前,咱們要開啓事務start transaction; 2.正常執行咱們的sql語句; 3.當sql語句執行完畢,存在2種狀況 第一種;所有成功,咱們講sql語句對數據庫形成的影響提交到數據庫中,commit 第二種;某些sql語句失敗,咱們執行rollback(回滾),將對數據庫的操做趕忙撤銷函數

一 進入到數據庫

net start mysql57fetch

-h host 主機名ui

-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) 整形

類型 大小 範圍 無符號範圍 用途 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) 字符串類型

char和varchar的相同和不一樣點 :

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

char的執行效率高於varchar

varchar要比 char更節省存儲空間

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

enum和set區別

enum只能選擇其中的一個值

set能夠選擇多個值 多個值使用逗號來隔開

(3) 時間和日期

五 字段約束

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()

相關文章
相關標籤/搜索