0%

数据库外键约束

一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。

在创建表的时候指定外键约束:

1
2
3
CONSTRAINT 外键约束名 FOREIGN KEY  (column1,column2,... column_n) 
REFERENCES 外键依赖的表 (column1,column2,...column_n)
ON DELETE CASCADE--级联删除

在创建表后增加外键约束:

1
2
3
4
5
ALTER TABLE 表名
ADD CONSTRAINT 外键约束名
FOREIGN KEY (column1, column2,...column_n)
REFERENCES 外键所依赖的表 (column1,column2,...column_n)
ON DELETE CASCADE;--级联删除

顺便记录yii框架使用过程中发现的一个疑问,以后解决:

在调用存储过程时,delete()中使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public function actionDelete($id)
{

$username=Yii::$app->user->identity->username;
$model = $this->findModel($id);
if (!$model->load(Yii::$app->request->post())) {

$command= Yii::$app->db
->createCommand('call proc_delete(:p0,:p1)')
->bindValues([":p0" =>$model->catid,":p1"=>$username]);
$res=$command->execute();
if($res>=0)
{
return $this->redirect(['index']);
}
}
return $this->redirect(['index']);
}

update()中使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post())) {

$command= Yii::$app->db
->createCommand('call proc_update(:p0,:p1)')
->bindValues([":p0" =>$model->catid, ":p1" =>$model->price]);
$res=$command->execute();
if($res>=0)
{
return $this->redirect(['view', 'id' => $model->catid]);
}
}
return $this->render('update', [
'model' => $model,
]);
}

帮jz同学看了很久他的语句,才发现if条件语句中,delete()和update()差了一个感叹号,但具体原因现在先不探寻了。