相关疑难解决方法(0)

如何使用T-SQL临时禁用外键约束?

是否禁用和启用SQL Server支持的外键约束?或者是我唯一的选择drop,然后重新create约束?

t-sql sql-server constraints foreign-keys

805
推荐指数
10
解决办法
59万
查看次数

无法截断表,因为它是由FOREIGN KEY约束引用的?

使用MSSQL2005,如果我先截断子表(具有FK关系主键的表),是否可以截断具有外键约束的表?

我知道我也可以

  • 使用DELETE不带where子句然后RESEED使用身份(或)
  • 删除FK,截断表,然后重新创建FK.

我认为只要我在父母之前截断子表,我就可以不用上面的任何一个选项,但是我收到了这个错误:

无法截断表'TableName',因为它正被FOREIGN KEY约束引用.

t-sql sql-server truncate sql-server-2005 foreign-keys

427
推荐指数
16
解决办法
61万
查看次数

MySQL删除表中的所有行并将ID重置为零

我需要删除表中的所有行,但是当我添加一个新行时,我希望主键ID(具有自动增量)分别从0开始从1开始.

mysql

170
推荐指数
5
解决办法
26万
查看次数

强制InnoDB重新检查表/表上的外键?

我有一组InnoDB表,我经常需要通过删除一些行并插入其他行来维护.其中一些表具有引用其他表的外键约束,因此这意味着表加载顺序很重要.要插入新行而不必担心表的顺序,我使用:

SET FOREIGN_KEY_CHECKS=0;
Run Code Online (Sandbox Code Playgroud)

之前,然后:

SET FOREIGN_KEY_CHECKS=1;
Run Code Online (Sandbox Code Playgroud)

后.

加载完成后,我想检查更新表中的数据是否仍然保持参照完整性 - 新行不会破坏外键约束 - 但似乎没有办法做到这一点.

作为测试,我输入的数据确实违反了外键约束,并且在重新启用外键检查时,mysql没有产生任何警告或错误.

如果我试图找到一种方法来指定表加载顺序,并在加载过程中留在了外键检查,这不会让我在具有自引用外键约束的表加载数据,因此这将不是一个可接受的解决方案

有没有办法强制InnoDB验证表或数据库的外键约束?

mysql innodb foreign-keys

60
推荐指数
3
解决办法
2万
查看次数

错误:为表'<table-name>'选择拒绝用户'<userid>'@'<ip-address>'的命令

在我的网站上,我使用的是MySQL数据库.我正在使用webservice,在那里我做所有与数据库相关的操作.

现在,在该Web服务的一种方法中,我得到以下错误.

选择命令被拒绝用户''''为表'''

可能有什么不对?

下面是我得到该错误的代码.我试过调试,发现它在线路上失败了

MySqlDataReader result1 = command1.ExecuteReader();

这是我的代码:

        String addSQL = "Select Max(`TradeID`) from `jsontest`.`tbl_Positions";
        MySqlConnection objMyCon = new MySqlConnection(strProvider);
        objMyCon.Open();
        MySqlCommand command = objMyCon.CreateCommand();

        command.CommandText = addSQL;
         MySqlDataReader result = command.ExecuteReader();
        //int j = command.ExecuteNonQuery();
         while (result.Read())
         {
             MaxTradeID = Convert.ToInt32(result[0]);
         }
        objMyCon.Close();
        for (i = 1; i <= MaxTradeID; i++)
        {
            String newSQL = "Select `Strike`,`LongShort`,`Current`,`TPLevel`,`SLLevel` from `json`.`tbl_Position` where `TradeID` = '" + i + "'";
            MySqlConnection objMyCon1 = new MySqlConnection(strProvider);
            objMyCon1.Open();
            MySqlCommand command1 = objMyCon1.CreateCommand(); …
Run Code Online (Sandbox Code Playgroud)

mysql mysqldatareader mysql-error-1142

57
推荐指数
4
解决办法
18万
查看次数

如何正确截断表格?

我正在使用带有ruby的datamapper将数据存储到某些表中.

有几个表有非常大量的信息,我想在用户"重建数据库"时清除它们(它基本上删除了所有内容并重新计算数据).

我最初尝试使用Forum.all.destroy并为所有不同的表做了它,但我注意到其中一些只是没有从phpmyadmin中删除.我只能想象它因为外键.虽然我真的不知道,因为我的其他表格已成功删除.更不用说,无论如何,它只是'零',所以键不会达到非常大的数字(如#500,000键).

然后我尝试使用下面的代码运行它,但由于"外键约束",它没有清除表格.我想强迫它工作,因为我知道一个事实我正在清理所有相互依赖的表(我只是没有清除2个表,一个设置表和一个随机存储表,两者都没有使用外键).

到目前为止我有......

adapter = DataMapper.repository(:default).adapter
adapter.execute('TRUNCATE TABLE `forums`, `dates`, `remarks`');
Run Code Online (Sandbox Code Playgroud)

这很好,除了mysql语法显然是错误的.所以这是第一件事

我在phpmyadmin中逐一做到这一点,当我这样做的时候,它说

Cannot truncate a table referenced in a foreign key constraint
Run Code Online (Sandbox Code Playgroud)

ruby mysql datamapper

40
推荐指数
2
解决办法
5万
查看次数

Laravel 5.1迁移和种子无法截断外键约束中引用的表

我正在尝试运行迁移(见下文)并为数据库播种,但是当我运行时

php artisan migrate --seed
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Migration table created successfully.
Migrated: 2015_06_17_100000_create_users_table
Migrated: 2015_06_17_200000_create_password_resets_table
Migrated: 2015_06_17_300000_create_vehicles_table

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table
referenced in a foreign key constraint (`app`.`vehicles`, CONSTRAINT `vehic
les_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `app`.`users` (`id`
)) (SQL: truncate `users`)

[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table
referenced in a foreign key constraint (`app`.`vehicles`, CONSTRAINT `vehic
les_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `app`.`users` (`id`
))
Run Code Online (Sandbox Code Playgroud)

我查看了这个错误应该是什么意思,并且还找到了遇到同样问题的其他人的 …

mysql laravel laravel-5 laravel-seeding laravel-migrations

19
推荐指数
5
解决办法
2万
查看次数

在事务期间禁用约束

我正在整理一个表格,用于向某些信息请求发送后续消息。向一组人发送请求并跟踪响应。如果一个人未能回应,则可能会发送零个或多个跟进。我创建了一个表:

FollowupId int primary key, 
RequestId int foreign key (outside this example), 
Follows int foreign key (FollowupId), 
Message varchar
Run Code Online (Sandbox Code Playgroud)

如果一条消息是第一条跟进消息,Follows 将为空。否则,它是其他一些 Followup 的 id。我还在 Follows 上添加了一个独特的约束。也就是说,在任何给定消息之后不能有超过一条消息。

编辑:我还应该突出显示 Follows 上的外键。它引用此表中的 FollowupId。所以如果A->B->C,仅仅删除B会使C中的外键无效。同样,不可能只更新 C 以跟随 A,因为 B 已经跟随 A 并且唯一约束禁止重复。

当然,问题是,如果该消息后面是另一个消息,则删除后续条目现在很困难。在我看来,应该可以禁用约束检查,从而可以删除中间的后续内容,“向上移动”后续后续内容,然后重新启用检查。是否有某种方法可以仅在事务期间禁用约束?

(此外,我知道在此表中包含 RequestId 可能会导致数据不一致。最好有 Followups [FollowupId, Message]、InitialFollowups [FollowupId, RequestId] 和 followingFollowups [FollowupId, Follows] 表。我认为它不必要地使这个例子复杂化。)

sql-server

5
推荐指数
1
解决办法
3353
查看次数

无法截断MySQL表,同时能够删除所有记录

我是一个非常初衷的关系,所以这可能听起来很愚蠢.但是,在截断表和删除所有记录之间(在MySQL中)有什么区别(这个答案仅说明性能)?

我正在玩(在phpMyAdmin中)我的一个测试表,要检查,如何重置auto_increment表的值并运行到情境,我能够删除所有记录:

DELETE from managers;
Run Code Online (Sandbox Code Playgroud)

但是当我试图截断这个表(TRUNCATE managers)时,我得到了警告:Cannot truncate a table referenced in a foreign key constraint (probes, CONSTRAINT probes_ibfk_4 FOREIGN KEY (manager_id) REFERENCES managers (id));.

我必须用"重置" auto_incrementALTER TABLE managers AUTO_INCREMENT = 1;.

这不奇怪吗?到目前为止,我想,那TRUNCATE= DELETE from managers(在检查和效果方面,因为性能可能不同,但这不是关键).

如何弹出约束警告TRUNCATE而不是"全部删除"?

mysql truncate constraints phpmyadmin sql-delete

5
推荐指数
1
解决办法
3435
查看次数