customers.csvMySQL tablo ( customers) içine CSV dosyasını ( ) ithal PHP-script üzerinde çalışıyorum .
CSV dosyası içeriğini mysql tablosuna eklemeden önce ilk olarak orijinal customerstabloyu yedekliyorum .
Ben bir mysql işlem (CSV ortasında bir yerde bozuk olduğu durumlarda ve ithalat atomik olduğundan emin olmak için) tüm ithalat işlemi (yedekleme dahil) sarma.
Sorun ROLLBACK hemen INSERT INTOifadeden sonra çağırırken çalışmıyor gibi görünüyor : phpMyAdmin üzerinden veritabanı kontrol ederken yeni oluşturulan tablo görebilirsiniz ve ROWS İÇİ hala geri roollback sonra mevcut .
İşlemlerin günlüğü:
[2015-01-19 14:08:11] DEBUG: "START TRANSACTION" [] []
[2015-01-19 14:08:11] DEBUG: SHOW TABLES LIKE :table_name; [] []
[2015-01-19 14:08:28] DEBUG: CREATE TABLE `customers__20150119_14_08_20` LIKE `customers` [] []
[2015-01-19 14:08:37] DEBUG: INSERT INTO `customers__20150119_14_08_20` SELECT * FROM `customers` [] []
[2015-01-19 14:08:50] DEBUG: "ROLLBACK" [] []
Neden acaba ROLLBACKarandığını merak ediyorum , işlem iptal edilmedi. Bunun CREATE TABLEdoğada işlemsel olmadığını ve geri alınamayacağını anlıyorum . Ancak, INSERT INTOsatır ekleme (şema tanımlamama) ile ilgili olduğu için, aslında işlemsel olacağından ve ROLLBACK'ten sonra boş hedef tabloyla bırakılacağımı varsayıyordum . Neden böyle değil?
Ve işte çıktı SHOW CREATE TABLE customers(benim masam InnoDb):
CREATE TABLE `customers` (
`Code` varchar(32) NOT NULL,
`Name` varchar(128) DEFAULT NULL,
`Price` varchar(128) DEFAULT NULL,
PRIMARY KEY (`Code`),
KEY `Price` (`Price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
ve tasarım tablosu için çıktı:
CREATE TABLE `customers__20150119_14_08_20` (
`Code` varchar(32) NOT NULL,
`Name` varchar(128) DEFAULT NULL,
`Price` varchar(128) DEFAULT NULL,
PRIMARY KEY (`Code`),
KEY `Price` (`Price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
create table, sonrastart transaction, insert, rollback?