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 :
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
III. MySQL/MariaDB, un SGBD non relationnel
Effectivement, opération impossible MAIS pour modifier des numéros de factures :
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. Les dangers de l’absence d’un catalogue « système »
IV-A. Disparition des objets de la base
Pas réussi à reproduire !
IV-B. Validation automatique et involontaire des transactions
Pas réussi à reproduire !, 999 n'est pas dans la table.

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.
V. Schéma SQL – MySQL/MariaDB ment !
Pensez à déclarer les FOREIGN KEY
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`))
VI. Calculs faux
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 :
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.
VIII. Limitations sur les collations (norme SQL)
Babel vu depuis SQL-2011 Draft
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.
Concernant votre affirmation qu’il n’y a pas de collation sensible à la largeur de pas (WS) ; je lis le contraire dans la doc :
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
SELECT collation_name FROM information_schema.COLLATIONS
WHERE collation_name LIKE "%nopad%";
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
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
Nom : sauvegarde_wikimedia.png
Affichages : 1103
Taille : 287,6 Ko
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.