MySQL中create table as 與like的區(qū)別分析
本文分析了MySQL中create table as 與like的區(qū)別。分享給大家供大家參考,具體如下:
大家可能使用Navicat Premium時(shí)發(fā)現(xiàn)很方便,比如復(fù)制表或數(shù)據(jù)結(jié)構(gòu)等,其實(shí)這種復(fù)制表數(shù)據(jù)或結(jié)構(gòu)方法就是
create table as 和create table like 這種方式實(shí)現(xiàn)
細(xì)心的朋友會(huì)問,他們有啥區(qū)別呢?。。。廢話不多說,直入正題:
比如這里有張表數(shù)據(jù)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 復(fù)制表
create table t1_copy as select * from t1 where 1=2
# 或者 create table t1_copy as select * from t1 limit 0
這里我們只需要表結(jié)構(gòu),所以上面的 where 1=2 或lmit 0 查詢的是空數(shù)據(jù)。我們會(huì)發(fā)現(xiàn)新表t1_copy沒有索引:
缺少t1表(源表)的索引信息而只有表結(jié)構(gòu)相同。(如果要復(fù)制數(shù)據(jù),去掉limit 0即可,也就是查詢到的所有數(shù)據(jù)復(fù)制)
Create like 復(fù)制表
create table t1_copy2 like t1
我們發(fā)現(xiàn)like 創(chuàng)建出來的新表包含源表的完整表結(jié)構(gòu)和索引信息。
總結(jié):
as 用來創(chuàng)建相同表結(jié)構(gòu)并復(fù)制源表數(shù)據(jù)。
like 用來創(chuàng)建完整表結(jié)構(gòu)和全部索引。
注意:兩種方式在復(fù)制表的時(shí)候是不會(huì)復(fù)制權(quán)限對(duì)表的設(shè)置。比如說原本對(duì)表A做了權(quán)限設(shè)置,復(fù)制表AA后,表AA并不具備類似于表A的權(quán)限。有興趣的朋友可以試下
下面是其他網(wǎng)友的補(bǔ)充
對(duì)于mysql的復(fù)制相同表結(jié)構(gòu)方法,有create table as 和create table like 兩種,區(qū)別是什么呢?
create table t2 as select * from t1 where 1=2;[/code]或者[code]limit 0;
as創(chuàng)建出來的t2表(新表)缺少t1表(源表)的索引信息,只有表結(jié)構(gòu)相同,沒有索引。
create table t2 like t1 ;
like 創(chuàng)建出來的新表包含源表的完整表結(jié)構(gòu)和索引信息
二者的用途:
as用來創(chuàng)建相同表結(jié)構(gòu)并復(fù)制源表數(shù)據(jù)
like用來創(chuàng)建完整表結(jié)構(gòu)和全部索引
oracle支持as,也是只有表結(jié)構(gòu)沒有索引
oracle不支持like。
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫設(shè)計(jì)有所幫助。
相關(guān)文章
mysql server is running with the --skip-grant-tables option
今天在mysql中新建數(shù)據(jù)庫提示The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,原來是數(shù)據(jù)中配置的--skip-grant-tables,這樣安全就降低了,這個(gè)一般當(dāng)忘記root密碼的時(shí)候需要這樣操作2017-07-07MySQL數(shù)據(jù)庫表的合并與分區(qū)實(shí)現(xiàn)介紹
今天我們來聊聊處理大數(shù)據(jù)時(shí)Mysql的存儲(chǔ)優(yōu)化。當(dāng)數(shù)據(jù)達(dá)到一定量時(shí),一般的存儲(chǔ)方式就無法解決高并發(fā)問題了。最直接的MySQL優(yōu)化就是分區(qū)分表,以下是我個(gè)人對(duì)分區(qū)分表的筆記2022-09-09MySQL內(nèi)連接和外連接及七種SQL?JOINS的實(shí)現(xiàn)
這篇文章主要介紹了Mysql內(nèi)連接和外連接的區(qū)別以及七種SQL?Joins的實(shí)現(xiàn),相信看完這篇文章你對(duì)SQL內(nèi)外連接的多表查詢就足夠理解了,需要的朋友可以參考下2023-03-03SQL如何獲取目標(biāo)時(shí)間點(diǎn)或日期的方法實(shí)例
日期獲取在我們?nèi)粘i_發(fā)中經(jīng)常會(huì)遇到,這篇文章主要給大家介紹了關(guān)于SQL如何獲取目標(biāo)時(shí)間點(diǎn)或日期的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10MySQL 參數(shù)相關(guān)概念及查詢更改方法
這篇文章主要介紹了MySQL 參數(shù)相關(guān)概念及查詢更改方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2020-09-09遠(yuǎn)程連接mysql數(shù)據(jù)庫注意事項(xiàng)記錄(遠(yuǎn)程連接慢skip-name-resolve)
有時(shí)候我們需要遠(yuǎn)程連接mysql數(shù)據(jù)庫,就需要注意下面的問題,方便大家解決,腳本之家小編特為大家準(zhǔn)備了一些資料2012-07-07