Multi-Insert Shorthand с первичным ключом и идентификацией - PullRequest
0 голосов
/ 09 июля 2011

Я хотел бы, чтобы сокращение (если возможно) для вставки нескольких записей в таблицу, которая имеет первичный ключ и свойство IsIdentity. Например, скажем, у меня есть таблица «Люди» со следующими столбцами:
- 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 ]

2 голосов
/ 09 июля 2011

Вы можете вставить несколько строк, например:

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

EDIT:

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 голос
/ 09 июля 2011

Это зависит от того, какую базу данных вы используете.Некоторые базы данных допускают несколько наборов значений:

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