
Ринат
04.07.2017
10:16:16
он делает инсерт, в результате чего увеличивается автоинкремент

Fike
04.07.2017
10:16:32
у тебя скоростей не хватит столько в секунду писать, чтобы они к твоей смерти кончились

Ринат
04.07.2017
10:16:52
https://habrahabr.ru/post/156489/

Google

Alexey
04.07.2017
10:17:03
on duplicate key update делает либо инсерт, либо апдейт, но не вместе

Ринат
04.07.2017
10:17:09
прочти выше статью
да и проверил я уже

Alexey
04.07.2017
10:19:20
прочти выше статью
в статье долго и нудно рассказывают то, что я написал выше. в чём проблема-то в итоге? в том, что autoincrement значения теряются при вставке?

lost
04.07.2017
10:19:42
дырки в данных будут, бяда(

Alexey
04.07.2017
10:20:00
хех

Ринат
04.07.2017
10:21:22

Maksim
05.07.2017
13:40:31
приветствую, помогите разобраться
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1215, 'Cannot add foreign key constraint') [SQL: 'ALTER TABLE abbrev_food_group ADD FOREIGN KEY(ndb) REFERENCES abbrev (ndb)']
был разный тип данных
abbrev | CREATE TABLE abbrev (
ndb int(11) NOT NULL,
abbrev_food_group | CREATE TABLE abbrev_food_group (
ndb int(11) NOT NULL,
привет к единному типу, а добавить не может
в одной был тип float, может поэтому?

lost
05.07.2017
13:53:30
значения в таблицах проверял?

Fike
05.07.2017
13:54:05
тот ключ, на который пытаешься сослаться - он уникальный?

Google

Maksim
05.07.2017
14:04:54
mysql> select count(*), ndb from abbrev group by ndb having count(*) > 1;
Empty set (0,20 sec)
mysql> select count(*), ndb from abbrev_food_group group by ndb having count(*) > 1;
Empty set (0,24 sec)

lost
05.07.2017
14:09:04
давай ddl таблиц, индекс видими нужен ключу, в мускуле ключ необязательно должен быть уникальным

Maksim
05.07.2017
14:14:49
https://pastebin.com/h4y26kkJ

lost
05.07.2017
14:32:37
добавь на таблицу ndb либо primary key, либо просто индекс
если требуется неуникальность
и в innodb лучше вообще не делать таблицы без первичного ключа

Fike
05.07.2017
14:35:27


Maksim
05.07.2017
14:36:56
Если в кратце описать, люди в ручную писали скрипты для добавления в бд, а потом захотели прикрепить миграции и вот получилась пачка изменений, которые невозможно принять
# ### commands auto generated by Alembic - please adjust! ###
#op.create_foreign_key(None, 'abbrev_food_group', 'abbrev', ['ndb'], ['ndb'])
#op.drop_index('useridconst_idx', table_name='clients')
#op.create_foreign_key(None, 'clients', 'doctors', ['doctor_id'], ['id'])
#op.drop_index('useridconstfordoctors_idx', table_name='doctors')
op.create_unique_constraint(None, 'recipe', ['title'])
op.alter_column('recipe_ingredient', 'ingredient_id',
existing_type=mysql.INTEGER(display_width=11),
nullable=True)
op.alter_column('recipe_ingredient', 'recipe_id',
existing_type=mysql.INTEGER(display_width=11),
nullable=True)
op.drop_index('name_UNIQUE', table_name='roles')
op.alter_column('users_roles', 'role_id',
existing_type=mysql.INTEGER(display_width=11),
nullable=True)
op.drop_index('fk_users_roles_1_idx', table_name='users_roles')
op.drop_index('fk_users_roles_2_idx', table_name='users_roles')
op.drop_constraint('fk_users_roles_1', 'users_roles', type_='foreignkey')
op.drop_constraint('fk_users_roles_2', 'users_roles', type_='foreignkey')
как лучше сделать? создать чистую бд через орм и потом накатить данные (может дамп не накатится)
или попытаться все таки все это исправить?


lost
05.07.2017
14:42:03
сверить скрипты миграции со схемой данных в базе и исправить
`
CREATE TABLE abbrev_food_group (
ndb int(11) NOT NULL,
group_id int(11) DEFAULT NULL,
PRIMARY KEY (ndb),
KEY group_id (group_id),
CONSTRAINT abbrev_food_group_ibfk_1 FOREIGN KEY (group_id) REFERENCES food_group (group_id),
CONSTRAINT abbrev_food_group_ibfk_2 FOREIGN KEY (group_id) REFERENCES food_group (group_id),
CONSTRAINT abbrev_food_group_ibfk_3 FOREIGN KEY (group_id) REFERENCES food_group (group_id),
CONSTRAINT abbrev_food_group_ibfk_4 FOREIGN KEY (group_id) REFERENCES food_group (group_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
`
вот это вообще жесть какая-то

Fike
05.07.2017
14:46:20

merk
07.07.2017
08:05:07
Всем привет, может кто помочь с типом данных SET?
Интересует скорость работы. Основня идея - использовать для хранения флагов доступа пользователей. Целесообразно ли это? Будут ли проблемы при больших объемах записей? Индексирует ли mysql столбцы с этим типом?

lost
07.07.2017
10:13:43
Внутреннее представление у него числовое, индексироваться должен
Если флагов больше 64 можно свою битовую маску намутить

merk
07.07.2017
10:39:48
Предствление то понятно числовое это по сути byte, только вот byte как число тоже индексируется, а если делать выборку по битовой маске, то индексация не работает. В документации про интексацию не нашал ничего толком...
Флагов меньше 64, поэтому выбор и пал на set

Google

lost
07.07.2017
11:58:35
если ты собираешься именно выбирать по правам доступа, то лучше завести интовую колонку и выбирать по инту

Starina
07.07.2017
17:06:57

Alexander
07.07.2017
17:12:08
вставить одним запросом

Fike
07.07.2017
17:12:42
о да, это даст несколько микросекунд выигрыша
Доку про PDO прочитать. И не вставлять в первичный ключ непонятно что.

Starina
07.07.2017
17:13:54
спасибо

Stanislav
07.07.2017
20:30:33
приветствую1
есть форум — сменил хостинг, установил движок, подключил старую базу, при добавлении расширения (flagrow) получаю эту ошибку
помогите разобраться с ошибкой
General error: 1005 Can't create table 'eikon145.#sql-83f_5c20' (errno: 150)
SHOW ENGINE INNODB STATUS; показывает
------------------------
LATEST FOREIGN KEY ERROR
------------------------
170707 19:55:50 Error in foreign key constraint of table `eikon145`.`flagrow_file_downloads`:
Alter table `eikon145`.`flagrow_file_downloads` with foreign key constraint failed. Referenced table `eikon145`.`flagrow_files` not found in the data dictionary near ' foreign key (`file_id`) references `flagrow_files` (`id`) on delete cascade'.
SET FOREIGN_KEY_CHECKS = 0; не помогает =(

lost
07.07.2017
21:12:02
он случайно не пытается создать ключ раньше создания таблицы?

Stanislav
07.07.2017
21:19:41

Alexey
07.07.2017
22:06:45

Otto
10.07.2017
11:26:49
Всем прив. на стороне MySQL хочу сделать арифметику, прим. такого вида:
Если поле A == 1, тогда поле B * на поле C, и сохранить в поле D
в кокую сторону копать? дайте наводку? процедура мне нужна да?

Alexey
10.07.2017
11:33:21

Fike
10.07.2017
12:30:51
кАкую

Otto
10.07.2017
12:33:03
а вичисление как считать?

Dan
10.07.2017
22:36:15
Коллеги, нужна помощь коллективного разума. Перетащили с большого сервера на несколько мелких облачных разные проекты. Один из проектов раз в 5-7 минут по крону в базу mysql обновляет (а также создаёт новые и удаляет старые) десятки тысяч записей. Так получилось, что ресурсов облачного компа ему не хватило, и в какой-то момент база покрашилась. Потом она завелась, и перешла в режим автоматического repair.
Всё бы ничего, но место там хдд ограничено, и база сама по себе обычно занимает 3-4 гига. Тем не менее, repair уже занимает больше 14 часов, а свободное место на диске 2 гига из 20.
Не стал бы спрашивать, если бы не изучил предварительно гугл

Google

Dan
10.07.2017
22:36:44
Пока склоняюсь к мистической версии
iotop показывает загрузку в 98-99% процесса mysqld, с ~2.5-3Mb/s
mytop показывает Query Repair table

lost
10.07.2017
22:43:42
Так а распухла то из-за чего база?

Dan
10.07.2017
22:47:35
из-за repair
сейчас только он запущен. а файл растёт ?
я вообще с таким впервые сталкиваюсь

Pavel
10.07.2017
23:21:37
напишешь, чем все в итоге закончится?) а то интересно)

Alexey
11.07.2017
07:12:28
Коллеги, нужна помощь коллективного разума. Перетащили с большого сервера на несколько мелких облачных разные проекты. Один из проектов раз в 5-7 минут по крону в базу mysql обновляет (а также создаёт новые и удаляет старые) десятки тысяч записей. Так получилось, что ресурсов облачного компа ему не хватило, и в какой-то момент база покрашилась. Потом она завелась, и перешла в режим автоматического repair.
Всё бы ничего, но место там хдд ограничено, и база сама по себе обычно занимает 3-4 гига. Тем не менее, repair уже занимает больше 14 часов, а свободное место на диске 2 гига из 20.
не увидел, в чём собственно вопрос. предположу, что вопрос "как предотвратить распухание файлов данных при repair?". ответ: никак, нужно перестроить данные и индексы, для этого нужно примерно столько же свободного места на диске, сколько они занимают

Dan
11.07.2017
07:14:04

Alexey
11.07.2017
07:15:15
да, можно скопировать весь datadir на другую машину и там восстанавливать
и вот я бы ещё от myisam в перспективе отказался. зачем её использовать в 2017 году — не понимаю

Dan
11.07.2017
07:17:01
но да, попробуем всё это как-то вот на другой машине видимо запустить :-/

Alexey
11.07.2017
07:18:37
ну, переход от myisam к innodb — это простая вещь, которую пользователи-то скорее и не заметят. зато админ заметит в таких вот случаях

Dan
11.07.2017
07:19:58
я же говорю, вопрос не ко мне. к разработчику. им нужно чтобы был MyISAM