2013-04-29 89 views
0

我试图让外键中的操作发生更改(在删除/更新时)。在外键约束中获取ON DELETE ON UPDATE操作

我试图检查在寻找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 tryed也和我得到:

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例中没有关于删除/更新的操作。

我能明白吗?怎么样?如果我可以的话。

回答

2

选择UPDATE_RULEDELETE_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_RULEDELETE_RULECASCADE,​​,SET DEFAULTRESTRICTNO ACTION

+0

简单和伟大的工作,谢谢兄弟。 – 2013-04-29 15:13:34

0

这取决于你想要做什么。如果您只是希望在相关记录上更新外键,则您正在寻找CASCADE选项的外键约束。请参阅this page并阅读关于级联的部分。如果你想在记录的UPDATE/DELETE上执行更复杂的操作,你需要触发器。有关创建触发器的语法,请参见this page