Maison base de données tutoriel mysql mysql 获取全局唯一值_MySQL

mysql 获取全局唯一值_MySQL

Jun 01, 2016 pm 01:26 PM
mysql 数据库

bitsCN.com

  在涉及数据库存储数据的时候,经常会遇到唯一值问题,有的是主键带来的限制,有的则是业务上的需要。

  下面介绍几种唯一值的获取或者生产方法:

  先建一个测试用的表tbl_user,有三个字段:Id、Name、Age,其中Id为主键。
   1:  drop table if exists `tbl_user`;
Copier après la connexion
   2:  create table 
Copier après la connexion
   3:  `tbl_user` (
Copier après la connexion
   4:      `Id` int(10),
Copier après la connexion
   5:      `Name` varchar(20),
Copier après la connexion
   6:      `Age` int(10),
Copier après la connexion
   7:      PRIMARY KEY  (`Id`)
Copier après la connexion
   8:  )DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Copier après la connexion
 
Copier après la connexion
Copier après la connexion

  插入几条数据

   1:  insert into tbl_user values (1000,"小猫",22);
Copier après la connexion
   2:  insert into tbl_user values (1001,"小狗",22);
Copier après la connexion
   3:  insert into tbl_user values (1002,"小刺猬",22);
Copier après la connexion
   4:   
Copier après la connexion
   5:  select * from tbl_user;
Copier après la connexion
  查询结果:
Copier après la connexion
  <img src="/static/imghw/default1.png" data-src="http://img.bitscn.com/upimg/allimg/c140719/1405L22201W50-23L24.jpg" class="lazy"   style="max-width:90%" title="image" alt="image"  style="max-width:90%"  style="max-width:90%" border="0">
Copier après la connexion
 
Copier après la connexion
Copier après la connexion
  1.由应用程序根据一定算法生成唯一值:一般采用”MD5(时间戳+随机数)“或者其他的UUID算法,基本也比较好实现。如果遇到多机器上分布的程序访问统一数据库的表,可以把Ip、网卡号等信息考进来就可以解决了(当然可以不是简单的拼接,你可以根据需要去合适的位数经过一定的算法去获取)。 

  2.先查询表中最大的值select max(id),再加1后作为新的值。很笨的方法。

   1:  select max(Id) from tbl_user;
Copier après la connexion
   2:  查询到的最大Id为 1002
Copier après la connexion
   3:   
Copier après la connexion
   4:  之后插入 1003
Copier après la connexion
   5:   
Copier après la connexion
   6:  insert into tbl_user values (1003,"小熊",22);
Copier après la connexion
   7:   
Copier après la connexion

  此时表中数据为

  image

  3.如果是表级别的唯一,即在同一个表中某个字段唯一,可以把该字段设置为“自增(AUTO_INCREMENT)”的。这样你不必费心思去生成这个不能重复的唯一值了。但是一般应用程序是需要这个唯一值的,这个时候你就得在查询一次去获取刚才数据库自增生成的Id。比如在用户登录的时候,你要生成一个登录会话Id或者Token,这些程序一般是需要得到这个值而不是仅仅存在数据库中。生成的值,1.可以一般的select条件查询,根据条件查询刚才插入的数据。2.直接调用select @@IDENTITY 就可以得到上一次插入记录时自动产生的ID(注意是在数据库同一个连接(会话)中),用在插入后立即select @@IDENTITY 。

  看例子,先将表中的Id字段设置为自增,再插入一条数据(不要插入Id值,让数据库自增得到值),select @@IDENTITY查询,最后验证看看。

1.#将Id改为自增(auto_increment)ALTER TABLE tbl_user CHANGE Id Id int not null auto_increment;#或者 先删除Id字段再添加一个Id字段alter table tbl_user auto_increment=1000;alter table tbl_user drop column Id;alter table tbl_user add Id int not null auto_increment primary key first;2.插入一条记录insert tbl_user set Name='小猴',Age=23;3.查询刚才的自增Id值select @@IDENTITY;值是1004,
Copier après la connexion


  验证下:select * from tbl_user;得到的当前表记录为

  image

  过刚插入的数据“小猴”id为1004,和select @@IDENTITY;结果一样。

  4.使用mysql的 UUID()函数。前面的自增字段(auto_increment)只能生成”表内”的唯一值,且需要搭配使其为”唯一的主键或唯一索引”,它的值是逐步增长的。这里的UUID产生的是字符串类型值,固定长度为:36个字符。UUID生成的是在时间、空间上都独一无二的值,是“随机+规则”组合而成。

select uuid();select uuid();执行两次,结果:69ad8b74-6d47-11e3-ba6e-7446a08ee8ec69b03c16-6d47-11e3-ba6e-7446a08ee8ec
Copier après la connexion

  可以看到,多次调用UUID()函数得到的值不相同,它由五部分组成,并且有连字符(-)隔开,一共36个字符。其中:

  前3组值是时间戳换算过来的,解决“时间上唯一”;

  第4组值是暂时性保持时间戳的唯一性,重启mysql才会变动;

  第5组是mac值转过来的,有助于解决“空间上的唯一”,同一个机器多实例的一般相同。如果mac值获取不到,则是一个随机值。

  这些已经可以保证得到的值在时间和空间上的唯一。当然你也可以去掉连字符: select replace(uuid(),'-','')。

  在MySQL 5.1.*及更高版本有一个变种的UUID()函数,UUID_SHORT(),可以生成一个17-64位无符号的整数,注意是生成的一个整数,而前面UUID()生成的是字符串。MySQL启动后第一次执行的值是通过时间戳等初始化这个值,在本次运行中再次调用的时候都加1。这个值一般比较大,可以调用right(UUID_SHORT(),9)取后面的若干位。或者,你还可以写成自定义函数,来按需生成这个值。举个例子:

#1.调用uuid_short()函数SELECT UUID_SHORT();SELECT UUID_SHORT();#执行两次得到的值递增的:2328563497408921623285634974089217#2.创建一个自定义函数,按需获取唯一值:CREATE DEFINER=`root`@`%` FUNCTION `GetUuidTest`(SysId     int) RETURNS int(10)begin    declare tmpID  int;                set tmpID = 0;              #SELECT UUID_SHORT() into  tmpID;  #直接取值     SELECT concat(SysId,right(UUID_SHORT(),8)) into  tmpID;#SysId和UUID_SHORT()后8位数拼接得到     return  tmpID;end#3.调用自定义的函数GetUuidTest(int)函数:select GetUuidTest(1);select GetUuidTest(1);select GetUuidTest(2);select GetUuidTest(2);#得到结果:174089233 #1+uuid_short()后8位(74089233)组成174089234 #1+uuid_short()后8位(74089234)组成274089235 #2+uuid_short()后8位(74089235)组成274089236 #3+uuid_short()后8位(74089236)组成#uuid_short()值递增,前面在加一个Id,不同的服务器IdSysId不同。#4.在例子中调用自定义函数GetUuidTest(int)  来插入记录:这时候不需要把Id设置为自增了。insert tbl_user set Id=GetUuidTest(1),Name='小熊猫',Age=22;insert tbl_user set Id=GetUuidTest(2),Name='小鸭子',Age=21;
Copier après la connexion

  例子中,select * from tbl_user;得到的所有记录为

  image

  欢迎转载,方便的话,请注明出处,谢谢!

  作者:子韦一

bitsCN.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Jun 03, 2024 pm 12:19 PM

La sauvegarde et la restauration d'une base de données MySQL en PHP peuvent être réalisées en suivant ces étapes : Sauvegarder la base de données : Utilisez la commande mysqldump pour vider la base de données dans un fichier SQL. Restaurer la base de données : utilisez la commande mysql pour restaurer la base de données à partir de fichiers SQL.

Comment optimiser les performances des requêtes MySQL en PHP ? Comment optimiser les performances des requêtes MySQL en PHP ? Jun 03, 2024 pm 08:11 PM

Les performances des requêtes MySQL peuvent être optimisées en créant des index qui réduisent le temps de recherche d'une complexité linéaire à une complexité logarithmique. Utilisez PreparedStatements pour empêcher l’injection SQL et améliorer les performances des requêtes. Limitez les résultats des requêtes et réduisez la quantité de données traitées par le serveur. Optimisez les requêtes de jointure, notamment en utilisant des types de jointure appropriés, en créant des index et en envisageant l'utilisation de sous-requêtes. Analyser les requêtes pour identifier les goulots d'étranglement ; utiliser la mise en cache pour réduire la charge de la base de données ; optimiser le code PHP afin de minimiser les frais généraux.

Comment insérer des données dans une table MySQL en utilisant PHP ? Comment insérer des données dans une table MySQL en utilisant PHP ? Jun 02, 2024 pm 02:26 PM

Comment insérer des données dans une table MySQL ? Connectez-vous à la base de données : utilisez mysqli pour établir une connexion à la base de données. Préparez la requête SQL : Écrivez une instruction INSERT pour spécifier les colonnes et les valeurs à insérer. Exécuter la requête : utilisez la méthode query() pour exécuter la requête d'insertion en cas de succès, un message de confirmation sera généré.

Comment créer une table MySQL en utilisant PHP ? Comment créer une table MySQL en utilisant PHP ? Jun 04, 2024 pm 01:57 PM

La création d'une table MySQL à l'aide de PHP nécessite les étapes suivantes : Connectez-vous à la base de données. Créez la base de données si elle n'existe pas. Sélectionnez une base de données. Créer un tableau. Exécutez la requête. Fermez la connexion.

Comment utiliser les procédures stockées MySQL en PHP ? Comment utiliser les procédures stockées MySQL en PHP ? Jun 02, 2024 pm 02:13 PM

Pour utiliser les procédures stockées MySQL en PHP : Utilisez PDO ou l'extension MySQLi pour vous connecter à une base de données MySQL. Préparez l'instruction pour appeler la procédure stockée. Exécutez la procédure stockée. Traitez le jeu de résultats (si la procédure stockée renvoie des résultats). Fermez la connexion à la base de données.

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Dec 09, 2024 am 11:42 AM

L'un des changements majeurs introduits dans MySQL 8.4 (la dernière version LTS en 2024) est que le plugin « MySQL Native Password » n'est plus activé par défaut. De plus, MySQL 9.0 supprime complètement ce plugin. Ce changement affecte PHP et d'autres applications

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

Les dernières versions d'Apple des systèmes iOS18, iPadOS18 et macOS Sequoia ont ajouté une fonctionnalité importante à l'application Photos, conçue pour aider les utilisateurs à récupérer facilement des photos et des vidéos perdues ou endommagées pour diverses raisons. La nouvelle fonctionnalité introduit un album appelé "Récupéré" dans la section Outils de l'application Photos qui apparaîtra automatiquement lorsqu'un utilisateur a des photos ou des vidéos sur son appareil qui ne font pas partie de sa photothèque. L'émergence de l'album « Récupéré » offre une solution aux photos et vidéos perdues en raison d'une corruption de la base de données, d'une application d'appareil photo qui n'enregistre pas correctement dans la photothèque ou d'une application tierce gérant la photothèque. Les utilisateurs n'ont besoin que de quelques étapes simples

Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Jun 04, 2024 pm 01:42 PM

Comment utiliser MySQLi pour établir une connexion à une base de données en PHP : Inclure l'extension MySQLi (require_once) Créer une fonction de connexion (functionconnect_to_db) Appeler la fonction de connexion ($conn=connect_to_db()) Exécuter une requête ($result=$conn->query()) Fermer connexion ( $conn->close())

See all articles