MySQL ON DUPLICATE KEY UPDATE est une syntaxe unique pour Mysql
ON DUPLICATE KEY UPDATE utilisation et instructions
Exemple d'utilisation:
Il existe actuellement un enregistrement avec l'ID 20 dans la base de données. À ce stade, l'enregistrement avec l'ID d'insertion = 20 signalera une erreur:
INSERT INTO `book`.`book_test` (`id`, `book_name`, `isbn`, `author`, `price`, `publisher`, `publish_date`, `is_sale`) VALUES ('20', '博弈论', '56', '刘一手', '52.00', '测试出版社', '2018-12-06', '1');
[SQL]INSERT INTO `book`.`book_test` (`id`, `book_name`, `isbn`, `author`, `price`, `publisher`, `publish_date`, `is_sale`) VALUES ('20', '博弈论', '56', '刘一手', '52.00', '测试出版社', '2018-12-06', '1'); [Err] 1062 - Duplicate entry '20' for key 'PRIMARY'
Améliorations SQL: mettre à jour s'il existe, insérer s'il n'existe pas
Exemple:
INSERT INTO `book`.`book_test` ( `id`, `book_name`, `isbn`, `author`, `price`, `publisher`, `publish_date`, `is_sale` ) VALUES ( '20', '博弈论', '56', '刘一手', '100.00', '测试出版社', '2018-12-06', '1' ) ON DUPLICATE KEY UPDATE book_name = VALUES (book_name), isbn = VALUES (isbn), author = VALUES (author), price = VALUES (price), publisher = VALUES (publisher), publish_date = VALUES (publish_date), is_sale = VALUES (is_sale)
Résultats de la:
[SQL]INSERT INTO `book`.`book_test` ( ... VALUES (is_sale) 受影响的行: 2 时间: 0.001s
Vous pouvez voir que les données d'origine ont été mises à jour:
Exemples d'utilisation dans Mybatis:
====== >> où id et id_système sont des index joints
<insert id="insertOrUpdate" parameterType="com.company.xxx.model.MyTestBean"> insert into ${tableName} <trim prefix="(" suffix=")" suffixOverrides=","> <if test="systemId != null"> system_id, </if> <if test="id != null"> id, </if> <if test="order != null"> order, </if> <if test="desc != null"> desc, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="systemId != null"> #{systemId,jdbcType=INTEGER}, </if> <if test="id != null"> #{id,jdbcType=BIGINT}, </if> <if test="order != null"> #{order,jdbcType=VARCHAR}, </if> <if test="desc != null"> #{desc,jdbcType=LONGVARCHAR}, </if> </trim> ON DUPLICATE KEY UPDATE <trim suffixOverrides=","> <if test="order != null">order=VALUES(order),</if> <if test="desc != null">desc=VALUES(desc),</if> </trim> </insert>