2

我必须创建 8 个具有完全相同结构的表。最简单的方法是复制粘贴代码并为表应用不同的名称。我想变得很酷,用一个周期创造它们。我怎样才能使那个循环以及应用不同名称的最佳方法是什么?谢谢

4

3 回答 3

8

创建具有重复结构的表的最快方法如下:

CREATE TABLE tb1
(
    id int not null auto_increment,
    ...,
    primary key (id)
);
create table tb2 like tb1;
create table tb3 like tb1;
create table tb4 like tb1;
...
create table tb8 like tb1;

这会复制表结构和相应的索引。

如果您需要制作没有索引的表,这对您来说可能没问题

CREATE TABLE tb1
(
    id int not null auto_increment,
    ...,
    primary key (id)
);
CREATE TABLE tb2 AS SELECT * FROM tb1 WHERE 1=2;

根据列定义,这可能有效,也可能无效。

警告

这不能用于具有外键约束的表。这将分阶段进行。

于 2012-12-06T15:53:26.910 回答
1

我相信 MySQL 的语法是

CREATE TABLE <tablename> LIKE <extant table name>;
于 2012-12-06T15:53:45.677 回答
0
CREATE TABLE A (
  a INTEGER;
  b INTEGER;
);

CREATE TABLE B AS A; --WITH DATA added to end will copy both ddl and data. 
CREATE TABLE C AS A;
CREATE TABLE D AS A;
CREATE TABLE E AS A;
CREATE TABLE F AS A;
CREATE TABLE G AS A;
CREATE TABLE H AS A;

尽管我怀疑您是否在这里遇到 XY 问题。可以更紧凑地实现具有相同结构的 8 个表,并且在一个结构中,DBMS 将能够更好地管理 1 个表和一个额外的指标 attr 以确定当前行属于 8 个中的哪一个。

CREATE TABLE A (
  a INTEGER;
  b INTEGER;
  table_num INTEGER CHECK ( table_num >= 0 && table_num <= 7 ); 
)Primary Index(a,b,table_num)
Index(table_num);

另外我不太了解sql-server,所以所有这些语句可能需要针对方言进行调整,我不确定......但总体思路应该是一样的。

于 2012-12-06T15:51:43.640 回答