创建一个名为 old_table
的表,并复制其结构到一个名为 new_table
的新表中。
-- 创建旧表并插入模拟数据
CREATE TABLE old_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT,
salary DECIMAL(10, 2)
);
INSERT INTO old_table (name, age, salary) VALUES
('Alice', 30, 75000.00),
('Bob', 25, 60000.00),
('Charlie', 35, 85000.00);
CREATE TABLE new_table LIKE old_table;
新表中只有相同的表结构但是没有旧表的数据
CREATE TABLE ... LIKE ...
语句会复制旧表的结构(包括列定义、索引、默认值等),但不会复制数据。
在已经复制了旧表结构的新表中插入旧表的数据。
-- 创建旧表并插入模拟数据
CREATE TABLE old_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT,
salary DECIMAL(10, 2)
);
INSERT INTO old_table (name, age, salary) VALUES
('Alice', 30, 75000.00),
('Bob', 25, 60000.00),
('Charlie', 35, 85000.00);
INSERT INTO new_table SELECT * FROM old_table;
把old_table表中的数据复制到new_table表中,new_table以第一个复制旧表的结构到新表为例,要求先创建好
已经成功把old_table表中的数据复制到new_table中了
INSERT INTO ... SELECT ...
语句会复制旧表中的所有数据到新表中。创建一个新表,并同时复制旧表的结构和数据到新表中。
-- 创建旧表并插入模拟数据
CREATE TABLE old_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT,
salary DECIMAL(10, 2)
);
INSERT INTO old_table (name, age, salary) VALUES
('Alice', 30, 75000.00),
('Bob', 25, 60000.00),
('Charlie', 35, 85000.00);
其实就是合并了前两个步骤的SQL语句
CREATE TABLE new_table_full AS SELECT * FROM old_table;
可以看到结果中新表跟旧表一样的结构和数据
CREATE TABLE ... AS SELECT ...
语句虽然可以同时复制结构和数据,但不会自动复制索引、主键、外键等约束。CREATE TABLE ... LIKE ...
和 INSERT INTO ... SELECT ...
。创建一个新表,其结构与旧表不同,然后将旧表的数据插入到新表中。
-- 创建旧表并插入模拟数据
CREATE TABLE old_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT,
salary DECIMAL(10, 2)
);
INSERT INTO old_table (name, age, salary) VALUES
('Alice', 30, 75000.00),
('Bob', 25, 60000.00),
('Charlie', 35, 85000.00);
-- 创建新表,结构跟旧表不同
CREATE TABLE new_table_diff (
user_id INT PRIMARY KEY,
fullname VARCHAR(100),
years_old INT,
monthly_salary DECIMAL(10, 2)
);
INSERT INTO new_table_diff (user_id, fullname, years_old, monthly_salary)
SELECT id, name, age, salary / 12 FROM old_table;