复制表、重命名表
-- 复制方法一,只复制结构:(排序规则为utf8mb4_unicode_ci,即可能取的是my.ini的配置排序规则)CREATE TABLE xx_a.xx_log_request55 as SELECT * FROM xx_a.xx_log_request WHERE 1=2;-- 复制方法二,只复制结构:(排序规则为原表,即utf8_unicode_ci)create table xx_api_config55 like xx_api_config;-- 复制结构和数据(不存在表则创建):(排序规则为utf8mb4_unicode_ci,即可能取的是my.ini的配置排序规则)create table xx_api_config77 as select * from xx_api_config;-- 创建新表并复制数据(带条件):CREATE TABLE xx_a.xx_log_request55ASSELECT *FROM xx_a.xx_log_requestWHERE request_date >= '2025-01-02';替换表:ALTER TABLE xx_a.ab_log_request RENAME TO xx_a.ab_log_request20231111;ALTER TABLE xx_a.ab_log_request55 RENAME TO xx_a.ab_log_request;
CREATE TABLE xx_a.xx_log_request55
在模式(schema)xx_a 下创建一个新表,表名为 xx_log_request55。
AS SELECT * FROM xx_a.xx_log_request
通过查询原表 xx_a.xx_log_request 的数据生成新表的内容。
WHERE 1=2
这是一个永远为假的条件,导致 SELECT 语句不会返回任何数据。
替代方案
如果仅需表结构而不需要数据,不同数据库可能有更高效的方式:
MySQL:
CREATE TABLE xx_a.xx_log_request55 LIKE xx_a.xx_log_request;
PostgreSQL:
CREATE TABLE xx_a.xx_log_request55 (LIKE xx_a.xx_log_request INCLUDING ALL);
修改表名
alter table `旧表名` rename `新表名`;
