Inside a transaction, if we perform a bulk insert (such as LDI) followed by a single insert, we don't see the record inserted by the single insert statement. However, the reverse sequence, i.e. performing a single insert followed by a LDI, inside a transaction works fine.
Here are steps to reproduce (here, data.txt is file containing 2 records: 231\n123):
MariaDB [test]> create table c1 (a int)engine=columnstore;
|
Query OK, 0 rows affected (0.625 sec)
|
|
MariaDB [test]> start transaction;
|
Query OK, 0 rows affected (0.000 sec)
|
|
MariaDB [test]> load data local infile '/home/gagan_goel_mariadb_com/insert-profiling/data.txt' into table c1;
|
Query OK, 2 rows affected (0.241 sec)
|
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
|
|
MariaDB [test]> select * from c1;
|
+------+
|
| a |
|
+------+
|
| 231 |
|
| 123 |
|
+------+
|
2 rows in set (0.065 sec)
|
|
MariaDB [test]> insert into c1 values (100);
|
Query OK, 1 row affected (0.000 sec)
|
|
MariaDB [test]> select * from c1;
|
+------+
|
| a |
|
+------+
|
| 231 |
|
| 123 |
|
+------+
|
2 rows in set (0.030 sec)
|
|
MariaDB [test]> rollback;
|
Query OK, 0 rows affected (0.070 sec)
|
|
MariaDB [test]> select * from c1;
|
Empty set (0.044 sec)
|
|
MariaDB [test]> start transaction;
|
Query OK, 0 rows affected (0.000 sec)
|
|
MariaDB [test]> insert into c1 values (100);
|
Query OK, 1 row affected (0.077 sec)
|
|
MariaDB [test]> select * from c1;
|
+------+
|
| a |
|
+------+
|
| 100 |
|
+------+
|
1 row in set (0.036 sec)
|
|
MariaDB [test]> load data local infile '/home/gagan_goel_mariadb_com/insert-profiling/data.txt' into table c1;
|
Query OK, 2 rows affected (0.087 sec)
|
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
|
|
MariaDB [test]> select * from c1;
|
+------+
|
| a |
|
+------+
|
| 100 |
|
| 231 |
|
| 123 |
|
+------+
|
3 rows in set (0.013 sec)
|
|
MariaDB [test]> rollback;
|
Query OK, 0 rows affected (0.035 sec)
|
|
MariaDB [test]> select * from c1;
|
Empty set (0.012 sec)
|