首页 文章

具有主键和标识的多插入速记

提问于
浏览
0

我想要一个简写(如果可能的话)将多个记录插入到具有主键和IsIdentity属性的表中 . 例如,假设我有一个名为'People'的表,其中包含以下列:

  • ID(主键和身份[即自动增量])
  • 姓名(非空)
  • 电子邮件(非空)

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

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

但是如果我想在同一个语句中插入多个值, ideally 可以做到这样的事情我 don't have to explicitly specify the column names

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 回答

  • 1

    您可以像这样插入多行:

    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)
    

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

  • 2

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

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

相关问题