复制表、重命名表

  1. -- 复制方法一,只复制结构:(排序规则为utf8mb4_unicode_ci,即可能取的是my.ini的配置排序规则)
  2. CREATE TABLE xx_a.xx_log_request55 as SELECT * FROM xx_a.xx_log_request WHERE 1=2;
  3. -- 复制方法二,只复制结构:(排序规则为原表,即utf8_unicode_ci)
  4. create table xx_api_config55 like xx_api_config;
  5. -- 复制结构和数据(不存在表则创建):(排序规则为utf8mb4_unicode_ci,即可能取的是my.ini的配置排序规则)
  6. create table xx_api_config77 as select * from xx_api_config;
  7. -- 创建新表并复制数据(带条件):
  8. CREATE TABLE xx_a.xx_log_request55
  9. AS
  10. SELECT *
  11. FROM xx_a.xx_log_request
  12. WHERE request_date >= '2025-01-02';
  13. 替换表:
  14. ALTER TABLE xx_a.ab_log_request RENAME TO xx_a.ab_log_request20231111;
  15. 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:

  1. CREATE TABLE xx_a.xx_log_request55 LIKE xx_a.xx_log_request;

​PostgreSQL:

  1. CREATE TABLE xx_a.xx_log_request55 (LIKE xx_a.xx_log_request INCLUDING ALL);

修改表名

  1. alter table `旧表名` rename `新表名`;