1.數據類型:(使用原則:夠用就行,儘可能使用範圍小的) 整數:int,bit 小數:decimal 字符串:varchar(可變長度),char(固定長度字符串) 日期時間:date,time,datetime 枚舉類型(enum) 特別說明2.約束(限制)主要: 主鍵primary key:物理存儲的順序 非空 not null 不容許填寫空格 惟一 unique:不容許重複 默認default:數據項的默認值 外鍵 foreign key:存儲其餘表的主鍵的字段其餘: unsigned 無符號 auto increment 自增4.經常使用術語: 數據庫: 數據庫是一些關聯表的集合。 數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。 列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。 行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。 冗餘:存儲兩倍數據,冗餘下降了性能,但提升了數據的安全性。 主鍵:主鍵是惟一的。一個數據表中只能包含一個主鍵。你可使用主鍵來查詢數據。 外鍵:外鍵用於關聯兩個表。 複合鍵:複合鍵(組合鍵)將多個列做爲一個索引鍵,通常用於複合索引。 索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。相似於書籍的目錄。 參照完整性: 參照的完整性要求關係中不容許引用不存在的實體。與實體完整性是關係模型必須知足的完整性約束條件,目的是保證數據的一致性。5.Mysql數據庫引擎: Innodb 支持事務處理和行級鎖(對數據元素進行修改時對整個數據元素進行加鎖) MyISAM 不支持以上6.經常使用命令行命令和語句 註釋:「--」 在參數名後面加「~」能夠保證參數的完整性而不會因爲各類狀況被誤認爲是兩個參數 進入客戶端:mysql -u用戶名 -p密碼 顯示全部數據庫:show databases; 顯示全部時間:select now(); 顯示版本:select version(); 建立數據庫: 以默認參數建立:create database 數據庫名 指定編碼格式等信息:create database 數據庫名 charset=編碼格式名 查看數據庫的建立信息(參數設置):show create database 已建立的數據庫名; 刪除數據庫:刪除數據庫: drop database 數據庫名; 查看當前使用的數據庫 select database(); 進入指定數據庫:use 數據庫名; 建立數據表 create table 表名(字段 類型 約束 [,字段 類型 約束]); 查看數據表的字段結構:desc 表名; 顯示當前數據庫的全部表名:show tables; 向指定表插入數據: insert into 表名 values(字段值序列(按表定義時的順序)) 顯示錶的結構:show create table 表名; 選取指定表的全部數據:select * from 表名; 開啓時間監測功能: set profiling=1; 顯示歷史查詢的語句和執行時間:show profiles;7.修改數據表: 添加字段:alter table 數據表名 add 列名 類型; 修改字段(非重命名):alter table 數據表名 modify 列名 類型及約束; 修改字段(重命名):alter table 數據表名 change 原列名 新列名 類型及約束; 刪除字段:alter table 數據表名 drop 列名; 刪除表:drop table 表名;8.修改數據表中的數據: 插入數據:insert into 表名 values(字段值序列) 主鍵若是是自增的,值能夠填0,null或者default 部分插入:insert into 表名(非空字段和其餘字段)values(字段值序列) 多行插入:多個括號括起來的序列值,由「,」隔開 刪除數據: 物理刪除:delete from 表名 [where 條件]; 不加條件刪除全部數據 刪除後的主鍵最好別用 邏輯刪除:添加一個標誌字段 經過update更改數據的字段值 通常使用邏輯刪除 修改數據:update 表名 set 字段名=字段值 where 條件;(where語句不加則修改表中全部數據) 查詢數據: select * from 表名 [where 條件]; *表示所有字段(列) select 字段名 [as 別名],字段名 [as 別名] from 表名 [where 條件]; 字段名可顛倒9.數據庫查詢: 條件查詢: 比較運算符 >,>=,<=,=,!=(<>) 邏輯運算符 and or 模糊查詢:like 字段名 like 字段值的知足的條件 %替換一個或多個 name like "小%" (以「小」字開頭的name字段) name like"%小" name字段值以「小」字結尾 _替換一個 name like "__" (name字段值必須有兩個字) name like "__%" name字段至少包含兩個字符 正則表達式匹配查詢: rlike 字段名 like 正則表達式串 範圍查詢: in:字段名 in (值集合) not in between and:字段名 between 值1 and 值2 not between and:字段名 not between 值1 and 值2 (切記不能再not後對between and 加括號,不然會報錯) is null/is not null 判斷字段值是否爲空10.排序:在查詢條件最後加order by 字段名 默認從小到大 從大到小desc,當排序根據的字段值相等時,按照主鍵排序, 多條件排序:order by 字段名1,字段名2,字段名3 在字段1的值相同的狀況下按照字段值2來排序,如此地推,若最後一個參照的字段值相等,則按照主鍵從小到大排序11.聚合函數: 計數count:select count(*) [as 別名] from 表名 where 條件; 最大值max:select max(字段名) from 表名[where 條件]; 總和sum: select sum(字段名) from 表名[where 條件]; 最小值min:select mini(字段名) from 表名[where 條件]; 平均值avg:select avg(字段名) from 表名[where 條件]; 等價於select sum(字段名)/count(*) from 表名[where 條件]; 取保留幾位小數之後的值round(,位數): select round(avg(字段名),2) from 表名[where 條件];12.分組:必須和聚合配合使用,不然沒有意義。 group by 字段名: select 字段名[,聚合函數()] from 表名 where 條件 group by 字段名 先將查詢結構排序,再對每組分別執行select 語句 group_concat(字段名,[其餘字符,字段名]) 配合group by 使用,將查詢結果中的若干字段構形成group_cat()括號中的樣子,再將同組的放在一行顯示。默認用逗號隔開 having 條件: 過濾掉不知足條件的分組與group by配合使用13.結果數量限制: limit: 通常放最後 limit 數量 limit 起始位置(0開始),數量14.鏈接查詢: 內鏈接(取交集) inner join: select * from 表1 inner join 表2 on 表1.字段=表2.字段 外鏈接: 左鏈接 left join:以左邊的表爲基準進行鏈接查詢 右鏈接 right join15.having和where 的區別:前者在以前語句的查詢結果中判斷條件是否知足,後者在原表中判斷。16.自關聯:一個表的某個字段值用到了同表另外一個字段值17.子查詢:建議少用 查詢條件中嵌套其餘查詢18.表設計規範: 範式: 第一範式1NF 每一個字段不可再拆分 第二範式2NF 必須有主鍵,主鍵能夠有多個字段,主鍵之外的字段必須依賴於所有的主鍵而不是部分主鍵 第三範式3NF19.python 連接數據庫: 整體步驟: 鏈接數據庫 獲取遊標對象 execute執行語句 關閉遊標對象 關閉數據庫鏈接 from pymsql impirt * #導入相關模塊 connection實例名 = connect(參數列表) 實例化Connection對象 參數: host:要鏈接的目標mysql主機ip,本機是"localhost" port:要鏈接的目標mysql主機端口,默認3306 database:數據庫的名稱 user:鏈接的用戶名 password:鏈接的密碼 charset:通訊採用的編碼方式,推薦utf8 遊標名 = connection實例名.cursor() #實例化一個cursor遊標對象 結果數 = 遊標名.execute(sql語句) #執行一條sql語句,返回查詢結果數量 遊標名.fetchone() #獲得上條執行語句的一個執行結果 遊標名.fetchmany(個數) #獲得執行語句後的多條結果 遊標名.fetchall20.增刪改時要使用connection實例.commit(),撤銷上次的執行使用connection實例.rollback()21.mysql高級: 視圖:從若干表中直接或1查詢出的結果組成的表。簡單理解:一張虛擬的表,隔離了數據庫和程序中的sql語句。視圖不能夠更新,是虛擬的不會當即建立執行,在視圖被使用時纔會臨時建立,所以能夠視圖中的數據隨着其相關表的數據的更新而更新 語句:create view 視圖名 as 查詢語句 事務:一個操做序列,這些操做要麼都執行,要麼都不執行,是一個不可分割的工做單位。 mysql命令行默認每一條語句分別開啓了事務,pymsql中默認不開啓事務,須要手動提交和回滾。 四大特性:ACID 原子性(Atomicity)事務被視爲不可再分割的基本單位,事務的全部的操做序列要麼都執行成功並提交,要麼所有失敗回滾 一致性(Consistency)從一個一致性狀態轉移到另外一個一致性狀態,事務執行成功,數據庫轉移成一個狀態,不成功則保持原狀態。 隔離性(isolation)事務所作的修改在最終提交之前,對其餘事務是不可見。 持久性(Durablity)事務一旦成功提交,其所作的修改會永久保存到數據庫。 使用框架: 方式一: start transaction; 執行操做序列; commit; 方式二: begin: 操做序列 commit; 索引:一種特殊的文件,包含這對數據表裏全部記錄的引用指針。通俗理解爲目錄,提升數據庫的查詢速度 create index 索引名 on 表名(字段(長度)) 非字符串不用指定長度 加入索引後,查詢將會藉助索引,明顯提升查詢速度 目的:提升查詢效率,類比字典 原理:經過創建B-tree對記錄的地址組織和排序,在查詢時經過某些遍歷算法能夠快速定位記錄的位置 主鍵和外鍵會自動建立索引 查看索引:show index from 表名; 刪除索引:drop index 索引名 on 表名; 缺點:會增長表更新和插入的負擔 主從: