Örneğin, C1 value = 'clean'
sütun ile bir satır var ve MyISAM ve InnoDB'de tek mysql ifadeleri atomik midir?
update T1 set C1 = 'dirty' where Id = 1
xzxx xzx
mysql_affected_rows()
, bir istemci için
1
ve diğeri için
0
olur?
Örneğin, C1 value = 'clean'
sütun ile bir satır var ve MyISAM ve InnoDB'de tek mysql ifadeleri atomik midir?
update T1 set C1 = 'dirty' where Id = 1
xzxx xzx
mysql_affected_rows()
, bir istemci için
1
ve diğeri için
0
olur?
Evet ve Hayır :-) Her iki durumda da
, access is serialised aynı satır isabet beri (eğer InnoDb gibi bir işlem motoru kullanıyorsanız varsayarak), bu yüzden birbirine engel olmaz. Başka bir deyişle, ifadeleri atomiktir. Bununla birlikte, etkilenen satır sayısı, bağlantıyı açtığınızda yapılandırma ayarlarınıza bağlıdır. Üste | page for mysql_affected_rows() bu (benim kalın) demek etti: GÜNCELLEME ifadeleri için
, varsayılan olarak etkilenen-satırlar değeri aslında değişti satır sayısıdır. Mysqld'ye bağlanırken mysql_real_connect() işlevine CLIENT_FOUND_ROWS işaretini belirtirseniz, etkilenen satırlar değeri satır sayısıdır "bulundu"; WHERE yan tümcesi ile eşleşir.
Ve the mysql_real_connect page den
:CLIENT_FOUND_ROWS: sayısı değil sayısı satır değişti, (eşleme) satırları bulundu dönün. veri , yalnızca ne satırları değiştirilir olmadığını
UPDATE T1 SET C1 = 'dirty' WHERE id = 1
ile ilgisi ilgisi var:
CLIENT_FOUND_ROWS
ile ne açısından Yani
etkilenen satırlar için, yapılandırılmış olan eşleşti. Bu, her iki sorgu için de 1 olur. Öte yandan
, (zaten 'kirli' ile doldurulur beri) ve sıfır satır sayısını olurduCLIENT_FOUND_ROWS
değil seti, ikinci sorgu aslında satır değiştirerek olacaktır eğer. Eğer InnoDb gibi bir işlem depolama motoru kullanmak durumunda UPDATE T1 SET C1 = 'dirty' WHERE id = 1 AND C1 <> 'dirty'
Tek deyim güncellemelerinin MyIASM için atomik olmadığını söylemek mi istiyorsunuz? – Pacerier
Hızlı bir google, bir iş parçacığı veya sorguyu asla öldürmediğiniz sürece MyISAM'ın çoğunlukla atomik olduğunu gösterir. http://bugs.mysql.com/bug.php?id=51193 –
@sanmai: http://dev.mysql.com/doc/refman/5.5/en/innodb-locks-set.html adresinden: Kilitleme Okumak, bir GÜNCELLEME veya bir DELETE genellikle SQL deyiminin işlenmesinde taranan her indeks kaydına kayıt kilitler. – paxdiablo
MySQL ASİT uyumlu olup: bakılmaksızın o ayarda (sadece gösteren değişiklikler) içinde aynı davranışı isteseydim
, gibi bir şey kullanabilirsiniz. Atomikliğe ihtiyacınız varsa, ancak InnoDB tablolarını kullanmak istemiyorsanız, [bkz. MySQL kilit tabloları] (http://dev.mysql.com/doc/refman/5.1/en/lock-tables.)
html) – bobobobo