mysql - MYSQL 8.0.17 CHECK 即使已实现也无法正常工作
问题描述
根据CHECK
MYSQL 的手册,约束从 8.0.16 开始已经完全实现。但是当我尝试使用它创建一个表时,失败时它没有显示任何错误CHECK
。出了什么问题?这是我创建表的代码:
CREATE TABLE Employee (ENUM INT(4) AUTO_INCREMENT,
FNAME varchar(10) NOT NULL,
MNAME varchar(1) DEFAULT NULL,
LNAME varchar(10) NOT NULL,
BIRTHDATE date NOT NULL,
GENDER char(1) CHECK(GENDER IN ('M', 'F')),
SSN varchar(10) UNIQUE NOT NULL,
JOB_TITLE varchar(20) CHECK(JOB_TITLE IN ('Lecturer', 'Professor', 'Asst. Professor', 'Sr. Lecturer')),
SALARY numeric(10, 2) NOT NULL,
HIREDATE date NOT NULL,
TAX numeric(8, 2) NOT NULL,
DEPARTMENT varchar(20) CHECK(DEPARTMENT IN ('Biotechnology', 'Computer Science', 'Nano Technology', 'Information Technology')),
PRIMARY KEY(ENUM));
在这里,JOB_TITLE
检查是否在列表中并且与 相同DEPARTMENT
。但是这个查询:
INSERT INTO Employee (FNAME, MNAME, LNAME, BIRTHDATE, GENDER, SSN, JOB_TITLE, SALARY, HIREDATE, TAX, DEPARTMENT ) VALUES
('Sangeet', 'R', 'Sharma', date '1965-11-08', 'M', '11MH456633', 'Prof', 1200900, date '1990-12-16', 120090, 'Computer');
被接受,没有任何错误。为什么会这样?
解决方案
尝试
INSERT INTO Employee (FNAME,
MNAME,
LNAME,
BIRTHDATE,
GENDER,
SSN,
JOB_TITLE,
SALARY,
HIREDATE,
TAX,
DEPARTMENT
)
VALUES ('Sangeet',
'R',
'Sharma',
date '1965-11-08',
'M',
'11MH456633',
'Professor',
1200900,
date '1990-12-16',
120090,
'Computer Science'
);
当您尝试使用“Prof.”时,您的查询版本中违反了employee_chk_2。而不是“教授”。并且违反了employee_chk_3,因为您试图插入“计算机”而不是“计算机科学”。检查约束在您建立它们时起作用。