I. L’auteur
Christophe Bresso, Funngo, humble bricoleur
II. Introduction
Cher M. Brouard,
Je viens de lire avec intérêt votre "tutoriel" sur MariaDB qui ressemble quand même plutôt à une satire qu'à un tuto.
Passons sur l'origine des noms (MySQL, MariaDB, MaxScale), et prenons le temps de relever les erreurs ou omissions (volontaires ?) que j'ai pu trouver à quasiment tous les paragraphes...
pour information :
III. MySQL/MariaDB, un SGBD non relationnel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 -------------- SELECT VERSION() -------------- +----------------------------------------+ | VERSION() | +------------------------------------------------+ | 10.4.12-MariaDB-1:10.4.12+maria~bionic | +------------------------------------------------+ 1 row in set (0.000 sec) sur : lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.4 LTS Release: 18.04 Codename: bionic
Effectivement, opération impossible MAIS pour modifier des numéros de factures :
IV. Les dangers de l’absence d’un catalogue « système »
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DROP UNIQUE INDEX C; UPDATE T SET C = C + 1; ALTER TABLE T MODIFY C INT UNIQUE;IV-A. Disparition des objets de la basePas réussi à reproduire !IV-B. Validation automatique et involontaire des transactionsPas réussi à reproduire !, 999 n'est pas dans la table.
V. Schéma SQL – MySQL/MariaDB ment !autocommit
By default, MariaDB runs with autocommit mode enabled. This means that as soon as you execute a statement that updates (modifies) a table, MariaDB stores the update on disk to make it permanent. To disable autocommit mode, use the following statement:
SET autocommit=0;
After disabling autocommit mode by setting the autocommit variable to zero, changes to transaction-safe tables (such as those for InnoDB or NDBCLUSTER) are not made permanent immediately. You must use COMMIT to store your changes to disk or ROLLBACK to ignore the changes.
To disable autocommit mode for a single series of statements, use the START TRANSACTION statement.
DDL Statements
DDL statements (CREATE, ALTER, DROP) and administrative statements (FLUSH, RESET, OPTIMIZE, ANALYZE, CHECK, REPAIR, CACHE INDEX), and LOAD DATA INFILE, cause an implicit COMMIT and start a new transaction. An exception to this rule are the DDL that operate on temporary tables: you can CREATE, ALTER and DROP them without causing any COMMIT, but those actions cannot be rolled back. This means that if you call ROLLBACK, the temporary tables you created in the transaction will remain, while the rest of the transaction will be rolled back.
Transactions cannot be used in Stored Functions or Triggers. In Stored Procedures and Events BEGIN is not allowed, so you should use START TRANSACTION instead.
A transaction acquires a metadata lock on every table it accesses to prevent other connections from altering their structure. The lock is released at the end of the transaction. This happens even with non-transactional storage engines (like MEMORY or CONNECT), so it makes sense to use transactions with non-transactional tables.
Pensez à déclarer les FOREIGN KEY
VI. Calculs faux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 -------------- CREATE TABLE toto.T_FAC (FAC_ID INT PRIMARY KEY, CLI_ID INT NOT NULL, CONSTRAINT `num_client` FOREIGN KEY (CLI_ID) REFERENCES test.T_CLI (CLI_ID)) -------------- Query OK, 0 rows affected (0.020 sec) MariaDB [(none)]> INSERT INTO toto.T_FAC VALUES (1, 1); -------------- INSERT INTO toto.T_FAC VALUES (1, 1) -------------- ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`toto`.`T_FAC`, CONSTRAINT `num_client` FOREIGN KEY (`CLI_ID`) REFERENCES `test`.`T_CLI` (`CLI_ID`))
Passons aux Mathématiques. Toute fonction existe sur un ensemble de définition. La première chose à faire ce serait peut-être de vérifier que la valeur appartient à cet ensemble; non ?
Après vous dites que même en mode strict, MariaDb ne vous dit rien. Je n'ai pas ce résultat !
---------------
SELECT 1/0
---------------
+------------+
| 1/0 |
+------------+
| NULL |
+------------+
1 row in set, 1 warning (0.000 sec)
Pour la division entière, MariaDB utilise DIV en lieu et place du / de la norme SQL. C'est peut-être plus respectueux de la norme mathématique.
--------------
SELECT 3 div 2
--------------
+---------+
| 3 div 2 |
+---------+
| 1 |
+---------+
1 row in set (0.000 sec)
VII. Statistiques fausses
MariaDB est configurée, par défaut, pour des gens sachant questionner une base...
Sinon :
VIII. Limitations sur les collations (norme SQL)You can use any of the grouping functions in your select expression. Their values will be calculated based on all the rows that have been grouped together for each result row. If you select a non-grouped column or a value computed from a non-grouped column, it is undefined which row the returned value is taken from. This is not permitted if the ONLY_FULL_GROUP_BY SQL_MODE is used.
ONLY_FULL_GROUP_BY
For SELECT ... GROUP BY queries, disallow SELECTing columns which are not referred to in the GROUP BY clause, unless they are passed to an aggregate function like COUNT() or MAX(). Produce a 1055 error.
Babel vu depuis SQL-2011 Draft
Concernant votre affirmation qu’il n’y a pas de collation sensible à la largeur de pas (WS) ; je lis le contraire dans la doc :A collation is defined by [ISO14651] as “a process by which two strings are determined to be in exactly one of the relationships of less than, greater than, or equal to one another”. Each collation known in an SQL-environment is applicable to one or more character sets, and for each character set, one or more collations are applicable to it, one of which is associated with it as its character set collation.
Je ne vois pas où MariaDB ne respecte pas la norme. Il n’y a certes que 322 (et pas 332 comme vous l’écrivez) collations mais peut-être que MS va offrir quelques collations à Maria comme Google l’a fait avec son encryption pour le tablespace.
Until MariaDB 10.2, all collations were of type PADSPACE. From MariaDB 10.2, 88 new NO PAD collations are available. NO PAD collations regard trailing spaces as normal characters. You can get a list of all of these by querying the Information Schema COLLATIONS Table as follows:Ce qui nous amène à 556 au sens MS. Et si vous en manquez pour des requêtes spécifiques rien ne vous empêche d’en créer vous-même https://dev.mysql.com/doc/refman/8.0...collation.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT collation_name FROM information_schema.COLLATIONS WHERE collation_name LIKE "%nopad%";
IX. UTF8 et problématiques d’indexation
Qui vous oblige à tout encoder en UTF-8 ? Les collations peuvent se définir au niveau de chaque colonne.
X. Sauvegarde non consistante
Une remarque en passant : Il y a bien longtemps que l’on ne confond plus logiciel libre et Freeware
XI. Un chiffrement passoire
https://mariadb.com/kb/en/data-at-re...tion-overview/
XII. stockage de documents électroniques
Est-ce de cela https://mariadb.com/kb/en/introducti...onnect-engine/ dont vous parlez comme inexistant*? Si j’ai bien compris, seul IBM DB2 respecte la norme SQL/MED, tous les autres, SQL Server compris, l’ont accommodée à leur sauce…
XIII. Correction des bogues, XIV. Vulnérabilités
Comparons ce qui peut se comparer !!! Quel rapport existe-t-il entre une communauté gérant un logiciel open source et une organisation passant des accords avec les autorités gouvernementales américaines pour permettre le bon fonctionnement du programme de surveillance PRISM (http://www.guardian.co.uk/world/2013...tion-user-data). Et vous êtes certain que SQL Server ne joue pas le jeu ? Je ne prétends pas quand même qu’il n'y ait pas quelques tentatives d’injecter des lignes de code malveillant dans de l’open source mais il est quand même plus simple de vérifier 210 Mo de code que 7720…
XV. Performances
Si quelqu’un a un benchmark, je suis preneur. Le lien dans le tutoriel renvoie sur une entreprise qui fait dans le big Data et les cloud solutions…
XVI. Conclusion
Il y a beaucoup trop d’omissions dans ce tutoriel pour en valider la conclusion. Juste une dernière remarque, le 5ème plus gros site au monde fonctionne avec MariaDB, le 6éme avec PostgreSQL, le 3éme sur MySQL. Quant au premier, aujourd'hui, plusieurs bases de données modernes (y compris YugaByte DB) ont donné vie à la conception de Google Spanner, entièrement en open source.
XVII. Remerciements
Je remercie M. Brouard qui, grâce à sa satire, m’a amené à approfondir la lecture de la doc de MariaDB et MySQL. Je remercie aussi et surtout toute la communauté du monde libre qui a bien compris que partager n’est pas perdre… bien au contraire.
Partager