customers.csv
MySQL 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 customers
tabloyu 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 INTO
ifadeden 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 ROLLBACK
arandığını merak ediyorum , işlem iptal edilmedi. Bunun CREATE TABLE
doğada işlemsel olmadığını ve geri alınamayacağını anlıyorum . Ancak, INSERT INTO
satı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
?