0

主キーとIsIdentityプロパティを持つテーブルに複数のレコードを挿入するための省略形(可能であれば)が欲しいです。たとえば、次の列を持つ「People」というテーブルがあるとします。
-ID(主キー、およびID [つまり自動インクリメント])
-名前(nullではない)
-電子メール(nullではない)

次のように、自動インクリメントID列を除く挿入ステートメントは完全に有効です。

People VALUES('George'、'george@email.com')に挿入

しかし、同じステートメントに複数の値を挿入したい場合は、理想的には、列名を明示的に指定する必要がないこのような方法で実行できます。

人々の価値観に挿入(
   (auto、'George'、'george@email.com')、
   (auto、'Mary'、'mary@email.com')
)。

私が見つけた最善の解決策は次のようなものでした:

人々に挿入(
   SELECT'George'、'george@email.com'、
   ユニオンオール
   SELECT'Mary'、'mary@email.com'
)。

議論の余地があると思いますが、これはやや無意味な追求ですが、クエリ自体をテーブルのデザインとともに拡張できるようにしたかったのです。たとえば、列名が変更された場合、または列が追加された場合、コード内のどこでもこれを変更する必要はありません。

乾杯 :)

4

2 に答える 2

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)

主キーが自動インクリメントに設定されている限り、フィールドを無効にすると、値が自動インクリメント値に自動設定されます。

于 2011-07-09T00:33:47.653 に答える
1

これは、使用しているデータベースによって異なります。一部のデータベースでは、複数の値セットが許可されています。

insert into People values
(auto, 'George', 'george@email.com'),
(auto, 'Mary', 'mary@email.com')
于 2011-07-09T00:35:45.263 に答える