mysql> INSERT INTO table (A = "constant", B) VALUES
Нет, в MySQL такой синтаксис отсутствует.Вот справочная страница синтаксиса для INSERT в MySQL: https://dev.mysql.com/doc/refman/8.0/en/insert.html
Если вы хотите использовать многострочную INSERT, вы должны дать выражение для каждого столбца в кортеже для каждой строки.Выражение может быть одной и той же константой в каждой строке, как в исходном примере:
mysql> INSERT INTO table (A, B) VALUES
("constant", 1),
("constant", 2),
("constant", 3);
Или это может быть переменная сеанса (как @wchiquito прокомментировал выше).
mysql> SET @c = 'constant';
mysql> INSERT INTO table (A, B) VALUES
(@c, 1),
(@c, 2),
(@c, 3);
Или вы можете загрузить значения во временную таблицу и затем скопировать их в финальную таблицу (прокомментировал Маурисио Хавьер Био) выше:
mysql> CREATE TEMPORARY TABLE temptable (B INT);
mysql> INSERT INTO temptable (A, B) VALUES
(1),
(2),
(3);
mysql> INSERT INTO table (A, B)
SELECT 'constant', B FROM temptable;
Вот еще одно решение.Предполагая, что data.txt
содержит только те поля, которые вам нужны, чтобы в каждой строке было отдельное значение, вы можете использовать LOAD DATA LOCAL INFILE и установить инвариантный столбец в последнем предложении SET.
mysql> LOAD DATA LOCAL INFILE 'data.txt'
INTO TABLE mytable (B)
SET A = 'constant';
Вы сделали еще одно утверждение в своем вопросе:
... примите время в 5 мс в качестве перегрузки сети.
Я думаю, это невероятное предположение.Я только что измерил задержку сети моего приложения в моем центре обработки данных, и он в 36-50 раз меньше того, что вы предлагаете.
64 bytes from (10.4.12.100): icmp_seq=1 ttl=64 time=0.112 ms
64 bytes from (10.4.12.100): icmp_seq=2 ttl=64 time=0.138 ms
64 bytes from (10.4.12.100): icmp_seq=3 ttl=64 time=0.103 ms
64 bytes from (10.4.12.100): icmp_seq=4 ttl=64 time=0.108 ms
...
Это примерно одна десятая миллисекунды за цикл, а не 5 мс.
Задержка в сети при выполнении подготовленного оператора 3000 раз будет не более 414 миллисекунд, а не 3000 * 5 мс = 15 секунд.Если задержка в сети делает вашу задачу неприемлемой, вы должны улучшить свою сеть.
Наконец, вы можете увидеть тесты, которые я сделал для своей презентации Быстрая загрузка данных! Я сравниваюINSERT с одной строкой или INSERT с несколькими строками и LOAD DATA.