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

mysql

  • 原文博客地址: Mac環境下MySQL的安裝和基本命令的使用
  • MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不一樣的表中,而不是將全部數據放在一個大倉庫內,這樣就增長了速度並提升了靈活性。
  • MySQL所使用的SQL語言是用於訪問數據庫的最經常使用標準化語言。
  • 因爲其體積小、速度快、整體擁有成本低,尤爲是開放源碼這一特色,許多中小型網站爲了下降網站整體擁有成本而選擇了MySQL做爲網站數據庫。
  • MySQL是一個多用戶、多線程的關係型數據庫管理系統。 工做模式是基於客戶機/服務器結構。目前它能夠支持幾乎全部的操做系統
  • 簡單的來講,MySQL是一個開放的、快速的、多線程的、多用戶的SQL數據庫服務器

一. MySQL的安裝

工欲善其事必先利其器, 要研究MySQL咱們首先要安裝MySQL, 這裏只介紹Mac環境下的安裝和數據庫操做python

1. 下載MySQL

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

SQLDownload1

接着, 會跳轉到以下頁面, 你只須要選擇不登陸,直接下載便可(固然也能夠選擇註冊並登陸)sql

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. 其餘命令

須要注意的是: 如下全部命令中如過結尾有分號(;)的必定不能省略, 不然不是一條完整的命令, 系統會提示你繼續輸入命令python3.x

// 查看版本(鏈接後能夠執行)
select version();

//顯示當前時間(鏈接後能夠執行)
select now();

//退出登陸(斷開鏈接)
quit或exit
複製代碼

image

2. 數據庫操做

// 一、建立數據庫
    格式:create database 數據庫名 charset=utf8;
    示例:create database titansql charset=utf8;
// 二、刪除數據庫
    格式:drop database 數據庫名;
    示例:drop database titansql;
// 三、切換數據庫
    格式:use 數據庫名;
    示例:use titansql;
// 四、查看當前選擇的數據庫
    select database();
    
複製代碼

建立完成記得刷新Navicat for MySQLbash

image

3. 表操做

// 一、查看當前數據庫中全部表
    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
複製代碼

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. 查詢數據

一、基本語法

  • 格式: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

條件查詢

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

    需求:查詢編號爲81012的學生
    示例:select * from student where id in (8,10,12);
    需求:查詢編號爲68的學生
    示例: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,須要結合()來使用
複製代碼

聚合操做

  • 爲了快速等到統計數據,提供了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;
    

    /* 關聯查詢: 分類: 一、表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中一些經常使用的命令行也基本介紹完了, 下面看一些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交互的最基本最簡單的使用也介紹完了, 若有不足之處還望告知工具

相關文章
相關標籤/搜索