Environment:MariaDB Columns LAST_INSERT_ID() alternative
OS: CentOS 7,2
DB-Server: 10.1.23-MariaDB Columns 1.0.9-1
2 Testdatenbanken, eine InnoDB und ein Columns:
CREATE TABLE `test_innodb` (
`ctlid` bigint(20) NOT NULL AUTO_INCREMENT,
`rfid` varchar(100) DEFAULT NULL,
PRIMARY KEY (`ctlid`)
) ENGINE=InnoDB
CREATE TABLE `test_cs` (
`ctlid` bigint(20) DEFAULT NULL COMMENT 'autoincrement=1',
`rfid` varchar(100) DEFAULT NULL
) ENGINE=Columnstore
Das Problem:
Ich betreiben mehrere Einsätze in die InnoDB-Tabelle:
insert into test_innodb (rfid) values ('a1');
...
insert into test_innodb (rfid) values ('aX');
Wenn ich will die letzte Eingabe id ich diese laufen bekommen:
select last_insert_id();
und das Ergebnis richtig den letzten ctlid Wert zeigt, der hat während der aktuellen Sitzung eingefügt wurde, unabhängig davon, ob andere gleichzeitige Sitzungen vorhanden sind, die Einfügungen in diese InnoDB-Tabelle ausführen und die Erstellung zusätzlicher ctll-Werte auslösen. So weit so gut ..
Jetzt führe ich mehrere Einsätze in die Columns Tabelle:
insert into test_cs (rfid) values ('a1');
...
insert into test_cs (rfid) values ('aX');
und ich möchte das gleiche Verhalten wie das oben erreichen, aber leider wird dies durch Columns ignoriert:
select last_insert_id();
habe ich folgende Alternativen:
-- this will return the next value
select nextvalue from calpontsys.syscolumn cs where cs.schema='my_test_database' and cs.tablename='test_cs' and cs.columnname='ctlid';
- this will return the last inserted id
select callastinsertid('test_cs');
aber beide Anzeige Eine wichtige Einschränkung: Wenn andere gleichzeitige Sitzungen Einfügungen ausführen, werden die Ergebnisse der beiden obigen Abfragen durch die Autoincrements-Werte beeinflusst, die von diesen Einfügungen generiert werden. Grundsätzlich bekomme ich vielleicht nicht die erwartete letzte eingefügte ID, aber eine größere, falls andere Sessions Autoincrement-Werte parallel erzeugen.
Ich habe auch versucht zu:
den Tisch
den Einsatz
den letzt Einsatz-ID mit
select callastinsertid('test_cs')
die Tabelle durchführen sperren entsperren danach
Aber es sieht aus wie Sperren Tabellen wird nicht von Columns unterstützt.
Gibt es eine Möglichkeit, eine konsistente zuletzt eingefügte ID (pro Sitzung) mit Columns zu erreichen?
Unser Plan ist, einige unserer Funktionen von MariaDB/MySQL zu Columns wechseln, aber die Begrenzung oben ist ziemlich Blockierung.
Es scheint ein Fehler zu sein. Es hat auch eine offene jira https://jira.mariadb.org/browse/MCOL-780 – Hackerman
Die einzige "Lösung" ist etwas wie 'select ctlid aus test_cs Auftrag von ctlid desc Grenze 1' – Hackerman
Leider gibt es keine Lösung noch. Ich bekomme nur eine klare Antwort auf einem anderen Forum: https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!topic/mariadb-columnstore/u9L8YT9lh5c –