الخلية "إنشاء الجدول إن لم يكن موجودا" -> خطأ 1050
-
22-07-2019 - |
سؤال
باستخدام الأمر:
CREATE TABLE IF NOT EXISTS `test`.`t1` (
`col` VARCHAR(16) NOT NULL
) ENGINE=MEMORY;
تشغيل هذا مرتين في MySQL Query Browser النتائج في:
الجدول 't1' بالفعل خطأ 1050
أنا أعتقد أن إنشاء الجدول "إن لم يكن موجودا" لن رمي الأخطاء.أنا في عداد المفقودين شيء أو هذا الخلل ؟ أنا تشغيل الإصدار 5.1.شكرا
المحلول
يعمل بشكل جيد بالنسبة لي في 5.0.27
أنا مجرد الحصول على تحذير (خطأ) أن الجدول موجود ،
نصائح أخرى
كما سبق ذكره, هذا تحذير وليس خطأ ، ولكن (إن مثلي) تريد الأشياء تشغيل دون تحذيرات ، يمكنك تعطيل هذا التحذير ، ثم إعادة تمكين ذلك مرة أخرى عند الانتهاء.
SET sql_notes = 0; -- Temporarily disable the "Table already exists" warning
CREATE TABLE IF NOT EXISTS ...
SET sql_notes = 1; -- And then re-enable the warning again
يمكنك استخدام الاستعلام التالي لإنشاء جدول معين من قاعدة البيانات في الخلية.
create database if not exists `test`;
USE `test`;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
/*Table structure for table `test` */
CREATE TABLE IF NOT EXISTS `tblsample` (
`id` int(11) NOT NULL auto_increment,
`recid` int(11) NOT NULL default '0',
`cvfilename` varchar(250) NOT NULL default '',
`cvpagenumber` int(11) NULL,
`cilineno` int(11) NULL,
`batchname` varchar(100) NOT NULL default '',
`type` varchar(20) NOT NULL default '',
`data` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
);
لدي حل مشكلة التي قد تنطبق عليك.قاعدة البيانات الخاصة بي في الدولة حيث DROP TABLE
فشلت لأنها لم تجد الجدول...ولكن CREATE TABLE
كما فشلت لأن الخلية الفكر الطاولة موجودة.(هذه الحالة يمكن بسهولة الفوضى مع الخاص بك إذا لم يوجد شرط).
لقد وجدت في نهاية المطاف هذا الحل:
sudo mysqladmin flush-tables
بالنسبة لي, دون sudo
, لدي الخطأ التالية:
mysqladmin: refresh failed; error: 'Access denied; you need the RELOAD privilege for this operation'
(يعمل على نظام التشغيل OS X 10.6)
create database if not exists `test`;
USE `test`;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
/*Table structure for table `test` */
***CREATE TABLE IF NOT EXISTS `tblsample` (
`id` int(11) NOT NULL auto_increment,
`recid` int(11) NOT NULL default '0',
`cvfilename` varchar(250) NOT NULL default '',
`cvpagenumber` int(11) NULL,
`cilineno` int(11) NULL,
`batchname` varchar(100) NOT NULL default '',
`type` varchar(20) NOT NULL default '',
`data` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
);***
كان لي مشكلة مماثلة كما @CraigWalker على دبيان:قاعدة البيانات الخاصة بي في الدولة حيث DROP TABLE
فشلت لأنها لم تجد الجدول ، ولكن CREATE TABLE
كما فشلت لأن الخلية الفكر الطاولة لا تزال موجودة.حتى طاولة مكسورة لا تزال موجودة في مكان ما على الرغم من أنه لم يكن هناك عندما نظرت بريس.
أنا خلقت هذه الدولة مجرد نسخ المجلد بأكمله الذي يحتوي على قاعدة البيانات مع بعض MyISAM
وبعض InnoDB
الجداول
cp -a /var/lib/mysql/sometable /var/lib/mysql/test
(لا ينصح بذلك!)
جميع الجداول ك InnoDB حيث لا مرئية في قاعدة البيانات الجديدة test
في phpmyadmin.
sudo mysqladmin flush-tables
لم يساعدنا أيضا.
الحل: واضطررت الى حذف اختبار جديد مع قاعدة البيانات drop database test
ثم نسخ مع mysqldump
بدلا من ذلك:
mysqldump somedatabase -u username -p -r export.sql
mysql test -u username -p < export.sql
إذا كان أي شخص الحصول على هذا الخطأ بعد بريس التصدير باستخدام خيارات مخصصة مضيفا "قطرة" جداول بيانات مسح هذا الحق.
إنشاء اتصال الخلية مع المعلمة التالية."'raise_on_warnings':كاذبة".فإنه سيتم تجاهل هذا التحذير.على سبيل المثال
config = {'user': 'user','password': 'passwd','host': 'localhost','database': 'db', 'raise_on_warnings': False,}
cnx = mysql.connector.connect(**config)