Nie. MySQL nie obsługuje CREATE DOMAIN
lub CREATE TYPE
jak na przykład PostgreSQL robi
.
Prawdopodobnie będziesz musiał ponownie wpisać wszystkie nazwiska. Możesz ograniczyć ilość pracy potrzebnej do tego, używając funkcji kopiowania i wklejania lub skryptów SQL.
Możesz również użyć INFORMATION_SCHEMA
tabele, aby uzyskać tekst definicji ENUM, a następnie interpolować go do nowego CREATE TABLE
oświadczenie.
Możesz także użyć CREATE TABLE AS
w kreatywny sposób, aby skopiować definicję typu. Oto demonstracja:
CREATE TABLE foo ( f ENUM('abc', 'xyz') );
CREATE TABLE bar AS SELECT f AS b FROM foo;
SHOW CREATE TABLE bar;
Wyjścia:
CREATE TABLE `bar` (
`b` enum('abc','xyz') default NULL
)
Na koniec sugeruję, że jeśli twój ENUM zawiera wiele wartości (co, jak sądzę, jest prawdą, ponieważ szukasz rozwiązania, aby uniknąć ich wpisywania), prawdopodobnie powinieneś używać tabeli wyszukiwania zamiast typu danych ENUM.
Ponownie komentarz od @bliako:
Możesz zrobić to, co opisujesz w ten sposób:
CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;
Próbowałem tego na MySQL 5.7.27 i zadziałało.
Warto zauważyć, że nie musisz deklarować wszystkich trzech kolumn w wierszu CREATE TABLE. Trzecia kolumna f
zostanie dodany automatycznie.
Interesujące jest również to, że musiałem podać aliasy kolumn w SELECT
oświadczenie, aby upewnić się, że nazwy kolumn są zgodne z zadeklarowanymi w CREATE TABLE
. W przeciwnym razie, jeśli nazwy kolumn nie będą się zgadzać, otrzymasz dodatkowe kolumny, a ich typy danych nie będą zgodne z oczekiwaniami:
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
)