如何在INSERT中修复“触发器错误”?

时间:2019-04-30 17:37:04

标签: mysql database laravel triggers

在公司表中,我们会将每个注册公司都添加到该应用中;在该表中,我有一个由“ user_id”和“ vat_number”(vat_number没有自动递增)组成的多个主键。 现在,我要做的是建立一个触发器,此触发器必须在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 companies表(现在为空)时,出现此错误。

执行中: 插入Luxury2companiesuser_idvat_numbernamephonestreethouse_numbercitypostal_codeemail)值('11','2132132','32','32','32','32','32','32 ','32 @ 32.it');

错误1054:1054:“字段列表”中的未知列“ user_id” SQL语句: 插入Luxury2companiesuser_idvat_numbernamephonestreethouse_numbercitypostal_codeemail)值('11','2132132','32','32','32','32','32','32 ','32 @ 32.it')

1 个答案:

答案 0 :(得分:0)

在触发器中,没有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“是否已经有了新行的临时用户名id”