PolarDB-X est hautement compatible avec le protocole MySQL et la syntaxe SQL. Toutefois, comme il s'agit d'une base de données distribuée, certaines fonctionnalités MySQL se comportent différemment ou ne sont pas prises en charge. Consultez ces limites avant de commencer le développement ou de migrer une application existante.
Limites des identifiants courants
| Identifiant | Longueur maximale | Caractères autorisés |
|---|---|---|
| Base de données | 32 | Lettres majuscules et minuscules, chiffres et traits de soulignement (_) |
| Séquence | 128 | Caractères Unicode |
| Partition | 16 | — |
| Table | 64 | — |
| Colonne | — | — |
| Clé de partition | — | — |
| Vue | — | — |
| Variables | — | — |
| Contrainte | — | — |
Limites d'utilisation des ressources
Ressources logiques
| Ressource | Limite |
|---|---|
| Bases de données par cluster | 32 |
| Tables par base de données | 8 192 |
| Partitions par table | 8 192 |
| Colonnes par table | 1 017 |
| Séquences par base de données | 16 384 |
| Vues par base de données | 8 192 |
| Index globaux par table | 32 |
| Utilisateurs par base de données | 2 048 (nom d'utilisateur : 255 caractères maximum) |
Ressources physiques
| Ressource | Limite par défaut |
|---|---|
| Connexions par nœud de calcul | 20 000 |
| Nœuds de calcul ajoutés simultanément | 99. Pour ajouter plus de nœuds en une seule fois, contactez le support technique Alibaba Cloud. |
| Nœuds de stockage ajoutés simultanément | — |
Limites de la syntaxe SQL
Certaines limites découlent des contraintes architecturales des systèmes distribués. D'autres seront levées dans de futures versions.
Fonctionnalités non prises en charge
PolarDB-X ne prend pas en charge les fonctionnalités MySQL suivantes.
Opérations personnalisées
| Fonctionnalité | Notes |
|---|---|
| Type de données personnalisé | Non pris en charge |
| Déclencheur | Non pris en charge |
DDL
| Instruction | Notes |
|---|---|
CREATE TABLE ... LIKE ... |
Tables partitionnées non prises en charge |
CREATE TABLE ... SELECT ... |
Tables partitionnées non prises en charge |
Opérations MERGE, SPLIT, ADD et DROP sur les tables sous-partitionnées |
Non prises en charge |
Opérations MERGE, SPLIT, ADD et DROP sur les tables d'index partitionnées |
Non prises en charge |
DML
| Instruction | Notes |
|---|---|
STRAIGHT_JOIN |
Non pris en charge |
NATURAL JOIN |
Non pris en charge |
INSERT DELAYED |
Non pris en charge |
Références et opérations sur variables (par exemple, SET @c=1, @d=@c+1; SELECT @c, @d) |
Non prises en charge |
LOAD XML |
Non pris en charge |
DQL
| Instruction | Notes |
|---|---|
Sous-requêtes dans une clause HAVING |
Non prises en charge |
Sous-requêtes dans une clause JOIN ... ON |
Non prises en charge |
Gestion de base de données
| Instruction | Notes |
|---|---|
SHOW WARNINGS |
Combinaison de LIMIT et COUNT non prise en charge |
SHOW ERRORS |
Combinaison de LIMIT et COUNT non prise en charge |
HELP |
Non pris en charge |
Opérateurs
| Opérateur | Notes |
|---|---|
:= |
Non pris en charge |
Fonctions
| Fonction | Notes |
|---|---|
| Fonctions de recherche en texte intégral | Non prises en charge |
| Fonctions XML | Non prises en charge |
| Fonctions pour les identifiants de transaction globale | Non prises en charge |
Types de données
| Type | Notes |
|---|---|
Types de données spatiales (GEOMETRY, LINESTRING) |
Non pris en charge |
| Type de données JSON | Pris en charge, mais inutilisable comme clé de partition |
Mots-clés
| Mot-clé | Notes |
|---|---|
MILLISECOND |
Non pris en charge |
MICROSECOND |
Non pris en charge |
Fonctionnalités prises en charge
Les opérations personnalisées et instructions DDL suivantes sont prises en charge :
| Fonctionnalité | Notes |
|---|---|
| Fonction définie par l'utilisateur | Prise en charge |
| Procédure stockée | Prise en charge |
| Curseur | Pris en charge |
| Vue | Prise en charge |
CREATE TABLE ... Generated Column ... |
Pris en charge |
RENAME TABLE |
Pris en charge |
ALTER TABLE |
Pris en charge |
| Clé étrangère | Prise en charge |
| Sous-requête comme opérande scalaire | Prise en charge |
Différences de comportement par rapport à MySQL
Les instructions suivantes sont prises en charge, mais leur comportement diffère de celui de MySQL standard.
UPDATE avec ON UPDATE CURRENT_TIMESTAMP
Dans PolarDB-X, toute instruction UPDATE logique actualise l'horodatage d'une colonne dotée de l'attribut ON UPDATE CURRENT_TIMESTAMP, même si aucune autre colonne n'a été modifiée. Dans MySQL, cette mise à jour ne s'effectue que si au moins une autre colonne change de valeur.
Exemple
-- Create a table with an ON UPDATE CURRENT_TIMESTAMP column
CREATE TABLE t (
id INT PRIMARY KEY,
name VARCHAR(50),
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO t VALUES (1, 'Alice', NOW());
-- Update with no actual data change
UPDATE t SET name = 'Alice' WHERE id = 1;
-- PolarDB-X: updated_at is refreshed to CURRENT_TIMESTAMP
-- MySQL: updated_at is NOT refreshed (no data changed)
SELECT id, name, updated_at FROM t WHERE id = 1;
Si la logique de votre application repose sur le comportement de MySQL qui laisse updated_at inchangé en l'absence de modification des données, adaptez vos requêtes ou votre code applicatif avant de migrer vers PolarDB-X.