programing

테이블에 명명된 검사 제약 조건 추가

minimums 2023. 6. 12. 21:16
반응형

테이블에 명명된 검사 제약 조건 추가

이름을 추가하려고 합니다.CHECKMariaDB의 테이블에 대한 제약 조건입니다.설명서와 주변에 흩어져 있는 몇 가지 샘플을 보면 다음 구문이 작동할 것입니다.

DROP TABLE IF EXISTS customers;
CREATE TABLE customers (
    id int AUTO_INCREMENT PRIMARY KEY,
    name varchar(255),
    email VARCHAR(60) constraint customer_email check (email like '%@%')
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci ENGINE=INNODB;

그렇지 않습니다.항상 도움이 되는 메시지를 받습니다.

SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 4행의 'check('%@%'와 같은 전자 메일) CHARRATE SETutf8mb4 COLLATEutf8mb4_unicode_520_...' 근처에서 사용할 올바른 구문을 확인하십시오.

물론 아무 말도 안 해주는군요

을 알고 있습니다

  • 제거하면constraint customer_email그건 효과가 있다.
  • 다음에 쉼표를 추가하면email VARCHAR(60)검사 제약 조건을 별도의 명령어로 만드는 것도 작동합니다.

즉, MariaDB는 위의 구문을 지원하지 않는 것입니까, 아니면 제가 놓친 것이 있습니까?

저는 https://dbfiddle.uk/PYJKnmuU 에 바이올린 연주자가 있습니다.

https://mariadb.com/kb/en/constraint/ #check-straints에 따르면 이름이 지정된 제약 조건은 제약 조건을 테이블 수준 제약 조건으로 정의한 경우에만 사용할 수 있는 것으로 나타납니다.

다시 말해, 이것은 다음과 같이 작동해야 합니다.

...
email VARCHAR(60),    -- notice the comma
constraint customer_email check (email like '%@%')
...

그러나 명명된 검사 제약 조건을 각 열에 따라 정의하지 않습니다.

이 경우 쉼표가 중요한 비트입니다.SQL은 일반적으로 거의 모든 경우에 공백을 선택 사항으로 취급하기 때문에 쉼표 뒤에 새 줄을 추가하는 것은 선택 사항입니다.

구문에서는 열에 인라인 CHECK 제약 조건을 사용할 수 있지만 제약 조건의 이름을 지정해야 하는 경우에는 사용할 수 없습니다.

언급URL : https://stackoverflow.com/questions/76025599/adding-a-named-check-constraint-to-a-table

반응형