2010-11-17 2 views
1

У меня есть таблица под названием аренду на MySQLMySQL запросов для вставки 300 строк сразу

id, int (5), autoincrement PRIMARY KEY 

dNo, int (5) 

pRent, varchar (5) 

status, varchar (10) 

Мне нужно вставить 300 строк в этой таблице

ид и Дно должны соответствовать

так в конце мы будем иметь id/dNo до 300. Как это можно сделать?

Prent будет иметь значение по умолчанию 0

статуса будет иметь значение по умолчанию вакантного

Что SQL-запросом я должен использовать, чтобы вставить все 300 строк сразу с идентификатором/Дно Autoincrement до 300 ?

+0

Могу ли я спросить, почему вы по существу имеют два столбца, содержащие точно такое же значение? –

ответ

1

Предполагая, что идентификатор установлен в auto increment вы можете просто вставить много затем выполнить команду update table set dNo=id

Я не уверен, если вы можете установить dNo=id во время вставки, как идентификатор будет NULL

Вы могли бы быть может установить значение по умолчанию для dNoid

Edit:

INSERT INTO `test` (`id`, `id2`) VALUES ('2', `id`) 

Работает нормально, но нет, если я установил id=NULL.


Похоже, вы должны будете пользователем triggers

CREATE TRIGGER set_nDo AFTER INSERT ON test FOR EACH ROW SET `nDo`=`id` 
+0

он отлично работает, но как мне вставить 300 сразу. следует ли копировать и вставлять? – methuselah

+1

Lol, предполагая, что вы сохранили эти значения где-нибудь, вы могли бы написать скрипт или что-то, чтобы загрузить их в инструкцию insert, иначе вам придется набирать все это вручную ... То, как я вам дал, скажите 'INSERT INTO rent (id, pRent, status) VALUES ((NULL, 0," vacant "), (NULL, 0," vacant "))', но вам понадобится что-то, чтобы сгенерировать утверждение, поскольку никто не хочет напишите, что все ... –

0

Хорошая точка "СП". Но он также может установить значение по умолчанию, а затем выполнить UPDATE, поэтому он может использовать значение автоинкремента в «id».

+0

Я согласен, вот что я предложил в первую очередь, и, видя, что это похоже на одноразовый запрос, это то, что он должен делать;) –

0

я нашел отличный способ вставки 1000

INSERT INTO 
    myTable 
    (
    nr 
    ) 
SELECT 
    SEQ.SeqValue 
FROM 
(
SELECT 
    (HUNDREDS.SeqValue + TENS.SeqValue + ONES.SeqValue) SeqValue 
FROM 
    (
    SELECT 0 SeqValue 
    UNION ALL 
    SELECT 1 SeqValue 
    UNION ALL 
    SELECT 2 SeqValue 
    UNION ALL 
    SELECT 3 SeqValue 
    UNION ALL 
    SELECT 4 SeqValue 
    UNION ALL 
    SELECT 5 SeqValue 
    UNION ALL 
    SELECT 6 SeqValue 
    UNION ALL 
    SELECT 7 SeqValue 
    UNION ALL 
    SELECT 8 SeqValue 
    UNION ALL 
    SELECT 9 SeqValue 
    ) ONES 
CROSS JOIN 
    (
    SELECT 0 SeqValue 
    UNION ALL 
    SELECT 10 SeqValue 
    UNION ALL 
    SELECT 20 SeqValue 
    UNION ALL 
    SELECT 30 SeqValue 
    UNION ALL 
    SELECT 40 SeqValue 
    UNION ALL 
    SELECT 50 SeqValue 
    UNION ALL 
    SELECT 60 SeqValue 
    UNION ALL 
    SELECT 70 SeqValue 
    UNION ALL 
    SELECT 80 SeqValue 
    UNION ALL 
    SELECT 90 SeqValue 
    ) TENS 
CROSS JOIN 
    (
    SELECT 0 SeqValue 
    UNION ALL 
    SELECT 100 SeqValue 
    UNION ALL 
    SELECT 200 SeqValue 
    UNION ALL 
    SELECT 300 SeqValue 
    UNION ALL 
    SELECT 400 SeqValue 
    UNION ALL 
    SELECT 500 SeqValue 
    UNION ALL 
    SELECT 600 SeqValue 
    UNION ALL 
    SELECT 700 SeqValue 
    UNION ALL 
    SELECT 800 SeqValue 
    UNION ALL 
    SELECT 900 SeqValue 
    ) HUNDREDS 
) SEQ 
+0

после этого я использовал команду sql "update rent set set dNo = id " – methuselah

+1

Да, это способ генерации последовательностей в mysql; есть другие способы, см. http://stackoverflow.com/questions/304461/generate-an-integer-sequence-in-mysql. однако это не имеет отношения к вашему вопросу. – Unreason

0

300 записей не много, но в зависимости от формата у вас есть данные в возможно, вы можете использовать LOAD DATA