我想要一个简写(如果可能的话),用于将多个记录插入到具有主键和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' )
我想你可以争辩说,这是一种毫无意义的追求,但我希望查询本身可以与表格设计一起扩展。例如,如果列名称已更改,或者添加了更多列,则无需在代码中的任何位置更改此列。
干杯:)
答案 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')