Maison > Article > base de données > Une explication de la méthode de données à deux colonnes dans la table d'échange MySQL
CREATE TABLE `product` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '产品id', `name` varchar(50) NOT NULL COMMENT '产品名称', `original_price` decimal(5,2) unsigned NOT NULL COMMENT '原价', `price` decimal(5,2) unsigned NOT NULL COMMENT '现价', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `product` (`id`, `name`, `original_price`, `price`) VALUES (NULL, '雪糕', '5', '3.5'), (NULL, '鲜花', '18', '15'), (NULL, '甜点', '25', '12.5'), (NULL, '玩具', '55', '45'), (NULL, '钱包', '285', '195');
mysql> select * from product; +----+--------+----------------+--------+| id | name | original_price | price | +----+--------+----------------+--------+| 1 | 雪糕 | 5.00 | 3.50 | | 2 | 鲜花 | 18.00 | 15.00 | | 3 | 甜点 | 25.00 | 12.50 | | 4 | 玩具 | 55.00 | 45.00 || 5 | 钱包 | 285.00 | 195.00 | +----+--------+----------------+--------+5 rows in set (0.00 sec)
Les débutants peuvent utiliser les méthodes suivantes pour échanger
update product set original_price=price,price=original_price;
Mais le résultat de cette exécution sera seulement que les valeurs de original_price et price sont toutes deux la valeur de price, car la mise à jour est séquentielle,
exécuter en premieroriginal_price=price , la valeur de original_price Il a été mis à jour en price,
puis exécute price=original_price, ce qui équivaut à aucune mise à jour.
Résultat de l'exécution :
mysql> select * from product; +----+--------+----------------+--------+| id | name | original_price | price | +----+--------+----------------+--------+| 1 | 雪糕 | 5.00 | 3.50 | | 2 | 鲜花 | 18.00 | 15.00 | | 3 | 甜点 | 25.00 | 12.50 | | 4 | 玩具 | 55.00 | 45.00 || 5 | 钱包 | 285.00 | 195.00 | +----+--------+----------------+--------+5 rows in set (0.00 sec) mysql> update product set original_price=price,price=original_price; Query OK, 5 rows affected (0.00 sec) Rows matched: 5 Changed: 5 Warnings: 0mysql> select * from product; +----+--------+----------------+--------+| id | name | original_price | price | +----+--------+----------------+--------+| 1 | 雪糕 | 3.50 | 3.50 | | 2 | 鲜花 | 15.00 | 15.00 | | 3 | 甜点 | 12.50 | 12.50 | | 4 | 玩具 | 45.00 | 45.00 || 5 | 钱包 | 195.00 | 195.00 | +----+--------+----------------+--------+5 rows in set (0.00 sec)
La méthode d'échange correcte est la suivante :
update product as a, product as b set a.original_price=b.price, a.price=b.original_price where a.id=b.id;
Résultat de l'exécution :
mysql> select * from product; +----+--------+----------------+--------+| id | name | original_price | price | +----+--------+----------------+--------+| 1 | 雪糕 | 5.00 | 3.50 | | 2 | 鲜花 | 18.00 | 15.00 | | 3 | 甜点 | 25.00 | 12.50 | | 4 | 玩具 | 55.00 | 45.00 || 5 | 钱包 | 285.00 | 195.00 | +----+--------+----------------+--------+5 rows in set (0.00 sec) mysql> update product as a, product as b set a.original_price=b.price, a.price=b.original_price where a.id=b.id; Query OK, 5 rows affected (0.01 sec) Rows matched: 5 Changed: 5 Warnings: 0mysql> select * from product; +----+--------+----------------+--------+| id | name | original_price | price | +----+--------+----------------+--------+| 1 | 雪糕 | 3.50 | 5.00 | | 2 | 鲜花 | 15.00 | 18.00 | | 3 | 甜点 | 12.50 | 25.00 | | 4 | 玩具 | 45.00 | 55.00 || 5 | 钱包 | 195.00 | 285.00 | +----+--------+----------------+--------+5 rows in set (0.00 sec)
Cet article explique la méthode d'échange de deux colonnes de données dans la table mysql. Pour plus d'informations, veuillez faire attention au site Web chinois de php.
Recommandations associées :
Comment générer une méthode décimale aléatoire de 0 à 1 via php
À propos de l'utilisation de la fonction de formatage d'horodatage MySQL from_unixtime Instructions
Instructions sur l'utilisation des fonctions mysql concat et group_concat
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!