1.sql語(yǔ)句卡死
show processlist;
找出你要停止的語(yǔ)句
然后找出你要終止的語(yǔ)句的id
kill 248;
建表時(shí)把一切都考慮好宴咧,表被連接的時(shí)候更改表的結(jié)構(gòu)導(dǎo)致數(shù)據(jù)庫(kù)卡死。
2.優(yōu)化查詢速度
- 建立唯一索引 btree/hash 哭当,索引字段不區(qū)分大小寫。
- 分庫(kù)分表,缺點(diǎn)是關(guān)聯(lián)查詢會(huì)非常麻煩
- 使用連接池鏈接數(shù)據(jù)庫(kù)冗澈,節(jié)省連接數(shù)钦勘,避免頻繁鏈接斷開(kāi)
- 若一張表里面存在varchar、text以及其變形亚亲、blob以及其變形字段彻采,那么這個(gè)表叫動(dòng)態(tài)表,該表 row_format是dynamic捌归,每條記錄所占用字節(jié)是動(dòng)態(tài)的肛响。優(yōu)點(diǎn)節(jié)省空間,缺點(diǎn)增加讀取時(shí)間開(kāi)銷惜索。反之特笋,這張表叫靜態(tài)表,該表 row_format為fixed,即每條記錄占用字節(jié)一樣巾兆。優(yōu)點(diǎn)讀取快猎物,缺點(diǎn)浪費(fèi)部分空間,做搜索查詢量大的表一般都以空間來(lái)?yè)Q取時(shí)間角塑,設(shè)計(jì)成靜態(tài)表蔫磨。
3.常用語(yǔ)句
select * from table_name order by complain_pubtime DESC limit start,size
- 查詢按時(shí)間倒序翻頁(yè)結(jié)果
insert ignore into table_ name () values ()
- 多條插入時(shí)報(bào)錯(cuò)不退出
replace into table_ name () values ()
- 插入該條記錄存在時(shí)執(zhí)行替換操作
update table_name set col=%s where ...
- 更新行數(shù)據(jù)
CREATE TABLE IF NOT EXISTS `student`
`s_id` varchar(40) NOT NULL,
`s_name` varchar(255) default NULL,
`s_age` varchar(255) default NULL,
`s_msg` varchar(255) default NULL,
PRIMARY KEY (`s_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES ('7', '重陽(yáng)節(jié)', '33', '登高賞菊');
- 判斷這張表是否存在,若存在圃伶,則跳過(guò)創(chuàng)建表操作
ALTER TABLE堤如,DROP TABLE
更新表刪除表
4.外鍵約束
MySQL支持外鍵的存儲(chǔ)引擎只有InnoDB蒲列,在創(chuàng)建外鍵的時(shí)候,要求父表必須有對(duì)應(yīng)的索引煤惩,子表在創(chuàng)建外鍵的時(shí)候也會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的索引嫉嘀。在創(chuàng)建索引的時(shí)候,可以指定在刪除魄揉、更新父表時(shí)剪侮,對(duì)子表進(jìn)行的相應(yīng)操作,包括RESTRICT洛退、NO ACTION瓣俯、SET NULL和CASCADE。
RESTRICT和NO ACTION相同兵怯,是指在子表有關(guān)聯(lián)記錄的情況下父表不能更新彩匕;
CASCADE表示父表在更新或者刪除時(shí),更新或者
刪除子表對(duì)應(yīng)記錄媒区;
SET NULL則是表示父表在更新或者刪除的時(shí)候驼仪,子表的對(duì)應(yīng)字段被SET NULL。
本表自關(guān)聯(lián)的時(shí)候不應(yīng)設(shè)置級(jí)聯(lián)袜漩。
5.四種引擎
- MyISAM
不支持事務(wù)绪爸、外鍵,訪問(wèn)速度快宙攻,
支持:靜態(tài)表奠货;動(dòng)態(tài)表;壓縮表
靜態(tài)表:表中的字段都是非變長(zhǎng)字段座掘,
動(dòng)態(tài)表:記錄不是固定長(zhǎng)度的递惋,占用的空間相對(duì)較少;頻繁的更新溢陪、刪除數(shù)據(jù)容易產(chǎn)生碎片萍虽,需要定期執(zhí)行OPTIMIZE TABLE或者myisamchk-r命令來(lái)改善性能
壓縮表:因?yàn)槊總€(gè)記錄是被單獨(dú)壓縮的,非常小的訪問(wèn)開(kāi)支 - InnoDB
該存儲(chǔ)引擎提供了具有提交形真、回滾和崩潰恢復(fù)能力的事務(wù)安全贩挣。但是對(duì)比MyISAM引擎,寫的處理效率會(huì)差一些没酣,并且會(huì)占用更多的磁盤空間以保留數(shù)據(jù)和索引。支持自動(dòng)增長(zhǎng)列卵迂,支持外鍵約束 - MEMORY
內(nèi)存中建表裕便。每個(gè)表對(duì)應(yīng)一個(gè)磁盤文件,格式是.frm见咒。訪問(wèn)非常的快偿衰,默認(rèn)HASH索引,服務(wù)關(guān)閉,數(shù)據(jù)清空下翎。索引支持BTREE/HASH缤言。Memory類型的存儲(chǔ)引擎主要用于做緩存,不會(huì)持久化视事,類似redis - MERGE
Merge是一組MyISAM組合胆萧,MyISAM表必須結(jié)構(gòu)完全相同,對(duì)merge類型進(jìn)行查詢俐东,更新跌穗,刪除操作對(duì)內(nèi)部的MyISAM表進(jìn)行的。
6.關(guān)聯(lián)查詢
內(nèi)關(guān)聯(lián)左右外關(guān)聯(lián)
7.docker 安裝mysql
8.x版本鏈接可能與navicat不兼容
docker pull mysql:5.7.23
docker run --name docker_mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
8.注意
- 字符編碼用utf8mb4(utf8可能某些字符)
- Hash索引優(yōu)點(diǎn):
Hash 索引結(jié)構(gòu)的特殊性虏辫,其檢索效率非常高蚌吸,索引的檢索可以一次定位,不像B-Tree 索引需要從根節(jié)點(diǎn)到枝節(jié)點(diǎn)砌庄,最后才能訪問(wèn)到頁(yè)節(jié)點(diǎn)這樣多次的IO訪問(wèn)羹唠,所以 Hash 索引的查詢效率要遠(yuǎn)高于 B-Tree 索引。
Hash索引缺點(diǎn): 那么不精確查找呢娄昆,也很明顯佩微,因?yàn)閔ash算法是基于等值計(jì)算的,所以對(duì)于“l(fā)ike”等范圍查找hash索引無(wú)效稿黄,不支持喊衫;