Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选中约束赢得';t工作mysql_Mysql_Sql_Check Constraints - Fatal编程技术网

选中约束赢得';t工作mysql

选中约束赢得';t工作mysql,mysql,sql,check-constraints,Mysql,Sql,Check Constraints,检查约束不起作用 CREATE TABLE IF NOT EXISTS supervisor ( sup_id INT(3) NOT NULL, sup_name VARCHAR(30) NOT NULL, gen VARCHAR(1) NOT NULL CHECK (gen='M' or gen='F'), dep_id INT(4), PRIMARY KEY (sup_id), INDEX (dep_id), FOREIGN KEY (dep_id) REFERENCES dep

检查约束不起作用

CREATE TABLE IF NOT EXISTS supervisor (
sup_id INT(3) NOT NULL,
sup_name VARCHAR(30) NOT NULL,
gen VARCHAR(1) NOT NULL CHECK (gen='M' or gen='F'),
dep_id INT(4),

PRIMARY KEY (sup_id),
INDEX (dep_id),

FOREIGN KEY (dep_id)
    REFERENCES department(dep_id)
    ON UPDATE CASCADE ON DELETE RESTRICT    
);
我还尝试:

 CONSTRAINT chk_supervisor_gen CHECK ('M' or 'F')
这些都没有阻止输入此信息

INSERT
INTO supervisor (sup_id, sup_name, gen, dep_id)
VALUES  
       (1, 'hello', 'G', 1);

不幸的是,MySQL不支持SQL检查约束。 因此,请尝试改用
enum

CREATE TABLE IF NOT EXISTS supervisor (
sup_id INT(3) NOT NULL,
sup_name VARCHAR(30) NOT NULL,
gen enum('M','F') NOT NULL,
dep_id INT(4),

PRIMARY KEY (sup_id),
INDEX (dep_id),

FOREIGN KEY (dep_id)
    REFERENCES department(dep_id)
    ON UPDATE CASCADE ON DELETE RESTRICT    
);

MySQL不强制执行检查约束

这是对SQL标准的一个有充分记录的偏差。(尽管外行没有料到这一点。)

如果需要MySQL数据库强制执行“检查约束”,则必须在插入之前将强制编码为
,在更新之前编码为


本说明:

CHECK
子句已被解析,但被所有存储引擎忽略

在MySQL参考手册中的
CREATE TABLE
语法下

参考:


有关枚举的警告

ENUM
不限制插入“无效”值;无效值被转换为零长度字符串,发出警告,但这不是错误

演示:

CREATE TABLE foo (gen ENUM('M','F'))

INSERT INTO foo (gen) VALUES ('x')

-- Warning Code : 1265
-- Data truncated for column 'gen' at row 1

SELECT gen, CHAR_LENGTH(gen) FROM foo;

-- gen  CHAR_LENGTH(gen)  
-- ---  ----------------
--                     0

我们必须使用检查约束。我想这样做:P.不幸的是,MySQL不支持SQL检查约束,因为据我所知,MySQL不支持
check
约束。
CHECK
子句已解析,但被所有存储引擎忽略。来自StackOverflow帮助中心:。谢谢,现在我不知道这是否是我老师想要的。对我们来说似乎有点过分,但他会知道我们不能使用检查约束。感谢hlepI,我希望你的老师会很高兴地发现你发现
CHECK
子句被接受了,但它不是由MySQL强制执行的。他会很高兴你测试了它,并发现了这一点。如果需要在数据库中强制执行此操作,MySQL中唯一可用的机制就是插入前的
和更新前的
触发器。“理论上,理论和实践没有区别。实际上是有区别的。”当你告诉老师这一发现时,确保您有一个演示测试用例。SQL Fiddle在这方面非常方便,课程材料是为与Oracle、SQL Server、DB2、Teradata等一起使用而开发的,并且还没有针对MySQL进行更新。或者,你的老师正在创造一个环境,让你学会如何自学。老师可能想强调考试的重要性。