Mysql 的 create as 和create like 區別


  大家可能使用Navicat Premium時發現很方便,比如復制表或數據結構等,其實這種復制表數據或結構方法就是
create table as 和create table like 這種方式實現
細心的朋友會問,他們有啥區別呢?。。。廢話不多說,直入正題:
比如這里有張表數據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的權限。
有興趣的朋友可以試下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM