首先,我创建了一个像
CREATE TABLE Customer (
SD integer CHECK (SD > 0),
Last_Name varchar (30),
First_Name varchar(30)
);
Run Code Online (Sandbox Code Playgroud)
然后在该表中插入值
INSERT INTO Customer values ('-2','abc','zz');
Run Code Online (Sandbox Code Playgroud)
MySQL没有显示错误,它接受了值.
我认为一个外键意味着一行必须引用一行,但我正在看一些表肯定不是这样的表.Table1的column1在table2中的column2上有一个外键约束,但是table2中有许多记录在column2中有相同的值.column2上还有非唯一索引.这是什么意思?外键约束是否只是意味着在右列中必须存在至少一个具有正确值的记录?我认为这意味着必须有一个这样的记录(不确定空白如何适应图片,但我现在不太关心它).
更新:显然,这种行为是特定于MySQL,这是我正在使用的,但我没有在我原来的问题中提到它.
我在表格中有一个名为"患者类型"的列.我想确保只有2个值可以插入到列中,opd或者被允许,除此之外,所有其他输入都无效.
以下是我想要的一个例子
如何确保该列仅接受"opd"或"已接纳"作为"患者类型"列的数据.
我试图使用MySQL触发器生成错误消息.以下是我的代码:
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Initial_Fees`
FOR EACH ROW
BEGIN
IF ((SELECT Activation from Portfolio WHERE idPortfolio = New.idPortfolio)=false) THEN
SIGNAL SQLSTATE '45000';
SET MESSAGE_TEXT := 'Disabled Thing';
END IF;
END$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
但这总会产生错误.我不知道错误是什么,因为它没有说错误,它只是"错误".
对此有何建议?除此之外,有些人说使用SIGNAL
是受到问题的,因为它可能依赖于MySQL版本.有什么建议?
我在OS X 10.9.1上使用MySQL 5.5.37.我有一个NOT NULL
类型的列DATETIME
.如果不使用触发器,如何阻止'0000-00-00 00:00:00'的值进入我的列?我会接受CURRENT_TIMESTAMP的值来代替所有的零.
我试过了:
SET sql_mode = 'NO_ZERO_DATE';
Run Code Online (Sandbox Code Playgroud)
运行上面的内容后,我仍然可以在表格中插入零日期.