在这个问题中,我学会了如何防止插入NULL值.但是,不幸的是,无论如何都插入了一个空字符串.除了在PHP方面阻止这一点,我想使用类似数据库约束的东西来防止这种情况.当然,对应用程序方面的检查是必要的,但我希望它是双方的.
我被告知,无论什么应用程序与您的数据库通信,它都不应该在其中插入基本上错误的数据.所以...
CREATE TABLE IF NOT EXISTS tblFoo (
foo_id int(11) NOT NULL AUTO_INCREMENT,
foo_test varchar(50) NOT NULL,
PRIMARY KEY (foo_id)
);
Run Code Online (Sandbox Code Playgroud)
仍然允许我这样插入:
INSERT INTO tblFoo (foo_test) VALUES ('');
Run Code Online (Sandbox Code Playgroud)
我想阻止它.
我有一个包含url的表和一个表示其参数的字符串.问题是我想要一个url和一个参数字符串作为表的唯一约束 - 也就是说没有条目可以具有相同的url和参数字符串.参数字符串可以是任意长度(比800bytes长左右这是一个MySQL的关键最大长度,所以因为它抛出一个错误,我不能用独有的(URL,则params)...).
我考虑使用触发器来执行此操作,但如果触发器发现插入即将插入重复条目,如何抛出异常/引发错误?我想我想抛出MySqlException,就像MySql一样,重复主键等,所以我可以用我的C#代码捕获它.
我在触发器中有两个部分需要帮助:...中止抛出异常到C#...如何向C#抛出异常等?...允许插入... - 如果没有重复输入,我如何才允许插入?
继承人触发代码:
CREATE TRIGGER urls_check_duplicates
BEFORE INSERT ON urls
FOR EACH ROW
BEGIN
DECLARE num_rows INTEGER;
SELECT COUNT(*)
INTO num_rows
FROM urls
WHERE url = NEW.url AND params = NEW.params;
IF num_rows > 0 THEN
... ABORT/throw exception to C# ...
ELSE
... Allow insert ...
END
Run Code Online (Sandbox Code Playgroud) 我们可以在mysql中将列指定为"not empty"/"required".要求是确保在任何记录插入时字段永远不会为空.