2016-12-12 14 views
0

フィールドUSER_IDにプライマリキーを持つテーブルUSERがあるとします。また、db内のすべてのテーブルには、実際のユーザーのIDがMODIFIED_BYのフィールドが含まれている必要があります。私の目的は、適切な名前のuserのidと等しいフィールドのデフォルト値を指定することです。 F.Y.あなたには名前systemのユーザーがいて、すべてのテーブルのすべてのレコードにMODIFIED_BYフィールドにこのユーザーのIDが必要です。同様に、すべての新しいレコードがこれを満たすことを望みます。MySQL:別のテーブルカラムのカラムのデフォルト値

+0

'USER()'が必要です。 –

+0

何を意味するのか理解していません – antongarakh

+0

すべてのユーザーはデータベースに独自のログインを持っていますか?または、接続文字列に単一のIDを使用し、アプリケーションユーザーの資格情報を含む「ユーザー」テーブルを使用していますか?または、他の何か? – xQbert

答えて

2

データベースユーザー以外のユーザー(「登録ユーザー」など)を指していると仮定すると、おそらくトリガーが問題の解決方法です。挿入時に起動するトリガーと更新時に起動する2つのトリガーで、カスタムコードを使用してmodified_at列の値を指定できます。 select user_id from ... where ...

質問に直接答える必要がある次のサンプルコードを確認してください。あなたの問題を解決することを願っています。それ以外の場合は、より多くの情報を提供してください。

DELIMITER | 

drop table if exists sometable 
| 
CREATE TABLE `sometable` (
    `somecolumn` int(11) DEFAULT NULL, 
    `modified_by` int(11) DEFAULT NULL 
) 
| 
drop table if exists registered_user 
| 
CREATE TABLE registered_user (
    user_id integer primary key, 
    name varchar(50) 
) 
| 
drop trigger if exists sometable_inserted 
| 
drop trigger if exists sometable_modified 
| 
CREATE TRIGGER sometable_inserted BEFORE INSERT ON sometable 
FOR EACH ROW 
BEGIN 
SET new.modified_by := (select user_id from registered_user where [email protected]); 
END; 
| 
CREATE TRIGGER sometable_modified BEFORE UPDATE ON sometable 
FOR EACH ROW 
BEGIN 
SET new.modified_by := (select user_id from registered_user where [email protected]); 
END; 
| 

DELIMITER ; 

insert into registered_user values (5, 'joe'); 
insert into registered_user values (6, 'sam'); 

set @name='sam'; 
insert into sometable(somecolumn) values (1); 
insert into sometable(somecolumn) values (2); 
set @name='joe'; 
update sometable set somecolumn = 3 where somecolumn = 2; 
+0

はい、これは私が必要とするものです!どうもありがとう! – antongarakh

+0

あなたは大歓迎です。それがあなたの問題を解決したならば、答えを「受け入れられた」とマークすることが大切です。 –

関連する問題