質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

1340閲覧

SQL UPDATEトリガーが上手くいかない

yoheiiii

総合スコア87

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2021/01/07 08:06

環境:Windows10,XAMPP,HeidiSQL

Aテーブル内を更新するとUPDATEトリガーが動きBテーブル内も同様に更新したい
同じ作り方でINSERTは成功しております。

DROP TRIGGER IF EXISTS `UPD_C`; DELIMITER ;; CREATE TRIGGER `UPD_C` AFTER UPDATE ON `A` FOR EACH ROW INSERT INTO `B` ( `aaa` , `bbb` , `ccc` , `ddd` , `eee` , `fff` ) VALUES ( new.aaa , new.bbb , new.ccc , new.ddd , new.eee , new.fff ) ;; DELIMITER ;

aaaはPRIMARY KEYでAUTO_INCREMENTです。

動作確認で下記を行うとエラーになります。
UPDATE A SET bbb = 11 WHERE aaa=2;

エラー文
SQL エラー (1062):Duplicate entry '2' for key 'PRIMARY'

aaaが駄目だと思い削除して行うとBに更新ではなく新規で登録されてしまします。

ご教授お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

aaaが駄目だと思い削除して行うとBに更新ではなく新規で登録

ちょっと意味不明
bはaの更新置き場ですよね?つねにinsert処理しかしないように書いていますけど?

投稿2021/01/07 11:03

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2021/01/07 11:03

イメージ的にはこんな感じ create table a(id int primary key,val int); create table b(id int ,val int,status enum('insert','update') not null); DROP TRIGGER IF EXISTS INS_A; DELIMITER // CREATE TRIGGER INS_A AFTER INSERT ON a FOR EACH ROW INSERT INTO B VALUES ( new.id , new.val , 'insert' ); // DELIMITER ; DROP TRIGGER IF EXISTS UPD_A; DELIMITER // CREATE TRIGGER UPD_A AFTER UPDATE ON a FOR EACH ROW INSERT INTO B VALUES ( new.id , new.val , 'update' ); // DELIMITER ; insert into a values(1,100),(2,200); update a set val=300 where id=1; update a set val=100 where id=1;
yambejp

2021/01/07 11:04

bはaのログなので新規でも追加でもつねに新しいデータができます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問