mysql - 无法在mysql上创建触发器

标签 mysql sql database

我将 XAMMP 与 phpmyadmin 3.2.4 - mySQL 5.1.41 结合使用。

我在 mySQL 中创建了一个表,我想在 tbl_users 上创建一个触发器,但是 mySQL 显示这个错误:

#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“ON TBL_USERS FOR INSERT AS IF(SELECT COUNT(*) FROM TBL_USERS WHERE USERNAME IN”附近使用的正确语法

CREATE TABLE TBL_USERS
(
ID INT NOT NULL AUTO_INCREMENT,
USERNAME VARCHAR(50) NOT NULL,
PASSWORD VARCHAR(50) NOT NULL,
EMAIL VARCHAR(100) NOT NULL,
STATUS INT DEFAULT 1,
TYPE_USER INT DEFAULT 1,
DISPLAY_NAME VARCHAR(50) NULL,
CONSTRAINT PK_USERS PRIMARY KEY (ID),
CONSTRAINT UN_USERNAME UNIQUE(USERNAME)
)

触发器:

CREATE TRIGGER CHECK_USERNAME ON TBL_USERS FOR INSERT
AS
IF(SELECT COUNT(*) FROM TBL_USERS WHERE USERNAME IN (SELECT USERNAME FROM inserted))>1
BEGIN
PRINT 'THIS USERNAME IS EXISTS'
ROLLBACK TRANSACTION
END

最佳答案

Trigger activation time can be BEFORE or AFTER. You must specify the activation time when you define a trigger. You use BEFORE keyword if you want to process action prior to the change is made on the table and AFTER if you need to process action after change are made.

像这样尝试:

create trigger userIns BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
...
END

关于mysql - 无法在mysql上创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845036/

相关文章:

php - 如何使用php制作涉及 session cookie的注销页面?

mysql - 如何从一行中的字段创建单独的行?

php - 如何分解数组并插入到 MySQL 中

mysql - SQL 查询 - 选择查询

java - 插入前检查注册数据? JAVA

mysql - 返回连接有多个 child 的 parent 的单个记录

SQL Server 相当于 GROUP_CONCAT()

MySQL 截断错误

sql - varchar2(n) 和 varchar2(n char) 之间的 Oracle SQL 区别

php - 使用 MySQL 查询进行半复杂的数学运算