0

外部キーの変更(削除/更新時)でアクションを取得しようとしています。

INFORMATION_SCHEMA.key_column_usage を調べて確認しようとしました:

SELECT * 
FROM `INFORMATION_SCHEMA`.`key_column_usage` 
WHERE `referenced_table_schema` = '{$this->dbName}'
AND `referenced_table_name` IS NOT NULL
AND `table_name` = '{$this->tableName}'

次のように表示されます。

0 => 
array (size=12)
  'CONSTRAINT_CATALOG' => string 'def' (length=3)
  'CONSTRAINT_SCHEMA' => string 'test' (length=4)
  'CONSTRAINT_NAME' => string 'profiles_ibfk_1' (length=15)
  'TABLE_CATALOG' => string 'def' (length=3)
  'TABLE_SCHEMA' => string 'test' (length=4)
  'TABLE_NAME' => string 'profiles' (length=8)
  'COLUMN_NAME' => string 'id' (length=2)
  'ORDINAL_POSITION' => string '1' (length=1)
  'POSITION_IN_UNIQUE_CONSTRAINT' => string '1' (length=1)
  'REFERENCED_TABLE_SCHEMA' => string 'test' (length=4)
  'REFERENCED_TABLE_NAME' => string 'users' (length=5)
  'REFERENCED_COLUMN_NAME' => string 'id' (length=2)

....

INFORMATION_SCHEMA.TABLE_CONSTRAITS も試してみましたが、次のようになりました。

0 => 
array (size=6)
  'CONSTRAINT_CATALOG' => string 'def' (length=3)
  'CONSTRAINT_SCHEMA' => string 'test' (length=4)
  'CONSTRAINT_NAME' => string 'PRIMARY' (length=7)
  'TABLE_SCHEMA' => string 'test' (length=4)
  'TABLE_NAME' => string 'profiles' (length=8)
  'CONSTRAINT_TYPE' => string 'PRIMARY KEY' (length=11)

....

2 つのケースでの削除/更新時のアクションについては何もありません。

私はそれを得ることができますか?どのように?もちろんできれば。

4

2 に答える 2

2

情報スキーマから次を選択UPDATE_RULEします。DELETE_RULEREFERENTIAL_CONSTRAINTS

SELECT CONSTRAINT_NAME, UPDATE_RULE, DELETE_RULE
FROM   INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE  UNIQUE_CONSTRAINT_SCHEMA = '{$this->dbName}'
   AND REFERENCED_TABLE_NAME IS NOT NULL
   AND TABLE_NAME = '{$this->tableName}'

文書化されているように:

UPDATE_RULEまたはの可能な値DELETE_RULECASCADESET NULLSET DEFAULTRESTRICTNO ACTIONです。

于 2013-04-29T15:05:21.447 に答える
0

それはあなたが何をしたいかによります。関連するレコードで外部キーを更新するだけの場合は、CASCADEオプションで外部キー制約を探しています。このページを参照し、カスケードに関するセクションを読んでください。レコードの UPDATE/DELETE でより複雑なアクションが必要な場合は、トリガーが必要になります。トリガーを作成する構文については、このページを参照してください。

于 2013-04-29T15:05:28.903 に答える