Maison  >  Article  >  base de données  >  Quelles sont les méthodes de création et d'exécution de fonctions personnalisées dans Mysql

Quelles sont les méthodes de création et d'exécution de fonctions personnalisées dans Mysql

WBOY
WBOYavant
2023-04-17 16:07:031476parcourir

    Création et exécution d'une fonction personnalisée Mysql

    Supposons que la table des étudiants contient deux champs, id et name, et créez une fonction. La fonction est de trouver un nom en fonction de l'id

    1. table et insérez des données

    create table students(id int,name varchar(100));
    insert into students(id,name) values(1,'annie'),(2,'bell'),(3,'danny');

    2. Choses à noter lors de la création d'une fonction

    DELIMITER //
    create function find_student(id int) returns varchar(100)
    READS SQL DATA
    begin
        declare sname varchar(100) default '';
        select students.name into sname from students where students.id=id;
        return sname;
    end //
    DELIMITER ;

     :

    1) Utilisez DELIMITER// pour modifier le délimiteur

    Le symbole de fin d'instruction par défaut de MySQL est un point-virgule. , il exécutera automatiquement l'instruction actuelle. Étant donné que la définition de fonction contient plusieurs instructions SQL, utilisez DELIMITER // Définissez d'abord le séparateur sur //, puis redéfinissez le séparateur en point-virgule une fois l'instruction de création de fonction terminée.

    2) LIT LES DONNÉES SQL

    Je n'ai pas écrit cette phrase auparavant, mais MySQL a signalé une erreur lors de sa création, demandant le code d'erreur : 1418. Cette fonction n'a aucun DETERMINISTIC, NO SQL ou READS SQL DATA dans sa déclaration et la journalisation binaire est activée (vous souhaiterez peut-être utiliser la variable log_bin_trust_function_creators la moins sûre)

    J'ai vérifié en ligne, ce qui signifie que le type de fonction mysql n'est pas déclaré :

    mysql a bin-log activé, nous devons précisez si notre fonction De quel type s'agit-il :

    • 1 DÉTERMINISTE Incertain

    • 2 PAS DE SQL Il n'y a pas d'instruction SQL, et bien sûr elle ne modifiera pas les données

    • 3 LIT LES DONNÉES SQL Il lit simplement les les données, et bien sûr, cela ne modifiera pas les données

    • 4 MODIFIE LES DONNÉES SQL Pour modifier les données

    • 5 CONTIENT SQL contient des instructions SQL

    • J'ai donc ajouté READS SQL DATA

    3) Utiliser des variables locales

    Définition de la variable : j'utilise declare sname varchar(100) default ‘’; pour définir la variable locale sname

    Utilisation de la variable :

    Vous pouvez utiliser select Students.name dans sname from Students. où étudiants.id=id; pour attribuer une valeur à la variable

    Vous pouvez également utiliser directement l'instruction set pour attribuer des valeurs, telles que set sname=‘test’

    3. );

    select find_student(3);

    Problème d'échec de création de fonction personnalisée MySQL

    Cas

    Actuellement, dans le projet, une erreur s'est produite lors de l'exécution de la fonction qui a créé mysql. Le message d'erreur pour la fonction de création mysql est le suivant :

    Causé par : java.sql.SQLException : cette fonction n'a aucun DETERMINISTIC, NO SQL ou READS SQL DATA dans sa déclaration et la journalisation binaire est activée (vous *pourriez* vouloir utiliser la variable log_bin_trust_function_creators la moins sûre)
    sur com.mysql.jdbc. SQLError.createSQLException(SQLError.java:965)

    sur com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO. java:3976)
    sur com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
    sur com. mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
    sur com.mysql.jdbc MysqlIO readAllResults(MysqlIO.java:2373)
    sur com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2739).
    sur com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482)
    sur com mysql.ConnectionImpl.execSQL(ConnectionImpl.java:2440)
    sur com.mysql.jdbc.StatementImpl.executeInternal(StatementImpl. java:845)
    sur com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:745)
    .. 35 de plus

    Cela est dû au fait qu'un paramètre de sécurité n'est pas activé. ce qui ne permet pas la synchronisation des fonctions. Si ce paramètre est activé, la création sera réussie.

    Vérifiez s'il est activé :

    show variables like '%func%';
    +---------------------------------+-------+ 
    | Variable_name     | Value | 
    +---------------------------------+-------+ 
    | log_bin_trust_function_creators | ON | 
    +---------------------------------+-------+ 
    1 row in set (0.00 sec)

    S'il est activé, cela signifie qu'il est activé.

    set global log_bin_trust_function_creators = 1;

    peut être défini via cette commande, mais il deviendra invalide après le redémarrage de MySQL.

    La dernière étape consiste à modifier le fichier de configuration de la base de données MySQL

    Configurez log_bin_trust_function_creators=1 dans [mysqld] du fichier de configuration /etc/my.cnf

    Quelles sont les méthodes de création et d'exécution de fonctions personnalisées dans MysqlRedémarrez MySQL après modification.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer