分别在列中插入数据 - Mysql

时间:2013-11-12 09:52:07

标签: mysql

我在mysql数据库中有一个用户表,列名为“id”和“name”。我希望分别在列中插入数据。

我使用以下命令成功地将数据插入第一列。

insert into user(id) values (1),(2),(3);

select * from user;

+------+------+
| id   | name |
+------+------+
|    1 | NULL |
|    2 | NULL |
|    3 | NULL |
+------+------+

在第二列中插入值,如。

insert into user(name) values ('abc'),('def'),('xyz');

我得到的结果。

select * from user;

+------+--------+
| id   | name   |
+------+--------+
|    1 | NULL   |
|    2 | NULL   |
|    3 | NULL   |
| NULL | abc    |
| NULL | def    |
| NULL | xyz    |
+------+--------+

我想要一个解决方案,使我能够在0索引的名称列中插入值。结果应如下所示,但在列中单独插入。

+------+--------+
| id   | name   |
+------+--------+
|    1 | abc    |
|    2 | def    |
|    3 | xyz    |

2 个答案:

答案 0 :(得分:3)

您应该使用insert语句插入新行和update语句来更新现有语句:

update user set name = 'abc' where id = 1;

或您的案例

update mytable
    set name = case id
        when 1 then 'abc'
        when 2 then 'def'
        when 3 then 'xyz'
    end
where id in (1,2,3)

或者如果您的id是主键,则可以使用insert ... on duplicate key update声明:

 insert into user (id, name) 
   values (1, 'abc'), (2, 'def'), (3, 'xyz')
       on duplicate key 
   update name = values(name);

样品:

mysql> create table user (id int(11) primary key, name varchar(10) null);
Query OK, 0 rows affected (0.27 sec)

mysql> insert into user (id) values (1),(2),(3);
Query OK, 3 rows affected (0.05 sec)

mysql>      insert into user (id, name)
    ->        values (1, 'abc'), (2, 'def'), (3, 'xyz')
    ->            on duplicate key
    ->        update name = values(name);
Query OK, 3 rows affected (0.09 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from user;
+----+------+
| id | name |
+----+------+
|  1 | abc  |
|  2 | def  |
|  3 | xyz  |
+----+------+

答案 1 :(得分:0)

您正在插入意味着添加一行,但您想要更新,因此请使用UPDATE代替INSERT

UPDATE user SET name = 'abc' WHERE id = 1;