집 >데이터 베이스 >MySQL 튜토리얼 >8.0.16 이전 버전에서 MySQL CHECK 제약 조건이 실패하는 이유는 무엇입니까?
MySQL CHECK 제약 조건 실패 문제
데이터베이스 테이블을 정의할 때 데이터 무결성을 보장하기 위해 제약 조건을 추가하는 것이 중요합니다. CHECK 제약 조건을 사용하면 특정 열의 값이 충족해야 하는 조건을 지정할 수 있습니다. 그러나 MySQL 8.0.15 이하에서는 특별한 경우인 CHECK 제약 조건이 적용되지 않습니다.
예:
<code class="language-sql">CREATE TABLE Customer ( SD integer CHECK (SD > 0), Last_Name varchar (30), First_Name varchar(30) );</code>
이 테이블을 만든 후 음수 SD 값이 있는 행을 삽입해 보세요.
<code class="language-sql">INSERT INTO Customer values ('-2', 'abc', 'zz');</code>
삽입된 값이 지정된 CHECK 제약 조건을 위반하더라도 MySQL은 오류를 보고하지 않습니다. 이는 MySQL 참조 매뉴얼에 따르면 다음과 같습니다.
<code>CHECK子句会被解析,但所有存储引擎都会忽略它。</code>
해결책:
이 문제를 해결하려면 다음 중 하나를 수행하세요.
<code class="language-sql">mysql> delimiter // mysql> CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer -> FOR EACH ROW -> BEGIN -> IF NEW.SD <=0 THEN SET NEW.SD=0; -> END IF; -> END -> // mysql> delimiter ;</code>
위의 트리거 예에서는 음수의 SD 값을 0으로 설정하므로 실제 필요에 따라 트리거 로직을 수정할 수 있습니다.
위 내용은 8.0.16 이전 버전에서 MySQL CHECK 제약 조건이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!