@mysql_ru

Страница 68 из 142
Magic
10.09.2017
09:37:32
если есть id то заменить text, если нет то добавить, верно?

Oliver
10.09.2017
09:39:10
если есть id то заменить text, если нет то добавить, верно?
Не совсем, проверка по тексту. Если есть такой текст то обновить остальные параметры, а если нет то новая строка.

Oliver
10.09.2017
09:40:59
Нет, параметров больше) Это я для теста сократил.

Google
Magic
10.09.2017
09:41:19
зачем replace?

Oliver
10.09.2017
09:43:05
insert on duplicate update
Пробовал! Тоже самое - новая строка. Почему не реплейс ?

В чём проблема то, обьясните если не сложно) Уже час вожусь и не пойму что к чему.

Oliver
10.09.2017
09:57:42
INSERT INTO table1 SET text = 'text' ON DUPLICATE KEY UPDATE text = 'text' REPLACE INTO table1 SET text = 'text'

Magic
10.09.2017
09:58:35
INSERT INTO table1 SET text = 'text' нет такого синтакиса у инсерта

Oliver
10.09.2017
10:02:26
Можно так, результат не изменяется) INSERT INTO Source (text) VALUES('text') ON DUPLICATE KEY UPDATE text = 'text'

Magic
10.09.2017
10:02:43
Ты с таблицей что-то намудрил

во первых у тебя text должен быть unique

потому что обычный запрос на вставку - добавляет новое поле

Oliver
10.09.2017
10:03:42
CREATE TABLE Source ( id int(11) unsigned NOT NULL AUTO_INCREMENT, text text, PRIMARY KEY (`id`), KEY TEXT (`text`(128)) ) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

Magic
10.09.2017
10:03:49
Я видел

Google
Oliver
10.09.2017
10:03:56
Вот. Что не так ?

Magic
10.09.2017
10:04:32
а надо примерно так: CREATE TABLE table1 ( id INT(11) NOT NULL AUTO_INCREMENT , text VARCHAR(100) NOT NULL , value INT(11) NOT NULL DEFAULT '0' , PRIMARY KEY (id), UNIQUE text (text) ) ENGINE = InnoDB;

Oliver
10.09.2017
10:04:34
Больше ничего не мудрил.

Magic
10.09.2017
10:09:14
а надо примерно так: CREATE TABLE table1 ( id INT(11) NOT NULL AUTO_INCREMENT , text VARCHAR(100) NOT NULL , value INT(11) NOT NULL DEFAULT '0' , PRIMARY KEY (id), UNIQUE text (text) ) ENGINE = InnoDB;
и тогда запрос вида INSERT INTO table1 (id, text, value) VALUES (NULL, 'row', '0') ON DUPLICATE KEY UPDATE value = value + 1 будет добавлять запись только в том случае, если такого text в таблице нет. если есть, то увеличит value

Oliver
10.09.2017
10:17:36
Аа.. почему + 1 ? value = $value Так можно ?

Magic
10.09.2017
10:18:18
Аа.. почему + 1 ? value = $value Так можно ?
ну я для примера счетчик на 1 увеличиваю, по тому и +1 конечно можно param = 'new value'

Oliver
10.09.2017
10:27:57
INSERT INTO table1 (id, text, v) VALUES (NULL, 'sdfsdfsdfsdfsdfggdfhhhhh', '0') ON DUPLICATE KEY UPDATE v = v + 1 Не работает ! Новая строка и всё!!! ?

Magic
10.09.2017
10:28:27
INSERT INTO table1 (id, text, v) VALUES (NULL, 'sdfsdfsdfsdfsdfggdfhhhhh', '0') ON DUPLICATE KEY UPDATE v = v + 1 Не работает ! Новая строка и всё!!! ?
с примером таблицы как выше у меня и запросом как у меня - все работает.

Oliver
10.09.2017
10:35:45
Пересоздал таблицу и все заработало!!! ВСЕМ ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ. Кто нибудь может объяснить сто это за глюк ?

Magic
10.09.2017
10:36:01
вот что

я без понятия что ты этим пытался сделать и как ты это сделал

но так не правильно. поле не было unique, от того и запись не считалась "дублем"

Oliver
10.09.2017
10:37:44
Так я и сейчас так же сделал))) CREATE TABLE table1 ( id int(11) unsigned NOT NULL AUTO_INCREMENT, text text, v int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY text (`text`(128)) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;



Работую с базой в SequelPro - это простенькая утилитка с минимальными возможностями. Там пока это поле не задашь, недает ключ добавить)

Google
Magic
10.09.2017
10:40:40


приводит к такому: CREATE TABLE table1 ( id INT NOT NULL AUTO_INCREMENT , text TEXT NOT NULL , value INT(11) NOT NULL DEFAULT '0' , PRIMARY KEY (id), UNIQUE text (text)) ENGINE = InnoDB;

только тогда у тебя не было Unique

Oliver
10.09.2017
10:42:56
Точно! Уже докрасноглазелся, что незаметил.

Пытаюсь старую таблицу поправить, не получается)) Удалил эту порнографию(KEY TEXT (text(128))) Теперь когда хочу добавить ключ то вижу это: MySQL сказал: Duplicate entry 'NULL' for key 'T'

merk
10.09.2017
16:00:59
Все привет, как установить DEFAULT значение стобца DATE на NOW()??? CURRENT_DATE и NOW() не работают...

lost
10.09.2017
19:59:39
Используй timestamp

Ad.x ??
11.09.2017
03:52:35
скорее всего, generated columns там тоже ни при чём
По суточному тесту на реальных сайтах. В целом на 35к посещалке(~280-300тысяч просмотров\сутки) работает стабильно, вот только процессор нагрузило на 4-5%. А таблица небольшая пока(90к записей), и если увеличить ее в несколько десятков раз оно проц сожрет нафиг поди ) Ошибок с блокировками нету, что радует. В общем сильно помогли, благодарю)

Ndyann
11.09.2017
05:36:59
t.me/telelap — каталог самых полезных и интересных каналов в телеграм. Присоединяйся к нам!

Danil
11.09.2017
06:00:58
/s[am

CyanFox
11.09.2017
09:40:03
/command1@SpamkillerBot

Ivan
11.09.2017
09:40:49
/command1@SpamkillerBot

Lucky
12.09.2017
07:56:59
Есть три таблицы, некоторые столбцы, в которых пересекаются. Возможно ли как-то сделать один SELECT всех "связанных" строк в три таблицы не используя foreign key?

lost
12.09.2017
08:12:44
Это как удалять апендецит ректально?

Lucky
12.09.2017
08:16:26
С простыми вопросами приходить сюда нет смысла.

Danil
12.09.2017
08:27:18
С простыми вопросами приходить сюда нет смысла.
В даном чате помогают по мере возможностей. В том числе и с простыми вещами. Но желательно чуть лучьше формулировать сам вопрос. Мне к сожалению совершенно не поянтно зачем при селекте (это же тосмотреть) забывать ключи (это же для записи больше надо).

Lucky
12.09.2017
08:30:35
В даном чате помогают по мере возможностей. В том числе и с простыми вещами. Но желательно чуть лучьше формулировать сам вопрос. Мне к сожалению совершенно не поянтно зачем при селекте (это же тосмотреть) забывать ключи (это же для записи больше надо).
Да я не против того, что помогают или не помогают, но если я способен сам найти решение в обозримое время, то зачем дёргать людей лишний раз? А fk пока лид не даёт использовать. Хотя если ничего не делать по триггеру fk, то думаю, что большого вреда от них не будет... Но пока хотелось бы поискать варианты без них.

lost
12.09.2017
08:54:39
селект 3х связанных таблиц можно сделать с помощью join

Google
lost
12.09.2017
08:54:43
и ключи для этого не нужны

нужны индексы

и правильно лид на даёт

внешние ключи - это зло

Yaroslav
12.09.2017
08:59:19
lost
12.09.2017
08:59:51
потому что в реалиях mvcc и всяких этих ваших хайлоадов это снижение производительности и накладные расходы

Yaroslav
12.09.2017
09:00:07
отличный аргумент

lost
12.09.2017
09:01:02
ключи нужно использовать только в конкретно нужных местах, а не совать их куда не попадя

Yaroslav
12.09.2017
09:02:13
если у тебя id используеться во всех таблицах, ты при апдейте в родителе меняешь везде

и не паришься

это реляционная бд, целостность все дела

а насчет highload куча других методов

lost
12.09.2017
09:03:03
а потом где-нибудь в транзакции ты изменил способ обновления данных и получил deadlock

Yaroslav
12.09.2017
09:03:28
ладно, просто не нравиться этот аргумент

Lucky
12.09.2017
09:11:28
селект 3х связанных таблиц можно сделать с помощью join
SELECT tbl1.* FROM tbl1 INNER JOIN tbl2 ON tbl1.tbl1_id = tbl2.tbl1_id INNER JOIN tbl3 ON tbl2.tbl2_id = tbl3.tbl2_id WHERE tbl1.tbl1_id in ( SELECT tbl1_id FROM DB.tbl1_Version WHERE version BETWEEN @cache_version AND @global_version) group by tbl1_id;

Пока так делаю

lost
12.09.2017
09:11:56
а почему подзапрос не перенести в join ?

толстая таблица?

Lucky
12.09.2017
09:12:37
tbl1_version?

lost
12.09.2017
09:14:14
да

Google
Lucky
12.09.2017
09:23:36
да
Где-то в 1.5+ раза больше.

Страница 68 из 142