根据MYSQL手册,自8.0.16起,CHECK
约束已完全实现。但是当我尝试使用它创建表时,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');
被接受而没有任何错误。为什么会这样?
答案 0 :(得分:0)
尝试将INSERT INTO到员工(FNAME,MNAME,LNAME,BIRTHDATE,GENDER,SSN,JOB_TITLE,SALARY,HIREDATE,TAX,DEPARTMENT)值(“ Sangeet”,“ R”,“ Sharma”,日期为1965-11-11) 08','M','11MH456633','Professor',1200900,date'1990-12-16',120090,'Computer Science');
您尝试使用“教授”时,在您的查询版本中违反了employee_chk_2。而不是“教授”。并且employee_chk_3被违反,因为您试图插入“计算机”而不是“计算机科学”。建立检查约束时,它们会起作用。