Вставить одно и то же фиксированное значение в несколько строк

У меня есть таблица со столбцом, назовем ее table_column, которая сейчас null для всех строк таблицы. Я хотел бы вставить значение "test" в этот столбец для всех строк. Может ли кто-нибудь дать мне для этого SQL?

Я пробовал INSERT INTO table (table_column) VALUES ("test");, но это заполняет только последнюю строку. Как сделать все строки сразу?


person TheDelChop    schedule 14.01.2011    source источник


Ответы (6)


Вы ищете ОБНОВЛЕНИЕ без вставки.

UPDATE mytable
SET    table_column = 'test';

UPDATE изменит значения существующих строк (и может включать WHERE, чтобы он влиял только на определенные строки), тогда как INSERT добавляет новую строку (что делает вид, будто он изменил только последнюю строку, но фактически добавляет новый строка с этим значением).

person Brad Christie    schedule 14.01.2011
comment
Нашел вопрос, потому что я на самом деле действительно хочу вставить несколько строк со всеми одинаковыми значениями столбцов (кроме автоинкрементируемого первичного ключа, который я бы все равно не предоставлял во вставке). - person Michael; 27.04.2017
comment
Используйте SET SQL_SAFE_UPDATES = 0;, если Workbench выдает какие-либо ошибки - person Arefe; 03.09.2017

Это связано с тем, что в терминологии реляционной базы данных то, что вы хотите сделать, называется не «вставкой», а «ОБНОВЛЕНИЕМ» - вы обновляете поле существующей строки с одного значения (NULL в вашем случае) на «тест».

UPDATE your_table SET table_column = "test" 
WHERE table_column = NULL 

Вторая строка не нужна, если вы хотите обновить 100% строк.

person DVK    schedule 14.01.2011
comment
Я поставил вам +1 только потому, что вы единственный, кто опубликовал ответ и причину. Никто на SO, похоже, больше не публикует аргументов или ссылок, они хотят быть первыми в розыгрыше. - person Brad Christie; 14.01.2011
comment
Как ни странно, я просто дал вам +1 за исчерпывающий ответ и особенно ссылочную ссылку :) - person DVK; 14.01.2011
comment
@Brad Честно говоря, сначала вы также разместили только необработанный ответ - затем вы отредактировали свой пост, чтобы добавить некоторые пояснения. Когда я отправил свой ответ, ваш был на 30 впереди и уже получил 2 положительных голоса ... Итак, вы правы, первый в розыгрыше получил положительный голос за такой вопрос. - person Breaking not so bad; 14.01.2011
comment
@ ring0: Вы правы, но более или менее растолкали и отправили форму заранее. Я по-прежнему считаю важным дать дополнительные пояснения по таким вопросам, как этот. Старики научат человека ловить рыбу пословица, не здесь, используйте это - это сделает то, что вы хотите. Иногда мне кажется, что люди слишком быстро голосуют за неработающий пост не самого лучшего качества, но я мало что могу с этим поделать. Я видел сообщения с 10 голосами «за» и просто работающим кодом, который был успешным и стал ответом, тогда как сообщение без голосов «за» и описательный ответ остается внизу. : пожимать плечами: - person Brad Christie; 14.01.2011
comment
@ ring0 - Да, это правда. Лучшая стратегия - сразу опубликовать короткий (но содержательный и правильный) ответ, а затем, возможно, отредактировать его, чтобы добавить несколько дополнительных пунктов. Шаблоны голосования не благоприятствуют тем, кто составляет полный ответ перед тем, как опубликовать этот простой вопрос. - person Martin Smith; 14.01.2011

На самом деле вы добавляете строки. Чтобы обновить содержимое существующих строк, используйте оператор UPDATE:

UPDATE table SET table_column = 'test';
person Nicolas Buduroi    schedule 14.01.2011

Чтобы обновить содержимое существующих строк, используйте оператор UPDATE:

UPDATE table_name SET table_column = 'test';
person Sani Kamal    schedule 12.11.2019

Вам нужен SQL:

Update table set table_column = "test";

Опубликованный вами SQL-запрос создает новую строку, а не обновляет существующие.

person James Lelyveld    schedule 14.01.2011

Чтобы создать новый пустой столбец и заполнить его одинаковым значением (здесь 100) для каждой строки (в Toad для Oracle):

ALTER TABLE my_table ADD new_column INT;
UPDATE my_table SET new_column = 100;
person jeppoo1    schedule 04.03.2020