簡體   English   中英

如何在MySQL中INSERT之前修復“觸發器錯誤”?

[英]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 companiesuser_idvat_numbernamephonestreethouse_numbercitypostal_codeemail )VALUES( house_number ','2132132','32','32','32','32','32', '32','32 @ 32.it');

錯誤1054:1054:'字段列表'中的未知列' Luxury2語句:INSERT INTO Luxury2 companiesuser_idvat_numbernamephonestreethouse_numbercitypostal_codeemail )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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM