CREATE TABLE cr_user_info
(
id
int(11) NOT NULL AUTO_INCREMENT,
user_id
int(11) NOT NULL DEFAULT '0' COMMENT '用戶id',
last_notice_list
int(11) NOT NULL DEFAULT '0' COMMENT '訪問系統(tǒng)公告列表時(shí)間',
created_time
int(11) NOT NULL DEFAULT '0' COMMENT '更新時(shí)間戳',
PRIMARY KEY (id
),
KEY index_user_id
(user_id
)
)ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;
ENGINE=InnoDB
建表語句用了哪個(gè)引擎。
AUTO_INCREMENT=22
從22開始自增。
CHARSET=utf8
mysql建立數(shù)據(jù)庫數(shù)據(jù)表時(shí)設(shè)定字符集為utf-8。
Innodb引擎
Innodb引擎提供了對(duì)數(shù)據(jù)庫ACID事務(wù)的支持,并且實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的四種隔離級(jí)別兑障。
該引擎還提供了行級(jí)鎖和外鍵約束,它的設(shè)計(jì)目標(biāo)是處理大容量數(shù)據(jù)庫系統(tǒng)伶棒,它本身其實(shí)就是基于MySQL后臺(tái)的完整數(shù)據(jù)庫系統(tǒng)旺垒,
MySQL運(yùn)行時(shí)Innodb會(huì)在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)和索引肤无。但是該引擎不支持FULLTEXT類型的索引先蒋,而且它沒有保存表的
行數(shù),當(dāng)SELECT COUNT() FROM TABLE時(shí)需要掃描全表宛渐。當(dāng)需要使用數(shù)據(jù)庫事務(wù)*時(shí)竞漾,該引擎當(dāng)然是首選。由于鎖的粒度更小窥翩,寫操
作不會(huì)鎖定全表业岁,所以在并發(fā)較高時(shí),使用Innodb引擎會(huì)提升效率寇蚊。但是使用行級(jí)鎖也不是絕對(duì)的笔时,如果在執(zhí)行一個(gè)SQL語句時(shí)MySQL
不能確定要掃描的范圍,InnoDB表同樣會(huì)鎖全表仗岸。
MyIASM引擎
MyIASM是MySQL默認(rèn)的引擎允耿,但是它沒有提供對(duì)數(shù)據(jù)庫事務(wù)的支持,也不支持行級(jí)鎖和外鍵扒怖,因此當(dāng)INSERT(插入)或UPDATE(更新)數(shù)據(jù)時(shí)
即寫操作需要鎖定整個(gè)表较锡,效率便會(huì)低一些。不過和Innodb不同盗痒,MyIASM中存儲(chǔ)了表的行數(shù)蚂蕴,于是SELECT COUNT(*) FROM TABLE時(shí)只需要直接讀取已經(jīng)保存好的值而不需要進(jìn)行全表掃描。如果表的讀操作遠(yuǎn)遠(yuǎn)多于寫操作且不需要數(shù)據(jù)庫事務(wù)的支持俯邓,那么MyIASM也是很好的選擇骡楼。
主要區(qū)別:
1、MyIASM是非事務(wù)安全的看成,而InnoDB是事務(wù)安全的
2君编、MyIASM鎖的粒度是表級(jí)的,而InnoDB支持行級(jí)鎖
3川慌、MyIASM支持全文類型索引吃嘿,而InnoDB不支持全文索引
4、MyIASM相對(duì)簡(jiǎn)單梦重,效率上要優(yōu)于InnoDB兑燥,小型應(yīng)用可以考慮使用MyIASM
5、MyIASM表保存成文件形式琴拧,跨平臺(tái)使用更加方便
應(yīng)用場(chǎng)景:
1降瞳、MyIASM管理非事務(wù)表,提供高速存儲(chǔ)和檢索以及全文搜索能力蚓胸,如果再應(yīng)用中執(zhí)行大量select操作挣饥,應(yīng)該選擇MyIASM
2、InnoDB用于事務(wù)處理沛膳,具有ACID事務(wù)支持等特性扔枫,如果在應(yīng)用中執(zhí)行大量insert和update操作,應(yīng)該選擇InnoDB
- 創(chuàng)建表時(shí)如果不指定type則默認(rèn)為myisam锹安,不支持事務(wù)短荐。
用 show create table tablename 命令看表的類型。
2.來切換非事務(wù)表到事務(wù)(數(shù)據(jù)不會(huì)丟失)叹哭,innodb表比myisam表更安全:
alter table tablename type=innodb;
3.臨時(shí)改變默認(rèn)表類型可以用:
set table_type=InnoDB;
show variables like 'table_type';
或:
c:/mysql/bin/mysqld-max-nt --standalone --default-table-type=InnoDB
參考鏈接
https://www.cnblogs.com/zyiii/p/8821788.html
https://www.cnblogs.com/chenpingzhao/p/4722561.html