Maison  >  Article  >  base de données  >  Comment résoudre le problème de Mysql en utilisant la mise à jour current_timestamp

Comment résoudre le problème de Mysql en utilisant la mise à jour current_timestamp

WBOY
WBOYavant
2023-06-02 12:07:342624parcourir

    Remarques sur l'utilisation de on update current_timestamp dans Mysql

    Dans les projets récents, le champ d'heure (datetime, timestamp) a utilisé l'attribut ON UPDATE CURRENT_TIMESTAMP pour mettre à jour automatiquement l'horodatage de la colonne. Ce qui suit enregistre certains points qui nécessitent une attention particulière.

    Parlons d'abord de la conclusion

    Si vous définissez l'heure de mise à jour avec l'horodatage actuel (ON UPDATE CURRENT_TIMESTAMP), alors lorsque vous mettez à jour le champ, seule la valeur du champ change, votre champ d'heure passera à l'heure du Opération MISE À JOUR.

    C'est-à-dire que lorsqu'il n'y a pas de mise à jour du champ, bien que l'instruction de mise à jour soit exécutée et exécutée avec succès, le champ horaire ne sera pas mis à jour.

    Par exemple, on crée un nouveau tableau :

    CREATE TABLE `t_temp` (
      `id` int(11) NOT NULL DEFAULT '0',
      `username` varchar(255) DEFAULT NULL,
      `upd_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '默认取当前时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    On insère ensuite une ligne de données, puis on effectue une mise à jour.

    Comment résoudre le problème de Mysql en utilisant la mise à jour current_timestamp

    UPDATE t_temp SET username = 'mm' WHERE id = 1;

    constatera que la colonne horaire ne sera pas mise à jour.

    De même, certains frameworks sont utilisés dans le programme, comme tk-mybatis. Lors de l'utilisation de la méthode de mise à jour (telle que la méthode int updateByPrimaryKeySelective(T record);), si le champ n'est pas réellement mis à jour, bien que la syntaxe soit exécutée, le champ horaire ne sera pas mis à jour, cela est facilement négligé dans le système.

    CURRENT_TIMESTAMP() est lié à ON UPDATE et à l'index

    Probabilité de base

    CURRENT_TIMESTAMP() peut définir le type TIMESTAMP dans MYSQL sur l'heure actuelle.

    ON UPDATE pense personnellement qu'il s'agit d'un artefact. Il est généralement utilisé lorsqu'un champ est updateTIme et que l'heure de la dernière modification est utilisée. De cette façon, les développeurs n'ont pas à le gérer eux-mêmes, MySQL peut le gérer automatiquement.

    Enfin, parlons des index. Celui-ci vient de Baidu. J'ai oublié de qui il vient : les index sont un type particulier de fichiers (les index de la table de données InnoDB sont un composant de l'espace table). à tous les enregistrements de la table de données.

    On peut dire que l'index de la base de données est comme la table des matières d'un livre, ce qui peut augmenter la vitesse des requêtes dans la base de données. Les index sont divisés en index clusterisés et les index non clusterisés sont classés en fonction de l'emplacement physique du stockage des données, mais les index non clusterisés peuvent augmenter la vitesse de récupération sur plusieurs lignes, tandis que les index non clusterisés. sont rapides pour la récupération de lignes simples.

    Si vous créez trop d'index, cela aura un impact sur la vitesse des opérations de mise à jour et d'insertion, car chaque fichier d'index doit être mis à jour. Pour une table qui doit fréquemment être mise à jour et insérée, il n'est pas nécessaire de créer un index séparé pour une clause Where rarement utilisée. Pour les tables plus petites, la surcharge de tri ne sera pas très importante et il n'est pas nécessaire de créer des index supplémentaires. .

    Code et exemples

    Le code de création de table suivant :

    CREATE TABLE timeDemo(
     
    	id VARCHAR(64) NOT NULL,
    	timeTest TIMESTAMP NOT NULL,
    	PRIMARY KEY (id)
    );

    Lors de l'ajout d'une nouvelle donnée :

    Comment résoudre le problème de Mysql en utilisant la mise à jour current_timestamp

    Il créera automatiquement une heure, comme une table de commande, s'il souhaite enregistrer l'heure de passation d'un commande, utilisez simplement cette méthode pour le traitement.

    Y compris updateTime, heure de la dernière mise à jour :

    CREATE TABLE timeDemo2(
     
    	id VARCHAR(64) NOT NULL,
    	createTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
    	updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
    	PRIMARY KEY (id)
     
    );

    //Il n'y aura aucun problème avec la version 5.7 ou supérieure de MySQL ci-dessus, mais il y aura des problèmes avec les versions inférieures à 5.7

    //Pour les versions inférieures à 5.7, il est recommandé de utilisez le programme pour insérer.

    Ici, nous utilisons 5.5 pour démontrer l'effet de ON UPDATE

    CREATE TABLE timeDemo3(
     
    	id VARCHAR(64) NOT NULL,
    	updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
    	PRIMARY KEY (id)
    );

    Lorsque certaines données de ce tableau sont modifiées, la valeur de updateTime sera automatiquement mise à jour.

    Comment résoudre le problème de Mysql en utilisant la mise à jour current_timestamp

    Chaque fois que cet enregistrement est mis à jour, updateTime sera automatiquement mis à jour. Dans ce cas, le programmeur n'a pas besoin de le gérer lui-même.

    On constate ici que malheureusement de nombreuses sociétés Internet aiment utiliser MySQL 5.7 ou supérieur, alors que les industries traditionnelles utilisent encore MySQL 5.5.

    Parlons de clé d'index et d'index

    CREATE TABLE timeDemo4(
     
    	id VARCHAR(64) NOT NULL,
    	id2 VARCHAR(64) NOT NULL,
    	updateTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
    	PRIMARY KEY (id),
    	KEY(id2)
    )ENGINE=INNODB DEFAULT CHARSET=utf8

    Le seul but d'un index normal est d'améliorer la vitesse d'accès aux données. Ce type d'index est défini par le mot-clé KEY ou INDEX. Par conséquent, les index ne doivent être créés que pour les colonnes de données qui apparaissent le plus fréquemment dans les conditions de requête (colonne WHERE = ...) ou les conditions de tri (colonne ORDER BY).

    Afin de créer un index, vous devez choisir la colonne de données la plus régulière et la plus compacte, telle qu'une colonne de données de type entier, dans la mesure du possible.

    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