- 原文部落格地址: Mac環境下MySQL的安裝和基本命令的使用
MySQL
是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性。MySQL
所使用的SQL
語言是用於訪問資料庫的最常用標準化語言。- 由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了
MySQL
作為網站資料庫。 MySQL
是一個多使用者、多執行緒的關係型資料庫管理系統。 工作模式是基於客戶機/伺服器結構。目前它可以支援幾乎所有的作業系統- 簡單的來說,
MySQL
是一個開放的、快速的、多執行緒的、多使用者的SQL資料庫伺服器
一. MySQL的安裝
工欲善其事必先利其器, 要研究MySQL
我們首先要安裝MySQL
, 這裡只介紹Mac
環境下的安裝和資料庫操作
1. 下載MySQL
直接開啟MySQL官網下載頁, 選擇mac OS
系統後, 選擇DMG
格式下載軟體
接著, 會跳轉到如下頁面, 你只需要選擇不登入,直接下載即可(當然也可以選擇註冊並登入)
- 下載好後, 按照
dmg
裡面的pkg
檔案一路安裝即可, 但是需要注意的是- 除了倒數第二步之外按照預設一路安裝即可
- 倒數第二步會有一個設定管理員密碼的過程, 設定好後, 一定要牢記該密碼, 後期連結資料庫會需要
- 最後開啟系統偏好設定, 最後會有一個
MySQL
的圖示 - 開啟
MySQL
會看到預設是開啟的(安裝的時候按照預設設定安裝的情況下)
到這裡
MySQL
就已經基本安裝完成了, 不需要再修改什麼配置了
安裝Navicat for MySQL
Navicat for MySQL
是一套專為MySQL
設計的高效能資料庫管理及開發工具- 它可以用於任何版本
3.21
或以上的MySQL
資料庫伺服器 - 支援大部份
MySQL
最新版本的功能,包括觸發器、儲存過程、函式、事件、檢視、管理使用者等 - 正版下載地址, 不過正版只有14天的試用時間
- 安裝後, 按照下圖完善配置即可, 其中連線名隨意, 密碼即為安裝
MySQL
環境的時候設定的密碼
二. MySQL
的基本命令
1. 基本命令
- 首先要開啟終端(
Windows
中是cmd
), 以下命令均是在終端執行 - 啟動/停止服務只有在
Windows
系統中才需要執行,Mac
環境下不需要
1-1. 啟動/停止服務
// 啟動服務
格式:net start 服務名稱
示例:net start titansql
// 停止服務
格式:net stop 服務名稱
示例:net stop titansql
複製程式碼
1-2. 連線資料
格式:mysql -u 使用者名稱 -p
示例:mysql -u root -p
// 此處會提示你輸入密碼(安裝時設定的)
複製程式碼
1-3. 遠端連線
- 連結他人或其他伺服器的資料庫
- 格式:
mysql -h ip地址 -u 使用者名稱 -p
- 輸入對方
mysql
密碼
- 格式:
1-4. 其他命令
需要注意的是:
以下所有命令中如過結尾有分號(;
)的一定不能省略, 否則不是一條完整的命令, 系統會提示你繼續輸入命令
// 檢視版本(連線後可以執行)
select version();
//顯示當前時間(連線後可以執行)
select now();
//退出登入(斷開連線)
quit或exit
複製程式碼
2. 資料庫操作
// 1、建立資料庫
格式:create database 資料庫名 charset=utf8;
示例:create database titansql charset=utf8;
// 2、刪除資料庫
格式:drop database 資料庫名;
示例:drop database titansql;
// 3、切換資料庫
格式:use 資料庫名;
示例:use titansql;
// 4、檢視當前選擇的資料庫
select database();
複製程式碼
建立完成記得重新整理Navicat for MySQL
3. 表操作
// 1、檢視當前資料庫中所有表
show tables;
// 2、建立表
格式: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);
// 3、刪除表
格式:drop table 表名;
示例:drop table student;
// 4、檢視錶結構
格式:desc 表名;
示例:desc student;
// 5、檢視建表語句
格式:show create table 表名;
示例:show create table student;
// 6、重新命名錶名
格式:rename table 原表名 to 新表名;
示例:rename table car to newCar;
// 7、修改表
格式:alter table 表名 add|change|drop 列名 型別;
示例:alter table newcar add isDelete bit default 0
複製程式碼
4. 資料操作
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;
複製程式碼
5. 查詢資料
1、基本語法
- 格式:
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;
複製程式碼
條件查詢
// 1、語法
select * from 表名 where 條件
// 2、比較運算子
等於 =
大於 >
小於 <
大於等於 >=
小於等於 <=
不等於 !=或<>
需求:查詢id值大於8的所有資料
示例:select * from student where id>8;
// 3、邏輯運算子
and 並且
or 或者
not 非
需求:查詢id值大於7的女同學
示例:select * from student where id>7 and gender=0;
// 4、模糊查詢(like)
%: 表示任意多個任意字元
_: 表示一個任意字元
需求:查詢姓習的同學
示例:
select * from student where name like "習%";
select * from student where name like "習_";
// 5、範圍查詢
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;
// 6、空判斷
注意:null與""是不同的
判斷空:is null
判斷非空: is not null
需求:查詢沒有地址的同學
示例:select * from student where address is null;
需求:查詢有地址的同學
示例:select * from student where address is not null;
// 7、優先順序
小括號,not 比較運算子,邏輯運算子
and比or優先順序高,如果同時出現並希望先選or,需要結合()來使用
複製程式碼
聚合操作
- 為了快速等到統計資料,提供了5個聚合函式
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 , ……;
- 說明:
- 將資料按照列1進行排序,如果某些列1的值相同,則按照列2進行排序
- 預設按照從小到大的順序排序
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;
/* 關聯查詢:
分類:
1、表A inner join 表B:
表A與表B匹配的行會出現在結果集中
2、表A left join 表B:
表A與表B匹配的行會出現在結果集中,外加表A中獨有的資料,未對應的資料使用null填充
3、表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. 建立資料庫連線
# 連結資料庫
# 引數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()
複製程式碼
2. 建立表
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()
複製程式碼
3. 在表中插入資料
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()
複製程式碼
4. 修改/更新/刪除資料
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()
複製程式碼
5. 查詢資料
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互動的最基本最簡單的使用也介紹完了, 如有不足之處還望告知