Comment puis-je faire un autre MySQL incrément automatique de la colonne?
MySQL ne prend pas en charge plusieurs incrément automatique des colonnes.
CREATE TABLE IF NOT EXISTS `parts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`order` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Est-il une autre solution pour rendre la valeur de la colonne order
augmenter automatiquement lorsque j'insère un nouvel enregistrement?
il y a aussi le "rowid" qui monte chaque inséré ligne : select rowid, à partir de pièces where id = somenumber
stackoverflow.com/questions/7085275/...
Donc, vous voulez deux champs à la fois auto_incemented et stocker les deux exactement les mêmes valeurs pour toutes les lignes?
stackoverflow.com/questions/7085275/...
Donc, vous voulez deux champs à la fois auto_incemented et stocker les deux exactement les mêmes valeurs pour toutes les lignes?
OriginalL'auteur web lover | 2011-09-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire à partir de votre application par l'émission d'une autre requête qui augmente
order
ou vous pouvez créer un déclencheur qui le fait pour vous. Tout ce que vous faites, pour des raisons de santé mentale de la programmation monde - ne pas utiliser des mots réservés pour les noms de colonnes commeorder
🙂OriginalL'auteur N.B.
Pourquoi voulez-vous 2 champs à être auto incrémenté, ils ont les mêmes valeurs de toute façon, de sorte que vous pouvez simplement utiliser l'ID.
Si vous voulez avoir vos factures/commandes d'avoir des numéros séquentiels, alors vous devriez garder que la numérotation d'un tableau distinct et nantis séparer la logique de mise à jour de ces chiffres.
MySQL n'attribue une auto-incrémenté id si vous ne spécifiez pas un vous-même. Ainsi, vous pouvez l'utiliser pour attribuer automatiquement une nouvelle valeur si aucun n'a été rempli, mais encore de permettre le choix explicite de l'une des valeurs existantes. Donc, ils n'auraient pas à être les mêmes pour chaque enregistrement.
Par exemple, nous avons besoin de deux Identifiants lors de la mise en œuvre temporelle des tables. Sur le code d'identification du système et de la deuxième pièce d'identité sera utilisé pour identifier le dossier: 'id', 'country_id'
Vous voudrez peut-être la colonne unique et auto-incrément par défaut, mais en même temps, vous pourriez être en mesure de passer librement les valeurs par exemple de l'ordre dans une liste. Si vous étiez à réaffecter ID ce serait évidemment très mauvais pour les relations existantes. Je ne vois pas pourquoi vous voulez une autre table pour cette logique?
OriginalL'auteur Riho
Basé sur votre table d'origine:
Comment de cette simple requête d'insertion:
Si la réclamation est vrai que ce n'est pas un coffre-fort requête, on peut se contenter d'introduire de verrouillage de table comme suit:
N'ont pas été en mesure de produire des problèmes avec cette requête; 50 requêtes en parallèle, et encore ne cause pas de doublons. Est-il une source où il est dit que ce type de requête peut causer des problèmes?
Ajout d'un tableau de verrouillage à ma réponse. Vous voulez toujours avoir une explication de cette requête unique - sans verrouillage de table - causerait des problèmes.
OriginalL'auteur HenrikW
Je vous suggère de définir uniquement
order
champ de type AUTO_INCREMENT, et calculer la nouvelle valeur pour laid
champ manuellement. Ici c'est un exemple -Oui, le tableau peut être verrouillé. ...J'ai édité ma réponse, maintenant, SELECT et INSERT sont remplacés par un INSERT...SELECT; dans ce cas, nous pouvons le faire sans verrouillage.
INSERT...SELECT n'est pas à l'abri de conditions de course
Pourquoi pensez-vous qu'il n'est pas sûr? C'est une commande.
Pourquoi pensez-vous qu'il est sécuritaire? Où avez-vous lu?
OriginalL'auteur Devart
Envisager l'ajout d'un deuxième tableau pour le
order
colonne:Exemple d'utilisation:
Cette approche ne nécessite pas d'opérations ni de verrouillage.
Vous ne pouvez rien faire de bon sans transactions ou de verrouillage.
Si vous lisez attentivement, vous verrez que la table est de type MyISAM. Que type de table ne supporte PAS les transactions. Si elle est "bonne" ou pas, les transactions pas avec MyISAM.
Ok, j'ai supprimé cette section.
OriginalL'auteur sanmai
Ne pense pas trop loin _ il suffit d'ajouter le last_id à votre commande de Chaîne et c'est tout 🙂
Je l'ai résolu de cette façon que j'ai ajouté une chaîne disons "Order_2018_00" + LAST_INSERT_ID().
Si ce champ est unique pour chaque ensemble ajouté 🙂
OriginalL'auteur loomcomputer