|
Как скопировать строку таблицы БД на MySQL одним запросом? | ☑ | ||
---|---|---|---|---|
0
D_Pavel
13.04.16
✎
19:23
|
Собственно сабдж.
Как скопировать строку таблицы БД на MySQL одним запросом? В таблице много колонок и ключевая тоже есть, все перечислять в тексте запроса не красиво. И они могут добавиться позже, переписывать запрос каждый раз тоже не красиво. |
|||
1
ДенисЧ
13.04.16
✎
19:25
|
insert into
select * from не катит? |
|||
2
D_Pavel
13.04.16
✎
19:28
|
(1) Нет конечно. Задублируется уникальный ключ и ошибка будет.
|
|||
3
mehfk
13.04.16
✎
19:29
|
Учитывая авторство ветки, рекомендуется запасаться попкорном.
|
|||
4
D_Pavel
13.04.16
✎
19:41
|
(3) Учитывая что вопрос очень сложный, долго будешь хавать попкорн прежде чем кто-нибудь ответит.
|
|||
5
mehfk
13.04.16
✎
19:43
|
(4) В таких случаях в приличном обществе говорят "Приятного аппетита".
|
|||
6
Cyberhawk
13.04.16
✎
19:52
|
А что значит "скопировать строку"? Вставить в конец совпадающую по всем полям?
|
|||
7
D_Pavel
13.04.16
✎
19:57
|
(6) Да.
|
|||
8
D_Pavel
13.04.16
✎
19:59
|
Типа как когда в одноэске нажимаешь F9 когда находишься в форме списка.
|
|||
9
D_Pavel
13.04.16
✎
20:09
|
В 1 запрос по любому не получится. Можно хоть в 10, не принципиально, лишь бы поля не перечислять.
|
|||
10
ДенисЧ
13.04.16
✎
20:11
|
в мыскле вроде был insert or update, не?
|
|||
11
trad
13.04.16
✎
20:18
|
(7) в понятие "все поля" ключевые поля входят?
|
|||
12
D_Pavel
13.04.16
✎
21:03
|
(10) Да, есть там такое.
|
|||
13
D_Pavel
13.04.16
✎
21:04
|
(11) Нет конечно. См ответ на (1)
|
|||
14
youalex
13.04.16
✎
21:11
|
в ms можно через времянку, но это три запроса:
select * into #temp from table1 t1 where t1.keyfield = 1 update #temp set keyfield = 2 insert into table1 select * from #temp |
|||
15
D_Pavel
13.04.16
✎
21:14
|
(14) Три запроса терпимо.
Почему "= 2"? Не подходит. |
|||
16
D_Pavel
13.04.16
✎
21:15
|
У меня получилось только в 5 запросов написать. Меньше никак не могу, всю голову сломал. Второй день думаю.
|
|||
17
mingw
13.04.16
✎
21:26
|
CREATE TEMPORARY TABLE foo AS SELECT * FROM parts WHERE id = X;
UPDATE foo SET id=NULL; INSERT INTO parts SELECT * FROM foo; DROP TABLE foo; Самое главное а работе программиста что? Гугль и яндекс: http://www.sql.ru/forum/471879/dublirovat-stroku-v-tablice |
|||
18
youalex
13.04.16
✎
21:27
|
(15) это пример, я же не знаю какая структура таблицы)
|
|||
19
mingw
13.04.16
✎
21:28
|
(17)+ Когда требуется не обNULLить одно из полей а исключить. И не перечисляя все остальные. То извраты под каждую БД свои: http://www.sql-ex.ru/help/select20.php?Lang=0
|
|||
20
Broadbread
13.04.16
✎
21:42
|
||||
21
mingw
13.04.16
✎
21:47
|
(20) INSERT IGNORE INTO ... пропустит значения с дублем по ключу. Как это поможет (0)?
|
|||
22
Broadbread
13.04.16
✎
21:51
|
(21) Ух ты. Я только забил строку поиска и почитал по диагонали результат. Интересно, зачем оно такое?
|
|||
23
mingw
13.04.16
✎
21:55
|
(22) Для апдейта таблицы новыми записями. Не трогая имеющиеся. Дубли пропустит. Без ексепшена.
|
|||
24
trad
13.04.16
✎
23:51
|
(13) какой принцип определения значения ключевого поля новой строки?
|
|||
25
D_Pavel
14.04.16
✎
06:05
|
(17) Скопипастил сам не понял что.
UPDATE foo SET id=NULL; Как ты к первичному ключу присваиваешь NULL? Это фантастика! |
|||
26
D_Pavel
14.04.16
✎
06:09
|
(19) Хорошая ссылка. Спасибо!
|
|||
27
D_Pavel
14.04.16
✎
06:14
|
(24) Новое значение ключевого поля получается из сохраненного значения переменной плюс один. Значение переменной тоже увеличивается на единицу и сохраняется где-то в сервере.
|
|||
28
D_Pavel
14.04.16
✎
10:44
|
Есть еще хорошие идеи?
|
|||
29
los_hooliganos
14.04.16
✎
10:57
|
(28) Обойди курсором, сделай запросы в цикле
|
|||
30
mingw
14.04.16
✎
11:01
|
(25) Запросто присваиваю ключу NULL. Это временная таблица. Как в (14). Только синтаксис под mysql.
|
|||
31
Жан Пердежон
14.04.16
✎
11:08
|
http://dev.mysql.com/doc/refman/5.7/en/insert.html
3й вариант, закрывайте тему |
|||
32
mingw
14.04.16
✎
11:20
|
(31) ... ON DUPLICATE KEY UPDATE
id=NULL ? да вариант вполне |
|||
33
D_Pavel
14.04.16
✎
11:26
|
(30) (32) нельзя ключу присвоить NULL
|
|||
34
mingw
14.04.16
✎
11:27
|
(33) Мдя. Нет слов. Пусть кто другой найдет.
|
|||
35
D_Pavel
14.04.16
✎
11:27
|
Вот специально для тебя проверку запустил:
CREATE TEMPORARY TABLE foo AS SELECT * FROM list_queries WHERE id = 1602 Query executed OK, 1 row affected. (0.010 s) UPDATE foo SET id=NULL Error in query (1048): Column 'id' cannot be null |
|||
36
Господин ПЖ
14.04.16
✎
11:28
|
нельзя просто так взять и присвоить null
|
|||
37
Mikeware
14.04.16
✎
11:30
|
(36) ему можно. Ему даже можно выезжать на переезд при закрытом шлагбауме и перед приближающимся поездом...
|
|||
38
D_Pavel
14.04.16
✎
11:35
|
(31) не третий, а второй. Молодец, хорошая ссылка
|
|||
39
mingw
14.04.16
✎
11:42
|
(35) Каким образом (и зачем) для временной таблицы указал примари кей?
(36) Иногда можно (37) Смотря на чем выезжать. |
|||
40
D_Pavel
14.04.16
✎
11:44
|
(39) Где я указывал для временной таблицы примари кей? Не вижу. Покажи откуда ты это взял.
Примари кей создается сам, потому что он указан для таблицы на основании которой создается временная. |
|||
41
mingw
14.04.16
✎
12:42
|
(40) Ну так разреши NULL. Во временной.
|
|||
42
D_Pavel
14.04.16
✎
13:23
|
(41) Ну так это и был тот вариант который я придумал вначале. Но он мне не нравится из-за лишней возни. То создается не нужный ключ, потом его удалять надо. Не красиво.
Ничего лучше не придумать? |
|||
43
Cyberhawk
14.04.16
✎
14:08
|
(27) Так это уже неуниверсально - вдруг первичный ключ не число или дата, а вдруг он еще и составной...
|
|||
44
D_Pavel
14.04.16
✎
20:18
|
(43) Первичный ключ не может быть датой
|
|||
45
mingw
14.04.16
✎
20:59
|
||||
46
D_Pavel
15.04.16
✎
08:38
|
(45) Однако может
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |