Không. MySQL không hỗ trợ CREATE DOMAIN
hoặc CREATE TYPE
chẳng hạn như PostgreSQL thì không
.
Có thể bạn sẽ phải nhập lại tất cả các tên. Bạn có thể giảm thiểu công việc cần thiết để thực hiện việc này bằng cách sử dụng sao chép và dán hoặc tập lệnh SQL.
Bạn cũng có thể sử dụng INFORMATION_SCHEMA
bảng để lấy văn bản của định nghĩa ENUM, rồi nội suy nó thành một CREATE TABLE
mới tuyên bố.
Bạn cũng có thể sử dụng CREATE TABLE AS
theo những cách sáng tạo để sao chép định nghĩa kiểu. Đây là một minh chứng:
CREATE TABLE foo ( f ENUM('abc', 'xyz') );
CREATE TABLE bar AS SELECT f AS b FROM foo;
SHOW CREATE TABLE bar;
Kết quả đầu ra:
CREATE TABLE `bar` (
`b` enum('abc','xyz') default NULL
)
Cuối cùng, tôi đề nghị rằng nếu ENUM của bạn có nhiều giá trị trong đó (mà tôi đoán là đúng vì bạn đang tìm giải pháp để tránh nhập chúng), có lẽ bạn nên sử dụng bảng tra cứu thay vì kiểu dữ liệu ENUM.
Nhận xét lại từ @bliako:
Bạn có thể làm những gì bạn mô tả theo cách này:
CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;
Tôi đã thử điều này trên MySQL 5.7.27 và nó đã hoạt động.
Điều thú vị là bạn không cần phải khai báo cả ba cột trong dòng TẠO BẢNG. Cột thứ ba f
sẽ được thêm tự động.
Thật thú vị khi tôi phải cung cấp bí danh cột trong SELECT
để đảm bảo tên cột khớp với tên được khai báo trong CREATE TABLE
. Ngược lại, nếu tên cột không khớp, bạn sẽ có thêm cột và kiểu dữ liệu của chúng không như bạn mong đợi:
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
)