MySQL
是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。MySQL
所使用的SQL
語言是用於訪問數據庫的最經常使用標準化語言。MySQL
做爲網站數據庫。MySQL
是一個多用戶、多線程的關係型數據庫管理系統。 工做模式是基於客戶機/服務器結構。目前它能夠支持幾乎全部的操做系統MySQL
是一個開放的、快速的、多線程的、多用戶的SQL數據庫服務器工欲善其事必先利其器, 要研究MySQL
咱們首先要安裝MySQL
, 這裏只介紹Mac
環境下的安裝和數據庫操做python
MySQL
直接打開MySQL官網下載頁, 選擇mac OS
系統後, 選擇DMG
格式下載軟件mysql
接着, 會跳轉到以下頁面, 你只須要選擇不登陸,直接下載便可(固然也能夠選擇註冊並登陸)sql
dmg
裏面的pkg
文件一路安裝便可, 可是須要注意的是
MySQL
的圖標MySQL
會看到默認是開啓的(安裝的時候按照默認設置安裝的狀況下)到這裏
MySQL
就已經基本安裝完成了, 不須要再修改什麼配置了數據庫
Navicat for MySQL
Navicat for MySQL
是一套專爲MySQL
設計的高性能數據庫管理及開發工具3.21
或以上的 MySQL
數據庫服務器MySQL
最新版本的功能,包括觸發器、存儲過程、函數、事件、視圖、管理用戶等MySQL
環境的時候設置的密碼MySQL
的基本命令Windows
中是cmd
), 如下命令均是在終端運行Windows
系統中才須要運行, Mac
環境下不須要// 啓動服務
格式:net start 服務名稱
示例:net start titansql
// 中止服務
格式:net stop 服務名稱
示例:net stop titansql
複製代碼
格式:mysql -u 用戶名 -p
示例:mysql -u root -p
// 此處會提示你輸入密碼(安裝時設置的)
複製代碼
mysql -h ip地址 -u 用戶名 -p
mysql
密碼須要注意的是: 如下全部命令中如過結尾有分號(;
)的必定不能省略, 不然不是一條完整的命令, 系統會提示你繼續輸入命令python3.x
// 查看版本(鏈接後能夠執行)
select version();
//顯示當前時間(鏈接後能夠執行)
select now();
//退出登陸(斷開鏈接)
quit或exit
複製代碼
// 一、建立數據庫
格式:create database 數據庫名 charset=utf8;
示例:create database titansql charset=utf8;
// 二、刪除數據庫
格式:drop database 數據庫名;
示例:drop database titansql;
// 三、切換數據庫
格式:use 數據庫名;
示例:use titansql;
// 四、查看當前選擇的數據庫
select database();
複製代碼
建立完成記得刷新Navicat for MySQL
bash
// 一、查看當前數據庫中全部表
show tables;
// 二、建立表
格式:create table 表名(列及類型);
說明:
//id, name, age: 等爲字段名
//auto_increment: 表示自增加
//primary key: 表示主鍵
//int, varchar(20): 等爲數據類型, 20爲可存儲的字節數
//not null: 表示不爲空
//default: 爲設置默認值
示例:create table student(id int auto_increment primary key, name varchar(20) not null, age int not null, gender bit default 1, address varchar(20), isDelete bit default 0);
// 三、刪除表
格式:drop table 表名;
示例:drop table student;
// 四、查看錶結構
格式:desc 表名;
示例:desc student;
// 五、查看建表語句
格式:show create table 表名;
示例:show create table student;
// 六、重命名錶名
格式:rename table 原表名 to 新表名;
示例:rename table car to newCar;
// 七、修改表
格式:alter table 表名 add|change|drop 列名 類型;
示例:alter table newcar add isDelete bit default 0
複製代碼
1、增
a、全列插入
格式:insert into 表名 values(...);
說明:主鍵列是自動增加,可是在全列插入時須要佔位,一般使用0,插入成功之後以實際數據爲準
示例:insert into student values(0, "tom", 19, 1, "北京", 0);
b、缺省插入
格式:insert into 表名(列1,列2,……) values(值1,值2,……);
示例:insert into student(name, age, address) values("titan", 19, "上海");
c、同時插入多條數據
格式:insert into 表名 values(...),(...),……
示例:insert into student values(0, "jun", 18, 0, "北京", 0), (0, "poi", 22, 1, "海南", 0), (0, "coder", 20, 0, "石家莊", 0);
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、查
說明:查詢表中的所有數據
格式:select * from 表名;
示例:select * from student;
複製代碼
select * from 表名;
from
關鍵字後面是表名,表示數據來源於這張表select
後面寫表中的列名,若是是*表示在結果集中顯示錶中的全部列select
後面的列名部分,可使用as
爲列名起別名,這個別名顯示在結果集中//查詢全部數據
select * from student;
//查詢某列數據
select name, age from student;
//以別名顯示搜索結果
select name as a, age from student;
複製代碼
select
後面列前面使用distinct
能夠消除重複的行select gender from student;
select distinct gender from student;
複製代碼
// 一、語法
select * from 表名 where 條件
// 二、比較運算符
等於 =
大於 >
小於 <
大於等於 >=
小於等於 <=
不等於 !=或<>
需求:查詢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與""是不一樣的
判斷空:is null
判斷非空: is not null
需求:查詢沒有地址的同窗
示例:select * from student where address is null;
需求:查詢有地址的同窗
示例:select * from student where address is not null;
// 七、優先級
小括號,not 比較運算符,邏輯運算符
and比or優先級高,若是同時出現並但願先選or,須要結合()來使用
複製代碼
count(*)
: 表示計算總行數,括號中能夠寫*和列名max(列)
: 表示求此列的最大值min(列)
: 表示求此列的最小值sum(列)
: 表示求此列的和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;
select name,gender,count(*) from student group by gender,age;
複製代碼
分組後的數據篩選:服務器
select 列1,列2,聚合…… from 表名 group by 列1,列2,列3,…… having 列1,……聚合……;
示例:select gender,count(*) from student group by gender having gender;
複製代碼
where
與having
的區別:多線程
where
是對from
後面指定的表進行篩選,屬於對原始數據的篩選having
是對group by
的結果進行篩選select * from 表名 order by 列1 asc|desc,列2 asc|desc , ……;
asc
: 升序desc
: 降序//需求:將沒有被刪除的數據按年齡排序
select * from student where isDelete=0 order by age desc;
select * from student where isDelete=0 order by age desc, id desc;
複製代碼
select * from 表名 limit start,count;
start
索引從0開始select * from student limit 0,3;
select * from student limit 3,3;
select * from student where gender=1 limit 0,3;
複製代碼
// 建表語句:
1、create table class(id int auto_increment primary key, name varchar(20) not null, stuNum int not null);
2、create table students(id int auto_increment primary key, name varchar(20) not null, gender bit default 1, classid int not null, foreign key(classid) references class(id));
// 查詢全部數據
select * from students;
/* 關聯查詢: 分類: 一、表A inner join 表B: 表A與表B匹配的行會出如今結果集中 二、表A left join 表B: 表A與表B匹配的行會出如今結果集中,外加表A中獨有的數據,未對應的數據使用null填充 三、表A right join 表B: 表A與表B匹配的行會出如今結果集中,外加表B中獨有的數據,未對應的數據使用null填充 */
select students.name,class.name from class inner join students on class.id=students.classid;
select students.name,class.name from class left join students on class.id=students.classid;
select students.name,class.name from class right join students on class.id=students.classid;
複製代碼
至此, MySQL
中一些經常使用的命令行也基本介紹完了, 下面看一些MySQL
和Python
是如何進行交互的函數
MySQL
和Python
的交互Python
要對MySQL
數據庫進行操做, 須要引入pymysql
模塊pymsql
是Python
中操做MySQL
的模塊, 而且pymysql
支持python3.x
版本pymysql
, 終端執行一下語句pip3 install pymysql
複製代碼
# 連接數據庫
# 參數1:mysql服務所在主機的IP(能夠是IP地址, 本機連接能夠是localhost)
# 參數2:用戶名
# 參數3:密碼
# 參數4:要鏈接的數據庫名
db = pymysql.connect('localhost', 'root', 'titanjun', 'titansql')
# 建立遊標, 查詢數據默認爲元組類型
cursor = db.cursor()
# 建立sql語句
sql = "select version()"
# 執行sql語句
cursor.execute(sql)
# 獲取返回的信息
data = cursor.fetchone()
print(data)
# 關閉遊標
cursor.close()
# 關閉數據庫
db.close()
複製代碼
import pymysql
db = pymysql.connect('localhost', 'root', 'jun.0929', 'titansql')
# 建立遊標, 查詢數據默認爲元組類型
cursor = db.cursor()
# 建表
# 在建表以前要檢查表是否存在, 若是存在則刪除
cursor.execute("drop table if exists userinfo")
# 建立表
try:
sql = "create table userinfo(id int auto_increment primary key, age int not null)"
cursor.execute(sql)
print('建立成功')
except:
print('建立表失敗')
cursor.close()
db.close()
複製代碼
import pymysql
db = pymysql.connect('localhost', 'root', 'jun.0929', 'titansql')
cursor = db.cursor()
# 插入數據的字符串命令
sql = 'insert into userinfo values'
for i in range(10, 20):
ageStr = "(0, %d)" % i
addsql = sql + ageStr
try:
cursor.execute(addsql)
# 提交到數據庫, 否則沒法保存新建或者修改的數據
db.commit()
print('插入數據成功')
except:
# 若是提交失敗則回滾到上一次的提交, 不然下一次提交可能會衝突
db.rollback()
print('插入數據失敗')
cursor.close()
db.close()
複製代碼
import pymysql
db = pymysql.connect('localhost', 'root', 'jun.0929', 'titansql')
cursor = db.cursor()
# 修改/更新數據命令字符串
sql = 'update userinfo set age=30 where id=4'
# 刪除數據命令字符串
# sql = 'delete from userinfo where age=16'
try:
cursor.execute(sql)
db.commit()
print('數據更新成功')
except:
db.rollback()
print('數據更新失敗')
cursor.close()
db.close()
複製代碼
fetchone
: 獲取下一個查詢結果集,結果集是一個對象fetchall
: 接收所有的返回的行rowcount
: 是一個只讀屬性,返回execute()
方法影響的行數import pymysql
db = pymysql.connect('localhost', 'root', 'jun.0929', 'titansql')
cursor = db.cursor()
# 查詢數據字符串
sql = 'select * from userinfo where age>16'
try:
cursor.execute(sql)
# 得到一條查詢數據
print(cursor.fetchone())
print('查詢到-%d-條數據' % cursor.rowcount)
result = cursor.fetchall()
for row in result:
print('%d--%d' % (row[0], row[1]))
print('數據查詢成功')
except:
print('數據查詢失敗')
cursor.close()
db.close()
複製代碼
至此, Python和MySQL交互的最基本最簡單的使用也介紹完了, 若有不足之處還望告知工具