Magic
10.09.2017
09:37:32
если есть id то заменить text, если нет то добавить, верно?
Oliver
10.09.2017
09:39:10
Magic
10.09.2017
09:40:09
Oliver
10.09.2017
09:40:59
Нет, параметров больше)
Это я для теста сократил.
Google
Magic
10.09.2017
09:41:19
зачем replace?
Oliver
10.09.2017
09:43:05
В чём проблема то, обьясните если не сложно)
Уже час вожусь и не пойму что к чему.
Magic
10.09.2017
09:56:26
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:14:24
Magic
10.09.2017
10:14:40
value это то поле которое ты обновляешь
Oliver
10.09.2017
10:17:36
Аа.. почему + 1 ?
value = $value Так можно ?
Magic
10.09.2017
10:18:18
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
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() не работают...
Yaroslav
10.09.2017
18:41:02
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
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+ раза больше.