带主键的多插入速记&身分

时间:2011-07-09 00:27:39

标签: sql insert auto-increment shorthand

我想要一个简写(如果可能的话),用于将多个记录插入到具有主键和IsIdentity属性的表中。例如,假设我有一个名为'People'的表,其中包含以下列:
- ID(主键和身份[即自动增量])
- 姓名(非空)
- 电子邮件(非空)

不包括自动递增ID列的插入语句完全有效,例如:

INSERT INTO People VALUES ('George', 'george@email.com')

但是如果我想在同一个语句中插入多个值,理想情况可以这样做,我不必明确指定列名

INSERT INTO People VALUES (
   (auto, 'George', 'george@email.com'),
   (auto, 'Mary', 'mary@email.com')
)

我能找到的最佳解决方案是这样的:

INSERT INTO People (
   SELECT 'George', 'george@email.com',
   UNION ALL
   SELECT 'Mary', 'mary@email.com'
)

我想你可以争辩说,这是一种毫无意义的追求,但我希望查询本身可以与表格设计一起扩展。例如,如果列名称已更改,或者添加了更多列,则无需在代码中的任何位置更改此列。

干杯:)

2 个答案:

答案 0 :(得分:2)

您可以像这样插入多行:

INSERT INTO `People` (`name`,`email`) VALUES ('George', 'George@test.com'),('Mary', 'LittleLamb@test.com');

编辑:

mysql> create table `test`(
    -> `id` int(10) unsigned not null AUTO_INCREMENT,
    -> `name` varchar(255) not null default 'N/A/',
    -> `email` varchar(255) not null default 'N/A/',
    -> PRIMARY KEY(`id`) 
    -> )ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO `test` VALUES (null, 'Name 1', 'Email 1'),(null, 'Name 2','Email 2');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from `test`;
+----+--------+---------+
| id | name   | email   |
+----+--------+---------+
|  1 | Name 1 | Email 1 |
|  2 | Name 2 | Email 2 |
+----+--------+---------+
2 rows in set (0.00 sec)

只要您的主键设置为自动增量,您就可以使该字段无效,它会自动将该值设置为自动增量值。

答案 1 :(得分:1)

这取决于您使用的数据库。有些数据库允许多个值集:

insert into People values
(auto, 'George', 'george@email.com'),
(auto, 'Mary', 'mary@email.com')