programing

MySQL에서 ENUM 변수 유형 생성

stoneblock 2023. 10. 31. 20:26

MySQL에서 ENUM 변수 유형 생성

MySQL에서 ENUM 데이터 형식을 사용하고 있으며 재사용하고 싶지만 값을 다시 입력하지는 않습니다.MySQL에 C, C++ 타입을 정의하는 방법과 동등한 것이 있습니까?

저는 다음과 같은 일을 하고 싶습니다.

DEFINE ETYPE ENUM('a','b','c','d');
CREATE TABLE Table_1 (item1 ETYPE, item2 ETYPE);

가능한가요?

감사해요.

아니요. MySQL은 지원하지 않습니다.CREATE DOMAIN아니면CREATE TYPE예를 들어 Postgre와 같이SQL이 있습니다.

아마 모든 이름을 다시 입력해야 할 것입니다.copy & paste 또는 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에서 이것을 시도해 보았는데 효과가 있었습니다.

CREATE TABLE 행에 있는 세 개의 열을 모두 선언할 필요는 없다는 점이 흥미롭습니다.세번째열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
)

mysql db의 경우 아래 예시가 있습니다.

CREATE TABLE `data` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
  `gender` enum('Male','Female') DEFAULT NULL,
PRIMARY KEY (`Id`)
  ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci

언급URL : https://stackoverflow.com/questions/1462497/creating-enum-variable-type-in-mysql