🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 关于 Seeder 的 truncate table 的使用 报错的例子: ~~~php DB::table('users')->truncate(); ~~~ ~~~php SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constraint ~~~ 解决方法 (这里的数据库类型是 Mysql): ~~~php DB::table('users')->truncate(); 当你seed不进去的时候 解决方法如下 DB::statement('SET FOREIGN_KEY_CHECKS = 0');禁用外键约束 DB::table('users')->truncate(); DB::statement('SET FOREIGN_KEY_CHECKS = 1');启用外键约束 ~~~ 提醒 (这里的数据库类型是 Mysql): ~~~php 如果你要插入多个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');启用外键约束 ~~~ 好处: ~~~php TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。 但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 ~~~ 附言: ~~~php 不同的数据库类型禁用与启用外键约束的"语法"也不同; ~~~ 其他数据库类型的语法 (我所知道的,其他的必应一下吧!): ~~~php 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; ~~~