AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
## 关于 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; ~~~