Ich benutze MySQL 5.6 mit innodb. Lassen Sie uns sagen, dass wir die folgenden beiden Tabellen:Behält SELECT die Konsistenz bei gleichzeitigem UPDATE oder INSERT?
create table order_head (
id int not null,
version int not null,
order_detail_count int not null,
primary key (id)
);
create table order_detail (
id int not null,
product_id int not null,
qty int not null,
order_head_id int not null,
primary key (id),
foreign key (order_head_id)
references order_head (id)
);
eine Situation Bedenken Sie, dass viele gleichzeitige INSERT und UPDATE für beide zwei Tabellen die ganze Zeit ausgeführt werden. Die Anwendung, die diese Transaktionen ausführt, ist mit optimistischem Sperren gut entworfen, so dass gleichzeitige Ausführungen keine inkonsistenten Daten machen.
Unter dieser Situation habe ich eine Besorgnis über die folgende Abfrage ausgeben:
SELECT
*
FROM
order_head h
JOIN
order_detail d ON (h.id = d.order_head_id);
Enthält diese Abfrage immer dafür sorgen, dass es konsistente Ergebnisse angezeigt werden kann? Mit anderen Worten, vermischt diese Abfrage niemals Daten mehrerer unterschiedlicher Transaktionen? Zum Beispiel erwarte ich nicht inkonsistente Ergebnisse wie die Anzahl der Datensätze ist 4
, während order_head.order_detail_count
ist 3
.
Ich denke, ich habe kein gutes Verständnis von Transaktionen, so dass alle Hinweise auf gute Referenzen (z. B. Bücher über Transaktionen) auch sehr geschätzt werden.