表結構與資料複製
阿新 • • 發佈:2019-02-18
【1】表結構複製
首先是表結構的複製:
第一種方式:
create table 表名 like [資料庫.]表名;
-- 如果是同一個資料庫下的表的複製,不需要新增[資料庫.];
-- 不會複製資料;
示例如下:
-- 原表建立語句:
CREATE TABLE `tb_lesson` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(60) DEFAULT NULL,
`joinTime` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;
-- 刪除原表並從備份資料庫複製:
drop table tb_lesson;
create table tb_lesson like db_exam2.tb_lesson;
-- 檢視複製的新表語句;
CREATE TABLE `tb_lesson` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(60) DEFAULT NULL,
`JoinTime` datetime DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 欄位屬性未變
第二種方式:
create table new_table
as
select * from [資料庫名.]old_table;
-- 第二種方式在mysql下可能會丟失列屬性,如主鍵,自增等。
示例如下:
-- 第二種方式複製的新表如下:
CREATE TABLE `tb_lesson` (
`ID` int(11) NOT NULL DEFAULT '0',
`Name` varchar(60) DEFAULT NULL,
`JoinTime` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 改變了欄位屬性等。
-- 同時複製了資料;
-- 如果側重表結構不建議使用這種方式。
【2】表資料複製
語法格式如下:
- 又被稱為蠕蟲複製
insert into Table2(field1,field2,...) select value1,value2,... from Table1;
// 如果不指定列,則如下(一定保證兩個表列一致):
insert into new_table select * from [資料庫.]old_table
需要注意的是,下面方式不適用於MySQL:
SELECT vale1, value2 into Table2 from Table1
該方式常常用於MySQL觸發器、儲存過程或函式中為變數賦值。
綜上,(兩個資料庫之間)表複製過程如下:
複製db_exam2資料庫的表tb_lesson到當前資料庫的表tb_lesson(表不出存在時需要建立);
-- 刪除已經存在的表;
drop table if EXISTS tb_lesson;
--複製並建立新表
create table tb_lesson like db_exam2.tb_lesson;
-- 複製資料
insert into tb_lesson select * from db_exam2.tb_lesson;
這裡是從另外一個數據庫(兩個資料庫在同一個主機)複製表和資料到當前資料庫,省略了當前資料庫名字。
也可以不省略資料庫名字如下:
從data_analysis複製表和資料到data_analysis_zh;
此處不管當前連線物件是哪個資料庫,都可以正確執行。
drop table if EXISTS data_analysis_zh.store_card_2;
create table data_analysis_zh.store_card_2 like data_analysis.pos_sale;
INSERT into data_analysis_zh.store_card_2
select * from data_analysis.pos_sale where data_analysis.pos_sale.number_store_card >0;
select * from data_analysis_zh.store_card_2 ;
效果等同如下(開啟data_analysis連線):
drop table if EXISTS data_analysis_zh.store_card_2;
create table data_analysis_zh.store_card_2 like pos_sale;
INSERT into data_analysis_zh.store_card_2
select * from pos_sale where number_store_card >0;
select * from data_analysis_zh.store_card_2 ;
效果等同如下(開啟data_analysis_zh連線):
drop table if EXISTS store_card_2;
create table store_card_2 like data_analysis.pos_sale;
INSERT into store_card_2
select * from data_analysis.pos_sale where [data_analysis.pos_sale.]number_store_card >0;
select * from store_card_2 ;
【3】限制更新記錄總數
語法格式如下:
update table_name set [field] = [value] [where 條件] [limit Num];
e.g:
update p_user_2 set age = 19 LIMIT 6;
-- 將前六名同學age統一改為19
【4】限制刪除記錄總數
語法格式如下:
delete from table_name [where 條件] [limit Num];
e.g:
delete from p_user_2 LIMIT 6;
-- 將前六名同學刪除