微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

#1451 - 无法删除或更新父行:外键约束无法从多个表中删除记录

如何解决#1451 - 无法删除或更新父行:外键约束无法从多个表中删除记录

我正在尝试从 MysqL 中的多个表中删除记录,但我一直收到错误消息 #1451 - Cannot delete or update a parent row: a foreign key constraint fails (bankdb.accounts,CONSTRAINT fk_ACCOUNTS_Users1 FOREIGN KEY (Users_USER_ID) REFERENCES users (USER_ID))

这是我要运行的 sql 语句:

-- MysqL dump 10.13  distrib 8.0.23,for Win64 (x86_64)
--
-- Host: 127.0.0.1    Database: bankdb
-- ------------------------------------------------------
-- Server version   8.0.23

/*!40101 SET @OLD_CHaraCTER_SET_CLIENT=@@CHaraCTER_SET_CLIENT */;
/*!40101 SET @OLD_CHaraCTER_SET_RESULTS=@@CHaraCTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_sql_mode=@@sql_mode,sql_mode='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_sql_NOTES=@@sql_NOTES,sql_NOTES=0 */;

--
-- Table structure for table `account_type`
--

DROP TABLE IF EXISTS `account_type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `account_type` (
  `ACCOUNT_TYPE_ID` int NOT NULL AUTO_INCREMENT,`CHECKING` varchar(45) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`SAVING` varchar(45) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`ACCOUNT_TYPE_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `account_type`
--

LOCK TABLES `account_type` WRITE;
/*!40000 ALTER TABLE `account_type` disABLE KEYS */;
INSERT INTO `account_type` VALUES (1,'4',' '),(3,NULL),(4,(5,'3',(6,(7,NULL,'4'),(8,(9,(10,(11,(12,(13,(14,(15,(16,(17,(18,(19,(20,(21,(22,(23,(24,(25,(26,(27,(28,(29,(30,(31,(32,(33,(34,(35,(36,(37,(38,(39,(40,(41,(42,(43,(44,(45,(46,(47,(48,(49,(50,(51,(52,(53,(54,(55,(56,(57,(58,(59,(60,(61,(62,(63,(64,(65,(66,(67,(68,(69,(70,(71,(72,(73,(75,NULL);
/*!40000 ALTER TABLE `account_type` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `accounts`
--

DROP TABLE IF EXISTS `accounts`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `accounts` (
  `ACCOUNTS_ID` int NOT NULL AUTO_INCREMENT,`ACCOUNT_BALANCE` float NOT NULL DEFAULT '0',`Users_USER_ID` int NOT NULL,`Account_TYPE_ACCOUNT_TYPE_ID` int NOT NULL,PRIMARY KEY (`ACCOUNTS_ID`),KEY `fk_ACCOUNTS_Users1_idx` (`Users_USER_ID`),KEY `fk_ACCOUNTS_Account_TYPE1_idx` (`Account_TYPE_ACCOUNT_TYPE_ID`),CONSTRAINT `fk_ACCOUNTS_Account_TYPE1` FOREIGN KEY (`Account_TYPE_ACCOUNT_TYPE_ID`) REFERENCES `account_type` (`ACCOUNT_TYPE_ID`),CONSTRAINT `fk_ACCOUNTS_Users1` FOREIGN KEY (`Users_USER_ID`) REFERENCES `users` (`USER_ID`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `accounts`
--

LOCK TABLES `accounts` WRITE;
/*!40000 ALTER TABLE `accounts` disABLE KEYS */;
INSERT INTO `accounts` VALUES (2,10,8),5,9),15,29),20,63),64),21,65),66),22,67),10.5,68),23,69),70),71),24,72),73),75);
/*!40000 ALTER TABLE `accounts` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `transaction_type`
--

DROP TABLE IF EXISTS `transaction_type`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `transaction_type` (
  `TRANSACTION_TYPE_ID` int NOT NULL AUTO_INCREMENT,`TRANSFERS` float DEFAULT NULL,`DEPOSITS` float DEFAULT NULL,`WITHDRAWALS` float DEFAULT NULL,PRIMARY KEY (`TRANSACTION_TYPE_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `transaction_type`
--

LOCK TABLES `transaction_type` WRITE;
/*!40000 ALTER TABLE `transaction_type` disABLE KEYS */;
INSERT INTO `transaction_type` VALUES (1,NULL);
/*!40000 ALTER TABLE `transaction_type` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `transactions`
--

DROP TABLE IF EXISTS `transactions`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `transactions` (
  `TRANSACTIONS_ID` int NOT NULL AUTO_INCREMENT,`AMOUNT_OF_TRANSACTION` float NOT NULL,`TRANSACTION_APPRoval` varchar(45) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`TRANSACTION_FROM` varchar(45) NOT NULL,`TRANSACTION_TO` varchar(45) NOT NULL,`ACCOUNTS_ACCOUNTS_ID` int NOT NULL,`TRANSACTION_TYPE_TRANSACTION_TYPE_ID` int NOT NULL,PRIMARY KEY (`TRANSACTIONS_ID`),KEY `fk_TRANSACTIONS_ACCOUNTS1_idx` (`ACCOUNTS_ACCOUNTS_ID`),KEY `fk_TRANSACTIONS_TRANSACTION_TYPE1_idx` (`TRANSACTION_TYPE_TRANSACTION_TYPE_ID`),CONSTRAINT `fk_TRANSACTIONS_ACCOUNTS1` FOREIGN KEY (`ACCOUNTS_ACCOUNTS_ID`) REFERENCES `accounts` (`ACCOUNTS_ID`) ON DELETE CASCADE,CONSTRAINT `fk_TRANSACTIONS_TRANSACTION_TYPE1` FOREIGN KEY (`TRANSACTION_TYPE_TRANSACTION_TYPE_ID`) REFERENCES `transaction_type` (`TRANSACTION_TYPE_ID`) ON DELETE CASCADE
  
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `transactions`
--

LOCK TABLES `transactions` WRITE;
/*!40000 ALTER TABLE `transactions` disABLE KEYS */;
INSERT INTO `transactions` VALUES (1,26,'Yes','Bob','John',1),(2,'No','family','john',1);
/*!40000 ALTER TABLE `transactions` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `users`
--

DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `users` (
  `USER_ID` int NOT NULL AUTO_INCREMENT,`USER_TYPE_USER_TYPE_ID` int NOT NULL,`USER_NAME` varchar(45) NOT NULL,`PASSWORD` varchar(128) CHaraCTER SET utf8 COLLATE utf8_general_ci NOT NULL,`FirsT_NAME` varchar(45) NOT NULL,`LAST_NAME` varchar(45) NOT NULL,`EMAIL_ADDRESS` varchar(45) NOT NULL,PRIMARY KEY (`USER_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `users`
--

LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` disABLE KEYS */;
INSERT INTO `users` VALUES (1,1,'a','123','ab','bc','a@a.com'),2,'User','First','last','e@gmail.com'),'Names','hi','man','132@gmail.com'),'dafd','fie','name','ere@gmail.com'),'A13','mane','er123e@gmail.com'),'dafds','re','we','fdd@gmail.com'),'a132','first2','e2@gmail.com'),'asdfads','asd','as','aew@gmail.com'),'fdsafa','$2y$10$HZJ2uYXej3KVaOLsoEVdHengH7GUMo1mUkfWP/4sLUENJlff5ad/i','weew','hadfg@gmail.com'),'kj','$2y$10$8qnYHxYN6YOxHxYDnBfBcez1MtwZg69dwr7JUmkpEK6eWRbYfcpIS','sh','ew','ewrew@gmail.com'),'Hello','$2y$10$KEed.Gy13EFKl/lyqgSR4O9ouLehApMane4bUlRV7bss4K/4P1Qau','my','wee@gmail.com'),'name123','$2y$10$rdPqQQkmuuupN.VKu5m9CeCEpLwHPS6xbXX6x.Zim.KI9P81KHJJu','first ','ead@gmail.com'),'username123','$2y$10$b63fWl3rJexmx8nJx92uve6.SfmMyvy86zTXNjPV1a1wHTL1JM79K','name@gmail.com'),'testing','$2y$10$yyNAWsKf6uWMfi9YyHnkwuLgg1HZ00uEqZ20Lh7t5N1DzhaEBVaEq','test','test@gmail.com'),'kcljlkajsdlkfj','$2y$10$tDO2Mambv0m0j6h2WHH/suBhAZfq71LpJrXq6/NPPtHi86Wy.E4ju','adsf','saadfs','afda@gadfg.com'),'testingname','$2y$10$n9I9wNA2.5mfK7KS2iLOMem5wslgM..zsneTWMr9GJGps9z56dncS','testingname1','testingwer@gmail.com'),'testing1','$2y$10$SYGUX1EbmfKpoTIawPR3QuiPbW5obFju191v0Bc04J89wGv.IdVh2','adsadsfasdf@gmail.com'),'testing123','$2y$10$cl3CheyOnZ8lEjkmn37jwOr/EYMCZJ13cLLbHXfvHYS33ZAu8Zizu','agkjdsladks@kajklsfjkl.com'),'$2y$10$dagA2dgR44KxLB./k7N10OEqXz0Hff5pFd64iFM23zLvFkLgFGiPq','asdfa','adsafsd','hgasdf@gmail.copm'),'dsa','$2y$10$EjnTknPRaDfd8eB6WZVT2O1IuRfFM/Bz8W30gUb3aqbdQ.edbnW8W','asdf','qwe','trtr@mail.com'),'op','$2y$10$SbjY/1z5u75/tZPVFaJ5o.cDC5ABei3ZCbJA08cj1qz3A/yyyt5Mu','asdfadsf','faasd','kkjkk@gmail.com'),'tyt','$2y$10$B4abTovv4yZeXDC3deGOo.V0V9LuNe/z0cKoEHii4TcJcJ7tEEjS6','kljgkl','kljklkl','safdasd@gmail.com'),'kgkg','$2y$10$hUt5vAGXx3acFuCP1Fx.cO0o5z4WDWMNaw/ZV7DV7sv683Ft.6.4G','dslafjk','kljklsaj','kjk@gmail.com'),'admin','$2y$10$3jQzL/e9lSKIf3bONcGL4uvZfwHfV3KbGTOzYSCqwVrFvDwdNjYBe','admin@test.com'),'lkj','$2y$10$a8t.NOSw4PGntahpxOPYOuz31UZq1zLPIJxYklBQg/kzzkcfHaYoa','jk','jk@gmail.com');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET sql_mode=@OLD_sql_mode */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHaraCTER_SET_CLIENT=@OLD_CHaraCTER_SET_CLIENT */;
/*!40101 SET CHaraCTER_SET_RESULTS=@OLD_CHaraCTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET sql_NOTES=@OLD_sql_NOTES */;

-- Dump completed on 2021-04-16  8:58:52

我尝试过 ON DELETE CASCADE,尽管我可能做得不对。我还尝试禁用和启用外键,但也不起作用。任何帮助将不胜感激!

解决方法

我重新创建了您的数据库结构(没有对表 transaction_typeaccount_type 的约束,因为您没有提供表 DDL。 使用您在 accountstransactions 上定义的外键约束(使用 ON DELETE CASCADE),您的数据将从 usersaccounts 和 {{1 }} 用一个简单的

transactions

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。