MySQL-3.23.21-beta a BerkeleyDB tables

Pavel Janík ml. Pavel na Janik.cz
Úterý Červenec 11 01:10:25 CEST 2000


Zdravím,

zkouším poslední beta verzi MySQL. Vytvořil jsem si tabulku:

mysql> CREATE TABLE t (id INT PRIMARY KEY) TYPE=BDB;
Query OK, 0 rows affected (1.30 sec)

Zobrazím si, zda se jedná opravdu o BerkeleyDB tabulku:

mysql> show table status;
+------+------------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+----------------+---------+
| Name | Type       | Row_format | Rows  | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Create_options | Comment |
+------+------------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+----------------+---------+
| t    | BerkeleyDB | Fixed      | 10000 |              0 |           0 |            NULL |            0 |         0 |           NULL | NULL        | NULL        | NULL       |                |         |
+------+------------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+----------------+---------+
1 row in set (0.01 sec)

mysql> 

Ano, je to BDB tabulka.

Zruším AUTO COMMIT:

mysql> SET AUTOCOMMIT=0;
Query OK, 0 rows affected (0.00 sec)

Začnu transakci:

mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)

Až sem je všechno v nejlepším pořádku. Nyní si spustím druhého klienta a
podívám se, co je v tabulce:

mysql> SELECT * FROM t;
Empty set (0.23 sec)

Ok, nic tam není, co by tam taky mělo být :-)) Zkusím tedy v prvním
klientovi něco přidat:

mysql> INSERT INTO t VALUES(1);
Query OK, 1 row affected (0.09 sec)

Nyní se zkusím podívat v prvním klientovi, co je v tabulce:

mysql> SELECT * FROM t;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.24 sec)

mysql> 

Samozřejmě, i v transakci vidím, co jsem zatím udělal. Copak udělá druhý
klient?

mysql> SELECT * FROM t;

A nic, prostě čeká. Čeká, až první udělá COMMIT nebo ROLLBACK. Opravdu si
takhle vývojáři MySQL představují podporu transakcí? :-( Myslím, že ne, z
čehož plyne, že mi něco uniklo. CO?

Jiné databázové servery korektně zobrazí:

test=# select * from t;
 id 
----
(0 rows)

:-) Nebudu říkat jaký jsem vyzkoušel...
-- 
Pavel Janík ml.
Pavel na Janik.cz
http://www.janik.cz


Další informace o konferenci Databases