以下表为例,表中已经存在了此书的信息。当我在次执行 
insert into 图书入库记录 values ('windows程序设计',111222,1,'北京大学出版社');
的时候当然不能重复出现此记录,我们需要把库存变为6.但是怎么写代码呢。(如果没有此记录,则添加此记录;如果已有此记录,则库存加一)。

mysql> DESCRIBE 图书入库记录;
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| 图书名称   | char(50) | YES  |     | NULL    |       |
| 图书条形码 | double   | YES  |     | NULL    |       |
| 图书库存   | int(11)  | YES  |     | NULL    |       |
| 图书价格   | double   | YES  |     | NULL    |       |
| 图书出版社 | char(50) | YES  |     | NULL    |       |
+------------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)mysql> SELECT * FROM 图书入库记录;
+-----------------+------------+----------+----------+----------------+
| 图书名称        | 图书条形码 | 图书库存 | 图书价格 | 图书出版社     |
+-----------------+------------+----------+----------+----------------+
| windows程序设计 |     111222 |        5 |       90 | 北京大学出版社 |
+-----------------+------------+----------+----------+----------------+
1 row in set (0.00 sec)

解决方案 »

  1.   

    用insert into table values() on duplicate key update `图书库存`=...
    前提是需要有主键或则唯一索引来提示有冲突;
      

  2.   

    mysql> select * from `图书入库记录`;
    +-----------------+------------+----------+----------+----------------+
    | 图书名称               | 图书条形码          | 图书库存        | 图书价格
      | 图书出版色             |
    +-----------------+------------+----------+----------+----------------+
    | windows程序设计         |     111222 |        5 |       90 | 北京大学出版社
               |
    +-----------------+------------+----------+----------+----------------+
    1 row in set (0.00 sec)mysql> alter table `图书入库记录` add unique key(`图书名称`);
    Query OK, 1 row affected (0.11 sec)
    Records: 1  Duplicates: 0  Warnings: 0mysql> show index from `图书入库记录`;
    +--------------+------------+----------+--------------+-------------+-----------
    +-------------+----------+--------+------+------------+---------+
    | Table        | Non_unique | Key_name | Seq_in_index | Column_name | Collation
    | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
    +--------------+------------+----------+--------------+-------------+-----------
    +-------------+----------+--------+------+------------+---------+
    | 图书入库记录           |          0 | 图书名称        |            1 | 图书名
    称           | A         |           1 |     NULL | NULL   | YES  | BTREE      |
             |
    +--------------+------------+----------+--------------+-------------+-----------
    +-------------+----------+--------+------+------------+---------+
    1 row in set (0.00 sec)mysql> insert into 图书入库记录 values ('windows程序设计',111222,1,90,'北京大学
    出版社')
        -> on duplicate key update `图书库存`=values(`图书库存`)+`图书库存`;
    Query OK, 2 rows affected (0.06 sec)mysql> select * from `图书入库记录`;
    +-----------------+------------+----------+----------+----------------+
    | 图书名称               | 图书条形码          | 图书库存        | 图书价格
      | 图书出版色             |
    +-----------------+------------+----------+----------+----------------+
    | windows程序设计         |     111222 |        6 |       90 | 北京大学出版社
               |
    +-----------------+------------+----------+----------+----------------+
    1 row in set (0.00 sec)
      

  3.   

    如果用MYSQYL,用on duplicate key update就行 了
      

  4.   

    在程序中怎么判断? 会不会MFC? 在MFC里怎么判断?
      

  5.   

    这个是一个语法.手册上有的,楼主可以看手册,
    http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/sql-syntax.html#insert
    insert 语法;
    看手册是最好的.
      

  6.   

    在MYSQL自带的控制台里写的代码 和 程序里写的代码不一样吗? 我说的程序是在VC里。 2楼没回复我,还是请教你吧
      

  7.   


    MFC写代码也一样,楼主需要先掌握SQL语言的基础,然后 MFC只不过中通过否个函数来连接,提交SQL语句。