Tous les produits
Search
Centre de documentation

AnalyticDB:CREATE VIEW

Dernière mise à jour :Sep 17, 2026

Une vue est une table virtuelle construite à partir du résultat d'une requête sur une ou plusieurs tables. Elle ne stocke pas de données réelles. Les vues simplifient les requêtes complexes et renforcent la sécurité des données. Cette rubrique explique comment créer une vue à l'aide de l'instruction CREATE VIEW.

Remarques d'utilisation

AnalyticDB for MySQL adopte un comportement compatible avec celui des vues MySQL, comme suit :

  • Versions antérieures à 3.1.9.0

    Les clusters AnalyticDB for MySQL ne prennent pas en charge le comportement par défaut de MySQL. Après l'ajout ou la suppression de colonnes dans une vue, l'interrogation de cette vue à l'aide de SELECT * FROM <view_name>; produit un comportement différent de celui de MySQL. Le système détecte une incohérence dans le nombre de colonnes et considère que la vue n'est plus disponible. Dans ce cas, l'erreur suivante est renvoyée : View '<view_name>' is stale; it must be re-created.

  • V3.1.9.0 et versions ultérieures

    Les clusters AnalyticDB for MySQL prennent en charge le comportement par défaut de MySQL. Lors de la création d'une vue, le cluster développe l'astérisque * présent dans l'instruction SQL en colonnes explicites avant de stocker ladite instruction. Par la suite, l'ajout ou la suppression de colonnes n'affecte plus la vue.

Nous vous recommandons d'utiliser un cluster exécutant la version V3.1.9.0 ou ultérieure pour créer des vues. Cela garantit la compatibilité avec le comportement par défaut de MySQL et évite les sémantiques inattendues ainsi que les erreurs provoquées par l'utilisation de * dans les vues.

Remarque

Pour afficher la version mineure d'un cluster Data Lakehouse Edition, exécutez SELECT adb_version();. Pour mettre à niveau la version mineure, contactez le support technique.

Pour les clusters AnalyticDB for MySQL exécutant la version V3.1.9.0 ou ultérieure et compatibles avec le comportement MySQL, des effets secondaires peuvent survenir dans des cas particuliers. Par exemple, si vous renommez une colonne C en D et que la vue doit référencer précisément les colonnes A, B et C, la vue devient indisponible et une erreur est renvoyée, car la colonne C n'existe plus. Ce comportement est attendu. Une erreur est renvoyée même si la requête n'utilise pas finalement la colonne C, car l'élimination des colonnes (column pruning) intervient lors de la phase d'optimisation, tandis que les vérifications de syntaxe SQL et des autorisations ont lieu lors de la phase d'analyse. En revanche, dans les versions antérieures à 3.1.9.0, toutes les vérifications aboutissent et aucune erreur n'est renvoyée, car seul le nombre de colonnes de la vue est contrôlé ; ce nombre reste identique après l'opération de renommage et le nombre de colonnes référencées par l'astérisque * actuel est cohérent. Une fois la vérification de disponibilité de la vue passée, la colonne C est mappée à la troisième colonne selon l'ordre de la table de base. Même si vous interrogez la colonne C après l'opération de renommage, aucune erreur n'est renvoyée et les résultats de la requête sont inattendus.

Si votre activité nécessite le comportement spécifique des clusters AnalyticDB for MySQL exécutant des versions antérieures à 3.1.9.0, vous pouvez ajouter une indication (hint) spécifique ou configurer un paramètre lors de la création des vues pour obtenir le comportement souhaité.

  • Pour configurer une seule vue, ajoutez /*+LOG_VIEW_SELECT_ASTERISK_MYSQL_MODE=false*/. L'exemple suivant montre comment ajouter cette indication :

    /*+LOG_VIEW_SELECT_ASTERISK_MYSQL_MODE=false*/
    CREATE VIEW v0
    AS
    SELECT * FROM base0;
  • Pour configurer toutes les vues du cluster, exécutez l'instruction suivante : SET ADB_CONFIG LOG_VIEW_SELECT_ASTERISK_MYSQL_MODE = false;

Syntaxe

CREATE
[OR REPLACE]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name
AS select_statement;

Paramètre

Obligatoire

Description

OR REPLACE

Non

Crée une vue en appliquant une règle choisie selon l'existence ou non d'une vue portant le même nom. Les règles sont les suivantes :

  • Si aucune vue portant le même nom n'existe, AnalyticDB for MySQL crée directement une nouvelle vue.

  • Si une vue portant le même nom existe, AnalyticDB for MySQL supprime la vue existante, puis en crée une nouvelle.

Remarque

Si ce paramètre n'est pas spécifié et qu'une vue portant le même nom existe, la création de la vue échoue.

[SQL SECURITY]

Méthode de vérification de sécurité utilisée lors de l'interrogation des données d'une vue. Valeurs possibles :

  • INVOKER : exécute les instructions SQL de requête en tant qu'INVOKER (appelant).

    Avec cette méthode de vérification de sécurité, le système vérifie si l'appelant dispose des autorisations suivantes lors de l'interrogation des données de la vue :

    • L'autorisation de requête sur la vue.

    • L'autorisation de requête sur les objets référencés par la vue.

    Les données de la vue ne peuvent être interrogées que si l'appelant possède ces deux autorisations.

  • DEFINER : exécute les instructions SQL de requête en tant que DEFINER (définisseur).

    Avec cette méthode de vérification de sécurité, le système vérifie si l'appelant et le définisseur disposent des autorisations suivantes lors de l'interrogation des données de la vue :

    • L'appelant dispose de l'autorisation de requête sur la vue.

    • Le définisseur dispose de l'autorisation de requête sur les objets référencés par la vue.

    Après la révocation des autorisations du définisseur, la vue ne peut plus être interrogée, même si l'appelant conserve l'autorisation de requête sur celle-ci.

Remarque
  • Si ce paramètre n'est pas spécifié, AnalyticDB for MySQL utilise par défaut la méthode de vérification de sécurité INVOKER. Dans ce cas, l'appelant doit disposer à la fois de l'autorisation de requête sur la vue et de l'autorisation de requête sur les objets référencés par la vue.

  • Ce paramètre est pris en charge uniquement par les clusters AnalyticDB for MySQL exécutant la version V3.1.4.0 ou ultérieure. Pour afficher la version mineure d'un cluster, consultez Comment afficher les informations de version de l'instance. Pour mettre à niveau la version mineure, contactez le support technique.

view_name

Oui

Nom de la vue.

Remarque

Vous pouvez également ajouter un nom de base de données avant le nom de la vue pour spécifier la base de données à laquelle la vue appartient, par exemple adb_demo.view. Si vous n'ajoutez pas de nom de base de données, la vue appartient par défaut à la base de données actuelle.

select_statement

Source de données de la vue.

Exemples

  • Préparer les données de test

    Utilisez un compte privilégié du cluster AnalyticDB for MySQL pour effectuer les opérations suivantes :

    1. Créez un compte nommé user1 :

      CREATE USER user1 IDENTIFIED BY 'user1_pwd';
    2. Créez une base de données nommée adb_demo et une table nommée t1 dans cette base de données. L'instruction suivante crée la table t1 :

      Create Table `t1` (
       `id` bigint AUTO_INCREMENT,
       `id_province` bigint NOT NULL,
       `user_info` varchar,
       primary key (`id`)
      ) DISTRIBUTED BY HASH(`id`);

      Insérez des données de test dans la table t1 :

      INSERT INTO t1(id_province,user_info) VALUES (1,'Tom'),(1,'Jerry'),(2,'Jerry'),(3,'Mark');
  • Créer des vues

    Remarque

    Les exemples suivants créent des vues sur la table t1 en utilisant différentes méthodes de vérification de sécurité, afin de démontrer les différences d'effets sur les autorisations entre DEFINER et INVOKER.

    • Pour créer une vue nommée v1 et définir SQL SECURITY sur INVOKER, exécutez l'instruction suivante :

      CREATE SQL SECURITY INVOKER VIEW v1
        AS SELECT id_province,user_info FROM t1 WHERE id_province=1;
    • Pour créer une vue nommée v2 et définir SQL SECURITY sur DEFINER, exécutez l'instruction suivante :

      CREATE SQL SECURITY DEFINER VIEW v2
        AS SELECT id_province,user_info FROM t1 WHERE id_province=1;
    • Pour créer une vue nommée v3 sans spécifier SQL SECURITY (dans ce cas, le système utilise INVOKER par défaut), exécutez l'instruction suivante :

      CREATE VIEW v3
        AS SELECT id_province,user_info FROM t1 WHERE id_province=1;
  • Comparer les autorisations

    • Utilisez un compte privilégié pour accorder à user1 uniquement l'autorisation d'interroger les trois vues :

      GRANT SELECT ON adb_demo.v1 TO 'user1'@'%';
      GRANT SELECT ON adb_demo.v2 TO 'user1'@'%';
      GRANT SELECT ON adb_demo.v3 TO 'user1'@'%';

      Dans ce cas, après que user1 s'est connecté à la base de données adb_demo du cluster AnalyticDB for MySQL, user1 ne peut interroger que la vue v2. Instruction de requête :

      SELECT * FROM v2;

      Le résultat suivant est renvoyé :

      +-------------+-----------+
      | ID_PROVINCE | USER_INFO |
      +-------------+-----------+
      |           1 | Tom       |
      |           1 | Jerry     |
      +-------------+-----------+

      Cependant, une erreur est renvoyée lorsque user1 interroge la vue v1 ou v3. Instruction de requête :

      SELECT * FROM v1

      ou

      SELECT * FROM v3

      Les deux instructions renvoient l'erreur suivante :

      ERROR 1815 (HY000): [20049, 2021083110261019216818804803453927668] : Failed analyzing stored view
    • Après avoir accordé à user1 l'autorisation d'interroger les trois vues, utilisez un compte privilégié pour accorder à user1 l'autorisation d'interroger la table t1 :

      GRANT SELECT ON adb_demo.t1 to user1@'%';

      Dans ce cas, après que user1 s'est connecté à la base de données adb_demo du cluster AnalyticDB for MySQL, user1 peut interroger toutes les vues v1, v2 et v3. Instruction de requête :

      SELECT * FROM v1;

      ou

      SELECT * FROM v2;

      ou

      SELECT * FROM v3;

      Les trois instructions de requête renvoient le même résultat :

      +-------------+-----------+
      | ID_PROVINCE | USER_INFO |
      +-------------+-----------+
      |           1 | Tom       |
      |           1 | Jerry     |
      +-------------+-----------+

FAQ

Les noms de colonnes définis en minuscules dans une table de base apparaissent en majuscules dans le jeu de résultats de la vue. Pourquoi ?

Les noms de colonnes du jeu de résultats d'une vue AnalyticDB for MySQL sont insensibles à la casse par défaut. Si vous souhaitez que les noms de colonnes du jeu de résultats de la vue soient en minuscules, vous pouvez définir la valeur de VIEW_OUTPUT_NAME_CASE_SENSITIVE sur true, ce qui indique la sensibilité à la casse. Pour ce faire, exécutez l'instruction suivante :

SET ADB_CONFIG VIEW_OUTPUT_NAME_CASE_SENSITIVE=true;

Bonnes pratiques

Pour plus d'informations, consultez Gestion des autorisations à l'aide des vues.