在执行这个查询我有一个错误在MySQL触发语法错误在IF/THEN(错误1064)
1064 - 你有一个错误的SQL语法;检查手册中 对应于你的MySQL服务器版本正确的语法使用 “”附近的8号线
和它所指向的Word然后
任何帮助吗?提前致谢。
在执行这个查询我有一个错误在MySQL触发语法错误在IF/THEN(错误1064)
1064 - 你有一个错误的SQL语法;检查手册中 对应于你的MySQL服务器版本正确的语法使用 “”附近的8号线
和它所指向的Word然后
任何帮助吗?提前致谢。
两个
CREATE TRIGGER insert_Topics
BEFORE INSERT
ON Topics
FOR EACH ROW
BEGIN
IF NOT EXISTS(SELECT 1 FROM Subjects WHERE ID=NEW.SubjectID LIMIT 1) THEN
INSERT INTO error_msg VALUES ('Foreign Key Constraint Violated!');
END IF;
END;
和
CREATE TRIGGER insert_Topics
BEFORE INSERT
ON Topics
FOR EACH ROW
BEGIN
IF (SELECT 1 FROM Subjects WHERE ID=NEW.SubjectID LIMIT 1) IS NULL THEN
INSERT INTO error_msg VALUES ('Foreign Key Constraint Violated!');
END IF;
END;
对我的工作,让你的语法问题,可能在其他地方。
我知道这是一个老问题,但我想我会分享我对我错误的看法,以防将来有人看到这种情况(如果我做了任何事情,随时可以进行社区编辑错误!)。
的原因有在原来的问题的问题似乎是与使用DELIMITER,而且它做什么,因为这里说明:What does DELIMITER // do in a Trigger?
在给定的代码:
INSERT error_msg VALUES ('Foreign Key Constraint Violated!');
END IF;
END;
delimiter ;
的复位带“分隔符”的分隔符表明它以前更改为其他分隔符,说:
DELIMITER //
--TRIGGER1
--TRIGGER2
--TRIGGERn
delimiter ; -- Aggravates me that this wasn't capitalised :P
为分隔符设置为“//”(或其他)的原因,是为了让被分隔的多个语句,我什么思考,是原作者有这样的触发上述其他触发器,并改变了分隔符类似“//”,但忘了更改:
END IF;
END;
delimiter ;
要:
END IF;
END//
delimiter ;
因此,评论者之所以无法复制,是因为他们拥有正确的分隔符(“;”),并且由于只有一条语句要分隔,所以没有发现任何错误,正如作者所做的那样。 参见下面的测试代码和结果,包括初始化,因为一些证据:
DELIMITER ; -- Just in case
DROP TABLE IF EXISTS Topics, Subjects, error_msg;
CREATE TABLE Subjects (id INT(5) PRIMARY KEY,
subjectname CHAR(20));
CREATE TABLE Topics (topicname CHAR(20),
subjectID INT(5)
# FOREIGN KEY (subjectID) REFERENCES Subjects(id) - How this check should be done...
);
CREATE TABLE error_msg (Message VARCHAR(50));
INSERT INTO Subjects VALUES
('5', 'Arts'),
('55', 'Maths'),
('2342', 'Biology'),
('12345', 'Finance');
DELIMITER $$ -- Where the delimiter would be defined, originally
CREATE TRIGGER InsertOnTopics
BEFORE INSERT ON Topics
FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM Subjects WHERE id=NEW.subjectID)=0 THEN
INSERT error_msg VALUES ('Foreign Key Constraint Violated!');
END IF;
END$$
DELIMITER ;
INSERT INTO Topics VALUES
('Welfare Benefits', '5'),
('Eigenvectors', '55'),
('Mitochondria', '2342'),
('Bank of Dad', '12345'),
('Something else', '555');
SELECT * FROM error_msg;
以 “端;”,作为原始的代码:
mysql> SOURCE /Users/benpalmer/test.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('Something else', '555')' at line 6
Empty set (0.00 sec)
mysql>
随着 “END $$”,在我的代码:
比这mysql> SOURCE /Users/myUsername/test.sql
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.02 sec)
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
+----------------------------------+
| Message |
+----------------------------------+
| Foreign Key Constraint Violated! |
+----------------------------------+
1 row in set (0.00 sec)
mysql>
其他,我不明白为什么这个例子没有用正确的外键约束来完成。作为我的第一个答案...希望这有助于任何人!也陷入了这一段时间。
感谢您的帮助,但是这又给出了另一个错误:#1064 - 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,在第6行使用正确的语法,并指向选择的语句 – Mariam
将'new'更改为'NEW'并添加'LIMIT 1'并查看是否修复了您的问题问题。 –
谢谢。我做了,但它是相同的错误 – Mariam