【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
數據元素 --> 記錄 -->數據表 --> 數據庫
數據表 : 存放數據的表格
字段: 每一個列,用來表示該列數據的含義
記錄: 每一個行,表示一組完整的數據
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安裝教程去安裝
服務端啓動
查看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
結構化查詢語言(Structured Query Language),一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統。
SQL語句使用特色
- SQL語言基本上獨立於數據庫自己
- 各類不一樣的數據庫對SQL語言的支持與標準存在着細微的不一樣
- 每條命令必須以 ; 結尾
- SQL命令關鍵字不區分字母大小寫
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】 分析存儲內容
【2】 肯定字段構成
【3】 設計字段類型
數據類型支持
數字類型:
整數類型(精確值) - 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:定長,效率高,通常用於固定長度的表單提交數據存儲,默認1字符
varchar:不定長,效率偏低
text用來存儲非二進制文本
blob用來存儲二進制字節串
enum用來存儲給出的一個值
set用來存儲給出的值中一個或多個值
建立表(指定字符集)
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 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 * from 表名 [where 條件]; select 字段1,字段名2 from 表名 [where 條件];
e.g. select * from class_1; select name,age from class_1;
where子句在sql語句中扮演了重要角色,主要經過必定的運算條件進行數據的篩選
MySQL 主要有如下幾種運算符:
算術運算符
比較運算符
邏輯運算符
位運算符
select * from class_1 where age % 2 = 0;
select * from class_1 where age + 2 = 10;
![](http://static.javashuo.com/static/loading.gif)
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);
![](http://static.javashuo.com/static/loading.gif)
select * from class_1 where sex='m' and age>9;
![](http://static.javashuo.com/static/loading.gif)
update 表名 set 字段1=值1,字段2=值2,... where 條件;
e.g. update class_1 set age=11 where name='Abby';
delete from 表名 where 條件; 注意:delete語句後若是不加where條件,全部記錄所有清空 delete from class_1 where name='Abby';
語法 :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 :不給值默認返回系統當前時間
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;
mysqldump -u用戶名 -p 源庫名 > ~/***.sql
--all-databases 備份全部庫
庫名 備份單個庫
-B 庫1 庫2 庫3 備份多個庫
庫名 表1 表2 表3 備份指定庫的多張表
mysql -uroot -p 目標庫名 < ***.sql
從全部庫備份中恢復某一個庫(--one-database)mysql -uroot -p --one-database 目標庫名 < all.sql
sudo pip3 install pymysql
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() 獲取全部記錄