欢迎光临
我们一直在努力

关于 Seeder 的 truncate table 的使用

报错的例子:

DB::table('users')->truncate();
SQLSTATE[42000]: Syntax error or access violation:
1701 Cannot truncate a table referenced in a foreign key constraint

 

解决方法(这里的数据库类型是Mysql):

DB::table('users')->truncate();

 

当你seed不进去的时候
解决方法如下

DB::statement('SET FOREIGN_KEY_CHECKS = 0');禁用外键约束
DB::table('users')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS = 1');启用外键约束

 

提醒(这里的数据库类型是Mysql):

如果你要插入多个truncate table,只要在SET FOREIGN_KEY_CHECKS = 0和1中添加

DB::statement('SET FOREIGN_KEY_CHECKS = 0');禁用外键约束
DB::table('users')->truncate();
DB::table('CelineDion')->truncate();
DB::table('ToniBraxton')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS = 1');启用外键约束

 

好处:

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。
但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。
附言:

不同的数据库类型禁用与启用外键约束的”语法”也不同;
其他数据库类型的语法(我所知道的,其他的必应一下吧!):

MSSQL
-- Disable checks:
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all";
-- Enable checks:
EXEC sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all";
MySQL:
-- Disable checks:
SET FOREIGN_KEY_CHECKS = 0;
-- Enable checks:
SET FOREIGN_KEY_CHECKS = 1;
SQLite:
-- Disable checks:
PRAGMA foreign_keys = OFF;
-- Enable checks:
PRAGMA foreign_keys = ON;
4D:
-- Disable checks:
ALTER DATABASE DISABLE CONSTRAINTS;
-- Enable checks:
ALTER DATABASE ENABLE CONSTRAINTS;

 

赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » 关于 Seeder 的 truncate table 的使用

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址