Mysql數據庫知識點總結
- 1、基本概念
- 一、數據庫服務器
- 咱們能夠理解爲數據庫服務器便是一臺內存較高的計算機,能夠在上面運行數據庫管理軟件
- 二、數據庫管理系統
- 三、數據庫
- 四、表
- 即文件,用來存放多條記錄,每條記錄爲多個字段組成的一行數據
- 2、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;
- 3、SQL數據類型
- SQL之中沒有bool值,tinyint[1]表示true;tinyint[0]表示fasle.
- int數據類型後面存儲的是顯示寬度,而不是存儲寬度,其餘的數據類型則表示的是存儲寬度
- now()sql中的內置函數,根據數據類型生成相對應的時間模式
- char( )定長字符串,存儲速度快,可是浪費空間
- varchar( )變長字符串,存儲速度慢,但是節省空間
- enum() 表示枚舉 多選一
- set( )表示集合 多選多
- 4、約束:做用是保證數據的完整性和一致性
- 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 同步更新
- 5、查詢:
- 單表查詢的關鍵字執行順序
- 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:表示存在,使用此關鍵字時,內層查詢語句不返回查詢的記錄,而是返回一個布爾值,當此布爾值爲真時外層語句進查詢,反之不進行查詢
- 6、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( )
- 7、索引
- 索引的做用:約束和加速查找
- 無索引的時候通常會 從前至後一條條查找
- 有索引的時候:建立索引的本質就是創造額外的文件,查詢時先去額外的文件找,定好位置,再去原始表直接查詢,提升查詢速度,可是增刪改的速度依然慢,建立索引後必須命中索引纔有效
- 索引的分類
- 一、普通索引:加速查詢
- 加入索引:create index 索引名 on 表名(列名)
- 刪除索引: drop index 索引名 on 表名
- 查看索引:show index from 表名
- 二、惟一索引:加速查找和惟一約束(可含null)
- 加入索引:create unique index 索引名 on 表名(列名)
- 刪除:drop index 索引名 on 表名
- 三、主鍵索引
- 加入索引:alter table 表名 add primary key(列名)
- 刪除索引:alter table 表名 drop primary key(列名)和alter table 表名 modify 列名 int,drop primary key
- 四、組合索引:將多個列組合成一個索引
- 建立組合索引:create iindex 索引名 on 表名(列1,列2)
- 在使用組合索引時,若組合索引爲(name,email),單獨索引email時不走索引,這稱爲最左前綴匹配原則,最左匹配原則中,mysql會一直向右匹配知道遇到(< > between like)這一類的範圍查詢時中止
- explain + sql查詢語句,用於查詢sql執行信息參數
- 在使用關鍵字‘like’查詢時:like ‘n%’ 走索引;可是like ‘%n%’不走索引,即有且僅只有後面帶上%時走索引
- 使用函數時索引不生效
歡迎關注本站公眾號,獲取更多信息