我正在使用CodeIgniter制作数据库播种机
这是代码
class AreasSeeder extends Seeder {
private $table = 'areas';
public function run() {
$this->db->truncate($this->table);
$data = [
[
'name' => 'area1'
],
[
'name' => 'area2'
]
];
$this->db->insert_batch($this->table, $data);
echo PHP_EOL;
}
}
运行此显示错误时
Error Number: 1701
Cannot truncate a table referenced in a foreign key constraint (`myproject`.`area_pref_relations`, CONSTRAINT `area_pref_relations_ibfk_1` FOREIGN KEY (`area_id`) REFERENCES `myproject`.`areas` (`id`))
TRUNCATE `areas`
Filename: database/seeds/areaSeeder.php
Line Number: 8
我是否需要重置与表区域相关的所有表格?
答案 0 :(得分:0)
这不是CodeIgniter特有的。
这是MySQL的限制。请改用DELETE
语句(假设没有外键行引用表中的行,我们要删除行,或者定义外键约束ON DELETE CASCADE
或ON DELETE SET NULL
。
DELETE FROM `areas`;
如果我们想使用TRUNCATE
,我们需要禁用外键约束。删除引用表的键约束,然后对表执行TRUNCATE
并重新创建外键约束。
ALTER TABLE `myproject`.`area_pref_relations`
DROP FOREIGN KEY `area_pref_relations_ibfk_1` ;
TRUNCATE TABLE `areas` ;
ALTER TABLE `myproject`.`area_pref_relations`
ADD CONSTRAINT `area_pref_relations_ibfk_1`
FOREIGN KEY (`area_id`) REFERENCES `myproject`.`areas` (`id`))
ON UPDATE CASCADE ON DELETE CASCADE ;
或者,如果我们知道没有外键行引用表中我们要截断的行,则可能是禁用会话的外键检查,执行TRUNCATE,然后重新启用外键。
SET foreign_key_checks = 0 ;
TRUNCATE TABLE my_referenced_table;
SET foreign_key_checks = 1 ;