1.支持複雜的sql語句查詢python
2.支持事務mysql
1.NQSQL不須要通過SQL層的處理sql
2.可擴展性,由於是鍵值對的形式因此水平擴展很是容易數據庫
事務是邏輯上的一組操做,組成這組操做的各個單元,要不所有成功,要不所有失敗,這個特性就是事務安全
解決這個問題: 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 展現
show databases;
create database 庫名;
create database if not exists 庫名; 防止建立同名的庫出現錯誤
show create database 庫名;
use 庫名
select database
drop database 庫名
create database 庫名 character set utf8;
create database 小杰 character 字符集;
show tables;
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)
-> );
複製代碼
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)
-> );
複製代碼
alter table 表名 drop 字段名;
drop table if exists 表名;刪除表若是該表存在
insert into 表名 字段名 values(值);
select * from 表名;
show create table 表名(\G);(豎着查看)
rename table 原表名 to 新表名;
alter table 表名 add|change|drop 字段名 (類型);
字段類型
char和varchar的存儲長度都爲0-255
char的執行效率高於varchar
varchar要比 char更節省存儲空間
當char存儲的值達不到指定的長度時 則使用空來佔位
enum和set區別
enum只能選擇其中的一個值
set能夠選擇多個值 多個值使用逗號來隔開
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
格式:insert into (表名) values(...);
說明:主鍵列是自動增加,可是在全列插入時須要佔位,一般使用0,插入成功之後以實際數據爲準
格式:insert into 表名 (字段1,字段2,...) values (...)
格式:insert into 表名 values (...),(...),...
格式:delete from 表名 where 條件;
示例:delete from student where id=4;
注意: !!沒有條件是所有刪除,慎用;
格式:update 表名 set 字段1=值1,字段2=值2,.... where 條件
示例:update student set age=16 where id = 7;
注意:若是沒有條件,是所有字段都修改;
格式:select * from 表名
說明:from 關鍵字後面是表名,表示數據來源於這張表
select 後面寫表中的字段名," * " 表示全部字段名,
在select 後面字段名,可使用as爲字段名起別名
這個別名顯示在結果集中
若是要查詢多個字段,直接使用逗號分隔
複製代碼
示例:select name,age from student; select name as a,age from student;
在select後面字段名的前面使用distinct能夠消除重複的行
示例:select distinct genger from student
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;
like %:表示任意多個任意字符 :表示任意一個字符 需求:查詢姓習的同窗 示例:select * from student where name like "習%"; 示例:select * from student where name like "習";
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;
注意:null與" "是不一樣的
判斷空: isnull
判斷非空: is not null
需求:查詢沒有地址的同窗 示例;select * from student where address is null
小括號,not 比較運算符,邏輯運算符 and比or優先級高
爲了快速獲得統計的數據,提供了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;
按照字段分組,表示此字段相同的數據會被放到一個集合中,分組後,只能查詢出相同的數據列。對於有差別的數據列,沒法顯示在結果集中,能夠對分組後的數據進行統計,作聚合運算
語法:select 列1,列2,聚合...... from 表名 group by 列1,列2,列3,......
需求:查詢男女生總數
示例:select gender,count(*) from student group by gender;
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()
默認開啓事物處理
須要提交或者回滾
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
db = pymysql.connect('localhost','root','abcdef','test')
db.set_charset('utf8')
cursor = db.cursor()
sql = 'select * from hz03'
cursor.execute(sql)
date = cursor.fetchall() print('結果集爲',date)
print('受影響的行數爲',cursor.rowcount)
db.close()