本篇文章給大家帶來的內容是關于mysql中create as 和create like有什么區別?(對比介紹),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
大家可能使用navicat Premium時發現很方便,比如復制表或數據結構等,其實這種復制表數據或結構方法就是create table as 和create table like 這種方式實現
細心的朋友會問,他們有啥區別呢?。。。廢話不多說,直入正題:、
(推薦課程:MySQL教程)
比如這里有張表數據t1:
DROP?TABLE?IF?EXISTS?`t1`; CREATE?TABLE?`t1`??( ??`id`?int(10)?UNSIGNED?NOT?NULL?AUTO_INCREMENT?COMMENT?'ID,自增', ??`uid`?bigint(11)?UNSIGNED?NOT?NULL?DEFAULT?0?COMMENT?'用戶uid', ??`nickname`?varchar(25)?CHARACTER?SET?utf8?COLLATE?utf8_general_ci?DEFAULT?NULL?COMMENT?'昵稱', ??`name`?varchar(20)?CHARACTER?SET?utf8?COLLATE?utf8_general_ci?NOT?NULL?DEFAULT?''?COMMENT?'用戶名', ??PRIMARY?KEY?(`id`)?USING?BTREE, ??INDEX?`unn`(`uid`,?`name`,?`nickname`)?USING?BTREE )?ENGINE?=?InnoDB?AUTO_INCREMENT?=?5?CHARACTER?SET?=?utf8?COLLATE?=?utf8_general_ci??ROW_FORMAT?=?Compact; --?---------------------------- --?Records?of?t1 --?---------------------------- INSERT?INTO?`t1`?VALUES?(3,?100,?'kaven',?'test3'); INSERT?INTO?`t1`?VALUES?(2,?101,?'maha',?'test2'); INSERT?INTO?`t1`?VALUES?(4,?102,?'loose',?'test4'); INSERT?INTO?`t1`?VALUES?(5,?105,?'balala',?'test5');
注意上面有索引:
Create As 復制表
create?table?t1_copy?as?select?*?from?t1?where?1=2#?或者?create?table?t1_copy?as?select?*?from?t1?limit?0
這里我們只需要表結構,所以上面的?where 1=2 或lmit 0 查詢的是空數據。我們會發現新表t1_copy沒有索引:
缺少t1表(源表)的索引信息而只有表結構相同。(如果要復制數據,去掉limit 0即可,也就是查詢到的所有數據復制)
?Create like 復制表
create?table?t1_copy2?like?t1
我們發現like 創建出來的新表包含源表的完整表結構和索引信息。
總結:
as用來創建相同表結構并復制源表數據。
like用來創建完整表結構和全部索引。
注意:兩種方式在復制表的時候是不會復制權限對表的設置。比如說原本對表A做了權限設置,復制表AA后,表AA并不具備類似于表A的權限。有興趣的朋友可以試下
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END