[英]How to fix ' Trigger Error ' before INSERT in MySQL?
在公司表中,我们有应用程序的每个注册公司; 在该表中,我有一个由'user_id'和'vat_number'组成的多个主键(vat_number no Auto-Increment)。 现在,我想要做的是构建一个触发器,这个触发器必须在INSERT命令之前执行,它必须能够验证是否存在与新user_id的相同值相关联的user_id(每个用户)必须与一个vat_number完全关联。这是表的结构:
public function up()
{
Schema::create('companies', function (Blueprint $table) {
$table->engine = 'MyISAM';
$table->integer('user_id')->unsigned();
$table->string(‘vat_number’, 11);
$table->string('name', 64);
$table->char(‘phone’, 11);
$table->string(‘street’, 64);
$table->integer(‘house_number’);
$table->string(‘city’, 64);
$table->string(‘postal_code’, 64);
$table->string('email', 64)->unique();
$table->timestamps();
//FOREIGN KEY
$table->foreign('user_id')->references('id')->on('users');
//PRIMARY KEY
$table->primary(['user_id’,’vat_number’]);
});
DB::statement('ALTER TABLE companies MODIFY user_id INTEGER NOT NULL AUTO_INCREMENT');
}
//TRIGGER CODE
public function up()
{
DB::unprepared('
CREATE TRIGGER beforeCompanyInsert
BEFORE INSERT ON companies FOR EACH ROW
BEGIN
DECLARE msg VARCHAR(255);
IF new.user_id = user_id THEN
SIGNAL SQLSTATE “45000” SET MESSAGE_TEXT = “ERROR”;
END IF;
END;
');
}
现在,当我试图插入第一行whitin公司表(现在是空的)时,我有这个错误。
执行:INSERT INTO Luxury2
。 companies
( user_id
, vat_number
, name
, phone
, street
, house_number
, city
, postal_code
, email
)VALUES( house_number
','2132132','32','32','32','32','32', '32','32 @ 32.it');
错误1054:1054:'字段列表'中的未知列' Luxury2
语句:INSERT INTO Luxury2
。 companies
( user_id
, vat_number
, name
, phone
, street
, house_number
, city
, postal_code
, email
)VALUES( house_number
','2132132','32','32','32','32','32', '32','32 @ 32.it')
在触发器中,没有NEW或OLD的字段引用(除非在触发器内的查询的上下文中)没有多大意义。
而不是: IF new.user_id = user_id THEN
,它让MySQL询问“user_id是哪一行?”
尝试: IF EXISTS (SELECT * FROM companies WHERE user_id = NEW.user_id) THEN
,告诉MySQL“是否已有一行包含新行的暂定user_id”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.