pysql:
sql注入:太相信使用者輸入的所有的資料。
解決方法:1.自己手動去判斷轉義使用者輸入的資料2.不要拼接sql語句,使用pymysql 的execute方法,防止sql的注入。
事務:一組操作,要麼都成功要麼都失敗
四大特性:
1.原子性:原子是最小的粒度,所以說一組操作要麼都 成功要麼都失敗
2.一致性:無論事務前還是事務後,資料的總額不變。
3.隔離型:事務與事務之間是隔離的,乙個事務內的操作,另乙個事務是不可見的
4.永續性:乙個事務結束後,其影響應該保留下來,不可修改,只能通過補償事務來彌補之前的錯誤
開啟:start transaction
結束: commit
回滾:rollback
但如果在事務內刪除了乙個表(drop table 表名)那麼回滾就不能返回這個表了,其他資料庫都一樣,但除了oracle(flashback)
儲存引擎:
create table t1(id int auto_increment primary key, name varchar(16) not null default '')engine=innodb charset=utf8;
上面建立表的engine=innodb 就是引擎
引擎的分類:
inodb:
1.5.5(含5.5)版本預設就是innodb
2.支援事務
3.支援全文索引
4.索引和資料都是在同乙個檔案中,叫.ibd,表的結構在.frm檔案中
myisam:
1.5.5(不含5.5)以下版本預設myisam
2.不支援事務
3.支援全文索引
4.表結構:.frm 表資料:.myd 表索引: .myi
全文索引:sphinx
索引:作用:加快查詢的速度
模擬:新華字典的目錄,可以將索引理解成乙個特殊的檔案,然後如果沒有這個檔案的話,查詢是從前到後查詢資料的,如果有這個檔案的話,會按照一種特殊的資料結構(二叉樹)查詢資料。
分類:主鍵索引:加快查詢速度,不能重複,不能為空。primary key
唯一索引:加快查詢速度,不能重複,可以為空。unique(列名)
聯合唯一索引:加快查詢速度 ,不能重複,可以為空 unique(列名1,列名2)
,普通索引:加快查詢 index(列名)
建立:主鍵索引:
第一種:
create table t1(id int auto_increment primary key, name varchar(16) not null default '')engine=innodb charset=utf8;
第二種:
alter table t1 change id id int auto_increment primary key;
唯一索引:
第一種:
create table t1(id int auto_increment primary key, name varchar(16) not null default '',unique 別名(列名))engine=innodb charset=utf8;
第二種:
create unique index 索引名稱(ix_name) on 表名(t1)(列名)
create unique index 索引名稱(ix_name_age) 表名(t1)(name,age)
普通索引:
第一種:
create table t1(id int auto_increment primary key, name varchar(16) not null default '',index ix_name(列名))engine=innodb charset=utf8;
第二種:
create index 索引名稱(ix_name) on 表名(t1)(列名)
刪除:drop 索引名稱(ix_name) on表名(t1);
場景:使用頻繁的列上加乙個索引
索引的缺點:版本5.3以下:刪除和修改的速度就變慢了。版本5.5以上:刪除和修改的速度不是特別的慢
索引的使用:
explain 工具
檢視sql語句是否用得上索引,或者檢視sql執行效率的工具
給執行的sql語句出報告,通過此報告來判斷sql語句的執行效率和效果
es(elasticsearch)
sql語句的規則:
不建議使用like進行搜尋
組合索引最左字首
如果組合索引為:(name,email)
where name and email -- 使用索引
where name -- 使用索引
where email -- 不使用索引
慢日誌(slow log):
日誌檔案: 記錄了執行速度特別慢的sql語句
開啟的步驟:
1. show variables like '%query%';
2. set global long_query_time = 1; 設定慢查詢的時間
3. slow_query_log = on
4. slow_query_log_file = e:\program\mysql-5.6.44-winx64\data\oldboy-slow.log
普通日誌記錄(general log):
sql審計 (記錄sql的操作語句)
show variables like '%general%';
| variable_name | value |
| general_log | on |
| general_log_file | e:\program\mysql-5.6.44-winx64\data\oldboy.log |
set global general_log = on;
許可權管理:
建立使用者:
create user '使用者名稱'@'ip位址' identified by '密碼';
creaee user 'zekai'@'192.168.1.123' identified by '123qwe';
creaee user 'zekai'@'192.168.1.%' identified by '123qwe';
create user 'zekai'@'%' identified by '123qwe';
刪除使用者
drop user '使用者名稱'@'ip位址';
修改使用者
rename user '使用者名稱'@'ip位址' to '新使用者名稱'@'ip位址';
修改密碼
set password for '使用者名稱'@'ip位址' = password('新密碼')
授權:grant 許可權 on 資料庫.表 to '使用者'@'ip位址' -- 授權
grant select on db1.* to 'zekai'@'%';
grant select on *.* to 'zekai'@'%';
grant select, insert, delete on db1.* to 'zekai'@'%';
記住:flush privileges;
mysql索引和事務 MySql索引和事務
mysqlde 索引 目的 是為了加快查詢的速度,避免順序查詢,但是拖慢了插入和刪除的速度.應用在在經常查詢,很少少出插入的場景中.結構 b 樹,n叉搜尋樹,使用鏈式的結構把每一層的節點連線在一起,葉子節點中儲存資料,非葉子節點輔助查詢.主鍵索引和其他索引的不一樣 主鍵索引葉子節點儲存一條一條的資料...
MySQL事務 索引
一 事務處理步驟 set autocommit 0 關閉mysql的自動提交 start transaction 開始乙個事務,標記事務的起點 commit 提交乙個事務給資料庫 rollback 將事務回滾,所有commit中的操作將取消 set autocommit 1 還原mysql資料庫自動...
MySQL事務 索引
1 事務 事務就是將一組sql語句放在同一批次內去執行 如果乙個sql語句出錯,則該批次內的所有sql都將被取消執行 持innodb和bdb資料表型別 2 acid 屬性 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 3 mys...