0

我在 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    |
4

2 回答 2

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  |
+----+------+
于 2013-11-12T09:55:22.327 回答
0

您正在插入意味着添加一行,但您想更新,所以使用UPDATE而不是INSERT

UPDATE user SET name = 'abc' WHERE id = 1;
于 2013-11-12T09:57:20.010 回答