Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Tworzenie typu zmiennej ENUM w MySQL

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
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połącz się z MySQL za pomocą tunelowania SSH w node-mysql

  2. Odczytywanie znaków takich jak č ć đ š ž z bazy danych MySql

  3. Współbieżność MySQL, jak to działa i czy muszę to obsługiwać w mojej aplikacji?

  4. Uzyskaj identyfikator wiersza, gdy naruszony jest UNIQUE KEY

  5. Czy MySQL powinien mieć swoją strefę czasową ustawioną na UTC?