いいえ。MySQLはCREATE DOMAIN
をサポートしていません またはCREATE TYPE
たとえば、PostgreSQL します
。
おそらく、すべての名前をもう一度入力する必要があります。コピーアンドペーストまたはSQLスクリプトを使用することで、これを行うために必要な作業を軽減できます。
INFORMATION_SCHEMA
を使用することもできます テーブルを使用してENUM定義のテキストを取得し、それを新しいCREATE TABLE
に補間します。 ステートメント。
CREATE TABLE AS
を使用することもできます タイプ定義をコピーするための創造的な方法で。これがデモンストレーションです:
CREATE TABLE foo ( f ENUM('abc', 'xyz') );
CREATE TABLE bar AS SELECT f AS b FROM foo;
SHOW CREATE TABLE bar;
出力:
CREATE TABLE `bar` (
`b` enum('abc','xyz') default NULL
)
最後に、ENUMに多くの値が含まれている場合(入力を避けるための解決策を探しているので、これは正しいと思います)、おそらくENUMデータ型の代わりにルックアップテーブルを使用する必要があります。
@bliakoからのコメントを再確認してください:
あなたはこのようにあなたが説明することをすることができます:
CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;
MySQL 5.7.27でこれを試しましたが、機能しました。
CREATETABLE行で3つの列すべてを宣言する必要がないことに注意してください。 3番目の列f
自動的に追加されます。
SELECT
で列エイリアスを指定しなければならなかったことも興味深いです 列名がCREATE TABLE
で宣言されたものと一致することを確認するステートメント 。そうしないと、列名が一致しない場合、余分な列ができてしまい、それらのデータ型は期待したものとは異なります。
create table bar (pop int not null, name varchar(100))
as select 0 as c1, null as c2, f from foo;
show create table bar\G
CREATE TABLE `bar` (
`pop` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`c1` binary(0) DEFAULT NULL,
`c2` binary(0) DEFAULT NULL,
`f` enum('abc','xyz') DEFAULT NULL
)