MySQL數據庫

數據庫概述

數據存儲階段

【1】 人工管理階段python

缺點 : 數據沒法共享,不能單獨保持,數據存儲量有限mysql

【2】 文件管理階段 (.txt .doc .xls)正則表達式

優勢 : 數據能夠長期保存,能夠存儲大量的數據,使用簡單sql

缺點 : 數據一致性差,數據查找修改不方便,數據冗餘度可能比較大數據庫

【3】數據庫管理階段express

優勢 : 數據組織結構化下降了冗餘度,提升了增刪改查的效率,容易擴展,方便程序調用,作自動化處理編程

缺點 :須要使用sql 或者 其餘特定的語句,相對比較複雜windows

數據庫應用

融機構、遊戲網站、購物網站、論壇網站 ... ...服務器

 

 

基礎概念

數據 : 可以輸入到計算機中並被識別處理的信息集合數據結構

數據結構 :研究一個數據集合中數據之間關係的

數據庫 : 按照數據結構,存儲管理數據的倉庫。數據庫是在數據庫管理系統管理和控制下,在必定介質上的數據集合。

數據庫管理系統 :管理數據庫的軟件,用於創建和維護數據庫

數據庫系統 : 由數據庫和數據庫管理系統,開發工具等組成的集合

數據庫分類和常見數據庫

  • 關係型數據庫和非關係型數據庫

關係型: 採用關係模型(二維表)來組織數據結構的數據庫

非關係型: 不採用關係模型組織數據結構的數據庫

  • 開源數據庫和非開源數據庫

開源:MySQL、SQLite、MongoDB

非開源:Oracle、DB二、SQL_Server

  • 常見的關係型數據庫

MySQL、Oracle、SQL_Server、DB2 SQLite

認識關係型數據庫和MySQL

  1. 數據庫結構 (圖庫結構)

數據元素 --> 記錄 -->數據表 --> 數據庫

 

 

 

  1. 數據庫概念解析

數據表 : 存放數據的表格

字段: 每一個列,用來表示該列數據的含義

記錄: 每一個行,表示一組完整的數據

 

 

  1. MySQL特色
  • 是開源數據庫,使用C和C++編寫
  • 可以工做在衆多不一樣的平臺上
  • 提供了用於C、C++、Python、Java、Perl、PHP、Ruby衆多語言的API
  • 存儲結構優良,運行速度快
  • 功能全面豐富
  1. MySQL安裝

Ubuntu安裝MySQL服務

安裝服務端: sudo apt-get install mysql-server
安裝客戶端: sudo apt-get install mysql-client

配置文件:/etc/mysql
命令集: /usr/bin
數據庫存儲目錄 :/var/lib/mysql

Windows安裝MySQL

下載MySQL安裝包(windows) https://dev.mysql.com/downloads/mysql/
mysql-installer***5.7.***.msi

安裝教程去安裝

  1. 啓動和鏈接MySQL服務

服務端啓動

查看MySQL狀態: sudo /etc/init.d/mysql status
啓動服務:sudo /etc/init.d/mysql start | stop | restart

客戶端鏈接

命令格式

mysql -h主機地址 -u用戶名 -p密碼
mysql -hlocalhost -uroot -p123456
本地鏈接可省略 -h 選項: mysql -uroot -p123456

關閉鏈接

ctrl-D
exit

SQL語句

什麼是SQL

結構化查詢語言(Structured Query Language),一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統。

SQL語句使用特色

  • SQL語言基本上獨立於數據庫自己
  • 各類不一樣的數據庫對SQL語言的支持與標準存在着細微的不一樣
  • 每條命令必須以 ; 結尾
  • SQL命令關鍵字不區分字母大小寫

MySQL 數據庫操做

數據庫操做

1.查看已有庫

show databases;

2.建立庫(指定字符集)

create database 庫名 [character set utf8];

e.g. 建立stu數據庫,編碼爲utf8 create database stu character set utf8; create database stu charset=utf8; 

3.查看建立庫的語句(字符集)

show create database 庫名;

e.g. 查看stu建立方法 show create database stu; 

4.查看當前所在庫

select database();

5.切換庫

use 庫名;

e.g. 使用stu數據庫 use stu; 

6.刪除庫

drop database 庫名;

e.g. 刪除test數據庫 drop database test; 

7.庫名的命名規則

  • 數字、字母、下劃線,但不能使用純數字
  • 庫名區分字母大小寫
  • 不能使用特殊字符和mysql關鍵字

數據表的管理

  1. 表結構設計初步

    【1】 分析存儲內容
    【2】 肯定字段構成
    【3】 設計字段類型

  2. 數據類型支持

數字類型:

整數類型(精確值) - INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT
定點類型(精確值) - DECIMAL
浮點類型(近似值) - FLOAT,DOUBLE
比特值類型 - BIT

 

對於精度比較高的東西,好比money,用decimal類型提升精度減小偏差。列的聲明語法是DECIMAL(M,D)。

M是數字的最大位數(精度)。其範圍爲1~65,M 的默認值是10。
D是小數點右側數字的數目(標度)。其範圍是0~30,但不得超過M。
好比 DECIMAL(6,2)最多存6位數字,小數點後佔2位,取值範圍-9999.99到9999.99。

比特值類型指0,1值表達2種狀況,如真,假


字符串類型:

CHAR和VARCHAR類型
BINARY和VARBINARY類型
BLOB和TEXT類型
ENUM類型和SET類型

 

  • char 和 varchar

char:定長,效率高,通常用於固定長度的表單提交數據存儲,默認1字符
varchar:不定長,效率偏低

  • text 和blob

text用來存儲非二進制文本
blob用來存儲二進制字節串

  • enum 和 set

enum用來存儲給出的一個值
set用來存儲給出的值中一個或多個值


  1. 表的基本操做

建立表(指定字符集)

create table 表名(
字段名 數據類型,
字段名 數據類型,
...
字段名 數據類型
);

  • 若是你想設置數字爲無符號則加上 unsigned
  • 若是你不想字段爲 NULL 能夠設置字段的屬性爲 NOT NULL, 在操做數據庫時若是輸入該字段的數據爲NULL ,就會報錯。
  • DEFAULT 表示設置一個字段的默認值
  • AUTO_INCREMENT定義列爲自增的屬性,通常用於主鍵,數值會自動加1。
  • PRIMARY KEY關鍵字用於定義列爲主鍵。主鍵的值不能重複。
建立班級表 create table class_1 (id int primary key auto_increment,name varchar(32) not null,age int not null,sex enum('w','m'),score float default 0.0); 建立興趣班表 create table interest (id int primary key auto_increment,name varchar(32) not null,hobby set('sing','dance','draw'),course char not null,price decimal(6,2),comment text); 

查看數據表

show tables;

查看已有表的字符集

show create table 表名;

查看錶結構

desc 表名;

刪除表

drop table 表名;

數據基本操做

插入(insert)

insert into 表名 values(值1),(值2),...; insert into 表名(字段1,...) values(值1),...; 
e.g. insert into class_1 values (2,'Baron',10,'m',91),(3,'Jame',9,'m',90); 

查詢(select)

select * from 表名 [where 條件]; select 字段1,字段名2 from 表名 [where 條件]; 
e.g. select * from class_1; select name,age from class_1; 

where子句

where子句在sql語句中扮演了重要角色,主要經過必定的運算條件進行數據的篩選

MySQL 主要有如下幾種運算符:

算術運算符
比較運算符
邏輯運算符
位運算符

算數運算符

select * from class_1 where age % 2 = 0;
select * from class_1 where age + 2 = 10;

 



比較運算符 

select * from class_1 where age > 8; select * from class_1 where between 8 and 10; select * from class_1 where age in (8,9);

 

邏輯運算符

 

select * from class_1 where sex='m' and age>9;

 

位運算符

 

更新表記錄(update)

update 表名 set 字段1=值1,字段2=值2,... where 條件; 
e.g. update class_1 set age=11 where name='Abby'; 

刪除表記錄(delete)

delete from 表名 where 條件; 注意:delete語句後若是不加where條件,全部記錄所有清空  delete from class_1 where name='Abby'; 

表字段的操做(alter)

語法 :alter table 表名 執行動做; * 添加字段(add) alter table 表名 add 字段名 數據類型; alter table 表名 add 字段名 數據類型 first; alter table 表名 add 字段名 數據類型 after 字段名; * 刪除字段(drop) alter table 表名 drop 字段名; * 修改數據類型(modify) alter table 表名 modify 字段名 新數據類型; * 修改字段名(change) alter table 表名 change 舊字段名 新字段名 新數據類型; * 表重命名(rename) alter table 表名 rename 新表名; 
 alter table interest add date Date after course; 

時間類型數據

時間和日期類型:

DATE,DATETIME和TIMESTAMP類型
TIME類型
年份類型YEAR

 

時間格式

date :"YYYY-MM-DD"
time :"HH:MM:SS"
datetime :"YYYY-MM-DD HH:MM:SS"
timestamp :"YYYY-MM-DD HH:MM:SS"
注意
一、datetime :不給值默認返回NULL值
二、timestamp :不給值默認返回系統當前時間

日期時間函數

  • now() 返回服務器當前時間
  • curdate() 返回當前日期
  • curtime() 返回當前時間
  • date(date) 返回指定時間的日期
  • time(date) 返回指定時間的時間

時間操做

  • 查找操做
  select * from timelog where Date = "2018-07-02"; select * from timelog where Date>="2018-07-01" and Date<="2018-07-31"; 
  • 日期時間運算

    • 語法格式

      select * from 表名 where 字段名 運算符 (時間-interval 時間間隔單位);

    • 時間間隔單位: 1 day | 2 hour | 1 minute | 2 year | 3 month

  select * from timelog where shijian > (now()-interval 1 day); 

高級查詢語句

模糊查詢和正則查詢

LIKE用於在where子句中進行模糊查詢,SQL LIKE 子句中使用百分號 %來表示任意0個或多個字符,下劃線_表示任意一個字符。

使用 LIKE 子句從數據表中讀取數據的通用語法:

SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 
e.g. mysql> select * from class_1 where name like 'A%'; 

mysql中對正則表達式的支持有限,只支持部分正則元字符

SELECT field1, field2,...fieldN FROM table_name WHERE field1 REGEXP condition1 
e.g. select * from class_1 where name regexp 'B.+'; 

排序

ORDER BY 子句來設定你想按哪一個字段哪一種方式來進行排序,再返回搜索結果。

使用 ORDER BY 子句將查詢數據排序後再返回數據:

SELECT field1, field2,...fieldN from table_name1 where field1 ORDER BY field1 [ASC [DESC]] 

默認狀況ASC表示升序,DESC表示降序

select * from class_1 where sex='m' order by age; 

分頁

LIMIT 子句用於限制由 SELECT 語句返回的數據數量 或者 UPDATE,DELETE語句的操做數量

帶有 LIMIT 子句的 SELECT 語句的基本語法以下:

SELECT column1, column2, columnN FROM table_name WHERE field LIMIT [num] 

聯合查詢

UNION 操做符用於鏈接兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重複的數據。

UNION 操做符語法格式:

SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions] UNION [ALL | DISTINCT] SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions]; 

expression1, expression2, ... expression_n: 要檢索的列。
tables: 要檢索的數據表。
WHERE conditions: 可選, 檢索條件。
DISTINCT: 可選,刪除結果集中重複的數據。默認狀況下 UNION 操做符已經刪除了重複數據,因此 DISTINCT 修飾符對結果沒啥影響。
ALL: 可選,返回全部結果集,包含重複數據。

select * from class_1 where sex='m' UNION ALL select * from class_1 where age > 9; 

數據備份

  1. 備份命令格式

mysqldump -u用戶名 -p 源庫名 > ~/***.sql

--all-databases 備份全部庫
庫名 備份單個庫
-B 庫1 庫2 庫3 備份多個庫
庫名 表1 表2 表3 備份指定庫的多張表

  1. 恢復命令格式

mysql -uroot -p 目標庫名 < ***.sql
從全部庫備份中恢復某一個庫(--one-database)

mysql -uroot -p --one-database 目標庫名 < all.sql

Python操做MySQL數據庫

pymysql安裝

sudo pip3 install pymysql

pymysql使用流程

  1. 創建數據庫鏈接(db = pymysql.connect(...))
  2. 建立遊標對象(c = db.cursor())
  3. 遊標方法: c.execute("insert ....")
  4. 提交到數據庫 : db.commit()
  5. 關閉遊標對象 :c.close()
  6. 斷開數據庫鏈接 :db.close()

經常使用函數

db = pymysql.connect(參數列表)

host :主機地址,本地 localhost
port :端口號,默認3306
user :用戶名
password :密碼
database :庫
charset :編碼方式,推薦使用 utf8

數據庫鏈接對象(db)的方法

db.commit() 提交到數據庫執行
db.rollback() 回滾
cur = db.cursor() 返回遊標對象,用於執行具體SQL命令
db.close() 關閉鏈接

遊標對象(cur)的方法

cur.execute(sql命令,[列表]) 執行SQL命令 cur.close() 關閉遊標對象 cur.fetchone() 獲取查詢結果集的第一條數據 (1,100001,"河北省") cur.fetchmany(n) 獲取n條 ((記錄1),(記錄2)) cur.fetchall() 獲取全部記錄

相關文章
相關標籤/搜索