Mysql中create as 和create like有什么區別?(對比介紹)

本篇文章給大家帶來的內容是關于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');

注意上面有索引:

Mysql中create as 和create like有什么區別?(對比介紹)

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沒有索引:
Mysql中create as 和create like有什么區別?(對比介紹)

缺少t1表(源表)的索引信息而只有表結構相同。(如果要復制數據,去掉limit 0即可,也就是查詢到的所有數據復制)

?Create like 復制表

create?table?t1_copy2?like?t1

Mysql中create as 和create like有什么區別?(對比介紹)

我們發現like 創建出來的新表包含源表的完整表結構和索引信息。

總結

as用來創建相同表結構并復制源表數據。

like用來創建完整表結構和全部索引。

注意:兩種方式在復制表的時候是不會復制權限對表的設置。比如說原本對表A做了權限設置,復制表AA后,表AA并不具備類似于表A的權限。有興趣的朋友可以試下

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享