Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo kiểu biến ENUM trong MySQL

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
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kết nối với MySQL từ dòng lệnh

  2. Đặt cơ sở dữ liệu MySQL dưới quyền kiểm soát phiên bản?

  3. Không thể kết nối với MySQL 4.1+ bằng xác thực cũ

  4. Sự cố hiển thị các ký tự tiếng Nhật khi sử dụng PHP và MySQL

  5. Tải dữ liệu CSV vào MySQL bằng Python