- 一、基本概念
- 1、數據庫服務器
- 我們可以理解為數據庫服務器即是一台內存較高的計算機,可以在上面運行數據庫管理軟件
- 2、數據庫管理系統
- 如Mysql,是一個軟件,用來管理數據庫的軟件
- 3、數據庫
- 即文件夾,用來組織文件
- 4、表
- 即文件,用來存放多條記錄,每條記錄為多個字段組成的一行數據
- 1、數據庫服務器
- 二、Mysql基本介紹
- Mysql是目前WEB應用最好的RDBMS(Relation Database Mangement System)關系數據庫管理系統之一
- 關系型數據庫是將數據保存到不同的表里面,而不是將數據放到一個大倉庫內
- 關系型數據庫與非關系型數據庫的區別是:關系型數據庫有表結構,非關系型數據庫是通過key-value存儲,無表結構
- Mysql使用的是標准的SQL數據語言形式,支持多種語言,支持5000萬條的數據倉庫,32位系統表文件最大支持4GB,64位系統最大支持表文件為8TB
- 通俗的講:Mysql就是一個基於socket編寫的C/S架構的軟件
- 儲存引擎
- mysql默認的查詢引擎為innodb,可以自行進行更改
- 語法:
- win:
- 啟動mysql服務端,在cmd窗口運行mysqld
- 數據庫初始化命令:mysql-initialize-insecure
- 啟動mysql客戶端,並連接服務端mysql -uroot -p
- 連接其他ip數據庫,mysql -u賬號 -hIP地址 -P端口號 -p密碼
- 查看當前登陸用戶:select user( )
- 刷新權限,執行命令:flush privileges;
- 查看進程:tasklist | findstr mysql
- 殺死進程:tasklist /F /PID 進程號
- mac:
- 設置新密碼:set password for '用戶名'@'IP地址'=password('');
- 查看系統進程:ps -A
- 殺死系統進程:sudo kill -9 PID
- 操作文件夾(庫):
- 增加一個庫:create database db1 charset utf8;
- 查看所有庫: show databases;
- 查看特定庫: show create database db1;
- 刪庫跑路: drop database db1;
- 操作文件(表):
- 切換進數據庫:use db1;
- 查看當前所在文件夾;select database( );
- 增加表:create table t1(id int,name char(6));
- 查看特定表:show create table t1;
- 查看所有表:show tables;或者desc t1;
- 改:
- alter table t1 modify name char(10);name字段改為10字節;
- alter table t1 modify name NAME char(10);name字段名改成NAME
- 復制表
- 即復制表數據也復制表結構:create table t1 select * from db1.t1;
- 只復制表結構create table a1 like db1.t1;
- 清空表
- delete from t1;但是這種方法會保留自增的ID
- truncate table t1;這種方法不會保留自增ID
- 操作文件內容
- 增加內容:insert into (id,name) values(1,'aa'),(2,'bb'),(3,'cc');
- 查看內容:select * from db1.t1;
- 刪除內容:delete from t1 where id =1;
- 查看用戶權限:select * from mysql.user where user='root'\G;
- win:
- Mysql是目前WEB應用最好的RDBMS(Relation Database Mangement System)關系數據庫管理系統之一
- 三、SQL數據類型
- SQL之中沒有bool值,tinyint[1]表示true;tinyint[0]表示fasle.
- int數據類型后面存儲的是顯示寬度,而不是存儲寬度,其他的數據類型則表示的是存儲寬度
- now()sql中的內置函數,根據數據類型生成相對應的時間模式
- char( )定長字符串,存儲速度快,但是浪費空間
- varchar( )變長字符串,存儲速度慢,可是節省空間
- enum() 表示枚舉 多選一
- set( )表示集合 多選多
- 四、約束:作用是保證數據的完整性和一致性
- not null 表示該字段數據不能為空
- default 表示該字段的默認值
- unique 唯一(列唯一,組合唯一)
- primary key 主鍵 一張列表中只允許出現一個主鍵(not null + unique)
- auto-increment 自增長
- foregin key 外鍵 建立兩個表之間的聯系
- 語法 constraint fk_dep foreign key(關聯列名) references 被關聯表(被關聯列)
- on delete cascade 同步刪除
- on update cascade 同步更新
- 五、查詢:
- 單表查詢的關鍵字執行順序
- from 說明是來自那一張表
- where 條件 后面可以跟比較運算符 between and in(. ). like(%表示任意字符 _表示一個字符)邏輯運算符
- group by 以某個字段的值進行分組,發生在where之后,查看組類信息依賴於聚合函數max min avg sum count
- having 過濾,在group by 后面的條件篩選
- order by 排序 asc升序 desc降序
- limite 限制查詢 記錄數 limte a, b. a表示從第a個開始,b表示查詢b條
- 多表連接查詢
- 語法:select 字段 from t1 inner/left/right join t2 on t1.字段=t2.字段;
- inner 表示只顯示連接匹配的行
- left:優先顯示左表的全部記錄
- right:優先顯示右表的全部記錄
- 子查詢中的關鍵字
- in/not in:查詢的結果是否在子表中
- 運算符:= < > !=
- exits:表示存在,使用此關鍵字時,內層查詢語句不返回查詢的記錄,而是返回一個布爾值,當此布爾值為真時外層語句進查詢,反之不進行查詢
- 語法:select 字段 from t1 inner/left/right join t2 on t1.字段=t2.字段;
- 單表查詢的關鍵字執行順序
- 六、pymysql簡單使用
- 連接:conn=pymysql.connect(host='IP',port=端口號,user='root',password='',db=db1,charset='utf8')
- 創建游標:cursor=conn.cursor( )
- 寫sql語句:sql=‘’
- 執行sql語句,返回在數據庫中查詢成功的記錄行數,result=cursor.execute(sql);在result中可以進行字符的拼接,execute(sql,[user,pwd]),即execute注入,防治惡意語法
- 使用mysql模塊進行增刪改操作時需使用commit( )方法進行提交,否則數據庫更改不生效;conn.commit( )
- 查詢操作:fetchone( )獲取下一行數據,從第一行開始;fetchall( )獲取所有行數據,;fetchany(n),獲取n行數據
- 查詢操作默認返回的是元組,使用如下語句獲取游標,改變cursor屬性,會返回字典:cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
- 移動指針:
- cursor.scroll(1,mode='relative')相對定位,相對當前位置向下移動
- cursor.scroll(1,mode='abusolute'絕對定位,相對左上角向下移動
- 關閉連接,游標和連接都需要關閉:cursor.close( ). conn.close( )
- 七、索引
- 索引的作用:約束和加速查找
- 無索引的時候一般會 從前至后一條條查找
- 有索引的時候:創建索引的本質就是創造額外的文件,查詢時先去額外的文件找,定好位置,再去原始表直接查詢,提高查詢速度,但是增刪改的速度依然慢,創建索引后必須命中索引才有效
- 索引的分類
- 1、普通索引:加速查詢
- 加入索引:create index 索引名 on 表名(列名)
- 刪除索引: drop index 索引名 on 表名
- 查看索引:show index from 表名
- 2、唯一索引:加速查找和唯一約束(可含null)
- 加入索引:create unique index 索引名 on 表名(列名)
- 刪除:drop index 索引名 on 表名
- 3、主鍵索引
- 加入索引:alter table 表名 add primary key(列名)
- 刪除索引:alter table 表名 drop primary key(列名)和alter table 表名 modify 列名 int,drop primary key
- 4、組合索引:將多個列組合成一個索引
- 創建組合索引:create iindex 索引名 on 表名(列1,列2)
- 在使用組合索引時,若組合索引為(name,email),單獨索引email時不走索引,這稱為最左前綴匹配原則,最左匹配原則中,mysql會一直向右匹配知道遇到(< > between like)這一類的范圍查詢時停止
- explain + sql查詢語句,用於查詢sql執行信息參數
- 在使用關鍵字‘like’查詢時:like ‘n%’ 走索引;但是like ‘%n%’不走索引,即有且僅只有后面帶上%時走索引
- 使用函數時索引不生效
- 1、普通索引:加速查詢
- 索引的作用:約束和加速查找