日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))...

發布時間:2023/12/6 数据库 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

曾遇到創建數據表報錯問題,報錯如下:

ERROR 1005 (HY000) at line 18: Can't create table 'db1.t2' (errno: 121)

通過日志查看有一條記錄

InnoDB: Error: table `db1`.`t2` already exists in InnoDB internal

可見要創建的這個表已經存在,導致創建同名數據表報錯,但是從數據庫目錄上查看確實沒有這個表文件。

原因分析

事實上,導致這種情況是由于刪除數據表時直接刪除了源文件,而沒有通過SQL命令來刪除。這種錯誤的方法對MyISAM引擎的數據庫有時候是管用的,但是對于InnoDB引擎的數據庫則是一定不管用的。

因為對于InnoDB引擎的數據庫,當創建一個表時,會在數據庫目錄中創建一個.frm格式(如t2.frm)的表結構文件,同時,內部地,InnoDB會為這個表向自己的數據目錄添加一個條目。當把源文件(t2.frm)直接刪除時,InnoDB內部數據目錄中并沒有刪除對應的條目。

這時,你運行show tables,由于該命令是通過表結構文件檢索的,自然查看不到這個表。

如果嘗試重新導入數據,由于.sql文件中的語句寫的是"drop table if exists 't2'",最終也會因查不到表而不去執行drop命令。

處理方法

1. 對于MyISAM引擎的數據庫

如果之前刪的表文件是空表文件,則可以直接create創建(這種情況不會出現上面的報錯;如果之前刪的是有數據的表文件,則直接創建是不管用的,需要先執行"drop table 表名",然后再重新創建該表即可。

2. 對于InnoDB引擎的數據庫

可以先嘗試執行"drop table 表名",然后再重新創建該表;如果仍有問題,則需要創建一個臨時數據庫,在臨時數據庫中創建一個同名數據表,然后將該表文件(只有一個.frm文件)復制到當前的數據庫中,賦予mysql權限,然后再執行"drop table 表名",再重新創建該表即可。

喜歡 (0)or分享 (0)

總結

以上是生活随笔為你收集整理的mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。