Mac環境下MySQL的安裝和基本命令的使用

RunTitan發表於2018-07-20

mysql

  • 原文部落格地址: Mac環境下MySQL的安裝和基本命令的使用
  • MySQL是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
  • MySQL所使用的SQL語言是用於訪問資料庫的最常用標準化語言。
  • 由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。
  • MySQL是一個多使用者、多執行緒的關係型資料庫管理系統。 工作模式是基於客戶機/伺服器結構。目前它可以支援幾乎所有的作業系統
  • 簡單的來說,MySQL是一個開放的、快速的、多執行緒的、多使用者的SQL資料庫伺服器

一. MySQL的安裝

工欲善其事必先利其器, 要研究MySQL我們首先要安裝MySQL, 這裡只介紹Mac環境下的安裝和資料庫操作

1. 下載MySQL

直接開啟MySQL官網下載頁, 選擇mac OS系統後, 選擇DMG格式下載軟體

SQLDownload1

接著, 會跳轉到如下頁面, 你只需要選擇不登入,直接下載即可(當然也可以選擇註冊並登入)

SQLDownload2

  • 下載好後, 按照dmg裡面的pkg檔案一路安裝即可, 但是需要注意的是
    • 除了倒數第二步之外按照預設一路安裝即可
    • 倒數第二步會有一個設定管理員密碼的過程, 設定好後, 一定要牢記該密碼, 後期連結資料庫會需要
  • 最後開啟系統偏好設定, 最後會有一個MySQL的圖示
  • 開啟MySQL會看到預設是開啟的(安裝的時候按照預設設定安裝的情況下)

image

到這裡MySQL就已經基本安裝完成了, 不需要再修改什麼配置了

安裝Navicat for MySQL

  • Navicat for MySQL是一套專為MySQL設計的高效能資料庫管理及開發工具
  • 它可以用於任何版本3.21或以上的 MySQL資料庫伺服器
  • 支援大部份MySQL最新版本的功能,包括觸發器、儲存過程、函式、事件、檢視、管理使用者等
  • 正版下載地址, 不過正版只有14天的試用時間
  • 安裝後, 按照下圖完善配置即可, 其中連線名隨意, 密碼即為安裝MySQL環境的時候設定的密碼

MySQLConten

二. 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
複製程式碼

image

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

image

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;
複製程式碼

distinct

條件查詢

// 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...  表示在一個連續的範圍內

    需求:查詢編號為81012的學生
    示例:select * from student where id in (8,10,12);
    需求:查詢編號為68的學生
    示例: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;
複製程式碼

wherehaving的區別:

  • 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中一些常用的命令列也基本介紹完了, 下面看一些MySQLPython是如何進行互動的

MySQLPython的互動

  • Python要對MySQL資料庫進行操作, 需要引入pymysql模組
  • pymsqlPython中操作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互動的最基本最簡單的使用也介紹完了, 如有不足之處還望告知


相關文章