python數據庫基礎

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 表名;        缺點:會增長表更新和插入的負擔    主從:
相關文章
相關標籤/搜索