day-44(2)mysql
ps :
針對mysql的:
start transaction
drop table t1;
rollback;
無法回滾刪除操作,
其他的數據庫中也是一樣的, 但是除了oracle(flashback)
現在阿里云上, 數據庫不建議使用外鍵,效率問題
存儲引擎:
create table t1(
id int auto_increment primary key,
name varchar(32) not null default ''
)engine=Innodb charset=utf8;
分類:?
Innodb
1.(默認版本包含5.5)
2.支持事務
3.不支持全文索引
4.索引和數據都是在同一個文件中, .ibd
表的結構實在.frm文件中
MyIsam
1.(默認版本5.5以下 5.3)
2.不支持事務
3.支持全文索引(類似百度搜索框在數據庫搜索)
4..frm: 表結構
.MYD: 表數據
.MYI: 表索引
memory
全文索引:
sphinx
1).文章,新聞等安全性要求不高的,選myisam
2). 訂單,資金,賬單,火車票等對安全性要求高的,選用innodb
3). 對于臨時中轉表,可以用memory型 ,速度最快
索引:
作用: 加快查詢的速度
類比: 新華字典的目錄, 可以將索引理解成一個特殊的文件, 然后如果沒有這個文件的話, 查詢是從前到后查找數據的,
如果有這個文件的話, 會按照一種特殊的數據結構(二叉樹)查找數據
分類:
主鍵索引: 加快查詢 + 不能重復 + 不能為空 primary key
唯一索引: 加快查詢 + 不能重復 unique(列名)
聯合唯一索引: 加快查詢 + 不能重復 unique(列名1,列名2)
普通索引: 加快查詢 index('列名')
創建:
主鍵索引:
第一種:
create table t1(
id int auto_increment primary key,
name varchar(32) 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(32) not null default '',
unique ix_name ('name')
)engine=Innodb charset=utf8;
第二種:
create unique index 索引名稱(ix_name) on 表名(t1)(name);
create unique index 索引名稱(ix_name_age) on 表名(t1)(name,age);
普通索引:
第一種:
create table t1(
id int auto_increment primary key,
name varchar(32) not null default '',
index ix_name ('name')
)engine=Innodb charset=utf8;
第二種:
create index 索引名稱(ix_name) on 表名(t1)(name);
刪除:
drop 索引名稱(ix_name) on 表名(t1);
查看索引:
show index from 表名;
場景:
使用頻繁的列上加一個索引
索引的缺點:
版本5.3以下:
刪除和修改的速度就變慢了
版本5.5以上:
刪除和修改的速度不是特別的慢
create table t12(
id int auto_increment primary key,
name varchar(32) not null default '',
email varchar(32) not null default ''
)engine=Innodb charset=utf8;
索引的使用:
explain 工具
查看sql語句是否用的上索引, 或者查看sql執行效率的工具
給執行的SQL語句出一個報告, 通過此報告來判斷sql語句的執行效率和效果
id
查詢順序標識
select_type
查詢類型
SIMPLE 簡單查詢
PRIMARY 最外層查詢
SUBQUERY 映射為子查詢
DERIVED 子查詢
UNION 聯合
UNION RESULT 使用聯合的結果
...
table
正在訪問的表名
type
查詢時的訪問方式,性能:all < index < range < index_merge < ref_or_null < ref < eq_ref < system/const
ALL 全表掃描,對于數據表從頭到尾找一遍
INDEX 全索引掃描,對索引從頭到尾找一遍
RANGE 對索引列進行范圍查找
REF 根據索引查找一個或多個值
CONST 常量
表最多有一個匹配行,因為僅有一行,在這行的列值可被優化器剩余部分認為是常數,
const表很快,因為它們只讀取一次。
select nid from tb1 where nid = 2 ;
SYSTEM 系統
表僅有一行(=系統表)。這是const聯接類型的一個特例。
possible_keys
可能使用的索引
key
真實使用的
key_len
MySQL中使用索引字節長度
rows
mysql估計為了找到所需的行而要讀取的行數 ------ 只是預估值
extra
該列包含MySQL解決查詢的詳細信息
“Using index”
比較好,使用了索引
“Using where”
比較好,使用了索引
“Using temporary”
沒用到索引,或sql語句有問題
“Using filesort”
沒用到索引,或sql語句有問題
ES (elasticsearch )
SQL語句的規則:
- 不建議使用 like 進行搜索
-不建議使用函數
-類型不一致(規定的和傳入的不一致)
-order by 排序的列沒有索引,不建議
- 組合索引最左前綴
如果組合索引為:(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. set global slow_query_log = ON 開啟慢日志
4. set global 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('新密碼')
查看權限
show grants for '用戶'@'IP地址'
授權:
grant 權限 on 數據庫.表 to '用戶'@'IP地址' -- 授權
grant select on db1.* to 'zekai'@'%';
grant select on *.* to 'zekai'@'%';
grant select, insert, delete on db1.* to 'zekai'@'%';
*.* 所有
select, insert, delete 權限
取消授權:
revoke 權限 on 數據庫.表 from '用戶'@'IP地址'
記住:
flush privileges;
轉載于:https://www.cnblogs.com/klw1/p/11042208.html
總結
以上是生活随笔為你收集整理的day-44(2)mysql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌三篇重要论文读后感
- 下一篇: TensorBoard一幅图中显示多条曲