|
|
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
Такая оказия… Вот запрос: Код: sql 1. 2. 3. Это повторяющаяся часть запроса, вырезанная из цикла. Здесь в таблицу заносится массив слов с пропуском уже существующих. Но заметил, что эта зараза слова-то пропускает, а вот первичный ключ повышает всё равно и получаются большие дырки в первичном ключе: занёс слов сто, а показывает номер последнего слова аж за 800… Как сделать так, чтобы пропуская уже существующее в таблице слово, первичный ключ не накручивался, а повышался только при записи именно нового слова? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 05:29:50 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
это тебя не должно волновать. значений первичного ключа тебе хватит с бльшим запасом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 06:42:29 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
+а если нужна своя нумерация, то надо завести своё поле для своей нумерации, т.к. нумерация не есть назначение ПК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 08:42:45 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
Но вы так и не ответили, на это можно повлиять или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 12:36:31 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
andrejkНо вы так и не ответили, на это можно повлиять или нет?Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 12:38:07 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
Точнее, можно, но ухудшив производительность. Схема такая: 1) Блокируете таблицу 2) SELECT-ом проверяете наличие нужной записи 3) Если нет, то INSERT 4) Снимаете блокировку Это приведет к ухудшению быстродействия как отдельных вставок, так и в массе из разных сессий (они будут выполняться последовательно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 12:41:05 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
Просто получается очень огромные дырки будут, т. к. в бд постоянно будут попытки занести дубликат. И среди этих попыток, если появится слово новое, то у него будет уже огроменный индекс. Может тогда лучше переписать запрос, чтобы проверялось сначала наличие , а потом только вставлялось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 14:03:03 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
andrejkу него будет уже огроменный индексНу и что? Это вещь сугубо технологическая, не стоит о ней беспокоиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 14:10:59 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
On 31.07.2014 06:29, andrejk wrote: > заносится массив слов с пропуском уже существующих. Но заметил, что эта > зараза слова-то пропускает, а вот первичный ключ повышает всё равно и > получаются большие дырки в первичном ключе: занёс слов сто, а показывает > номер последнего слова аж за 800… Ну и фиг с ним, тебе -то что ? > Как сделать так, чтобы пропуская уже существующее в таблице слово, > первичный ключ не накручивался, а повышался только при записи именно > нового слова? Зачем -- вот главный вопрос. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 15:05:19 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
On 31.07.2014 06:29, andrejk wrote: > mysql_query(" > INSERT IGNORE INTO `ts`(`s`) > VALUES ('" . $massiv_itog[$i] . "')"); > Как сделать так, чтобы пропуская уже существующее в таблице слово, > первичный ключ не накручивался, а повышался только при записи именно > нового слова? Дай ПОЛНОСТЬЮ нормальный SQL-запрос, который ты выполняешь, а я тебе может быть скажу, как свести к минимуму этот эффект. Т.е. может дырки и будут, но не такие огромные. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 15:07:21 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
andrejkПросто получается очень огромные дырки будут, т. к. в бд постоянно будут попытки занести дубликат. И среди этих попыток, если появится слово новое, то у него будет уже огроменный индекс. Может тогда лучше переписать запрос, чтобы проверялось сначала наличие , а потом только вставлялось? Конечно, может. select name from tbl_newvalue where name not in (select name from tbl_oldvalue) Соответственно, отберутся только те записи, которых еще нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 15:22:16 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
UsersКонечно, может. select name from tbl_newvalue where name not in (select name from tbl_oldvalue) Соответственно, отберутся только те записи, которых еще нет.Можно и так, но IN (SELECT ...) лучше переписать через JOIN. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 15:33:26 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
MasterZivOn 31.07.2014 06:29, andrejk wrote: > заносится массив слов с пропуском уже существующих. Но заметил, что эта > зараза слова-то пропускает, а вот первичный ключ повышает всё равно и > получаются большие дырки в первичном ключе: занёс слов сто, а показывает > номер последнего слова аж за 800… Ну и фиг с ним, тебе -то что ? А то. MasterZiv> Как сделать так, чтобы пропуская уже существующее в таблице слово, > первичный ключ не накручивался, а повышался только при записи именно > нового слова? Зачем -- вот главный вопрос. Нада. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 16:09:25 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
Вот этот запрос в коде ПХП. Получается, что ПК не данные считает, а колличество обращений к БД. Это у меня вызывает когнитивный диссонанс и становится неудобно жить ;-). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 16:15:21 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
Решил проблему через дополнительный проверочный запрос. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 18:57:32 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
andrejkВот этот запрос в коде ПХП. Получается, что ПК не данные считает, а колличество обращений к БД. Это у меня вызывает когнитивный диссонанс и становится неудобно житьОсознайте, что ПК не должен "считать" ни "данные", ни "количество обращений к БД", что это просто ссылка на запись, и "диссонанс" исчезнет. Хотите считать количество строк или запросов, делайте соответствующие счётчики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2014, 20:55:37 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
Ребята, не надо в моих словах искать глупость, я понимаю, что такое пк, но я не вижу смысла делать какие-то счётчики, если это можно сделать с помощью пк. Где ваше чувство рационального? Меня просто убивал тот факт, что пк реагирует на все шорохи и всё. По-моему, это было через жопу, просто так совпало, что это принцпиально не вредит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 01:36:28 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
andrejkне надо в моих словах искать глупостьдействительно, зачем её искать, если её сразу видно? andrejkМеня просто убивал тот факт, что пк реагирует на все шорохи и всё. По-моему, это было через жопуЧитать 5755138 , долго и вдумчиво. Потом поразмыслить над следующей ситуацией: есть таблица trololo (id int autoinc, val int) выполняем (именно в таком порядке) session1: begin session2: begin session1: insert into trololo (val) values (1) session2: insert into trololo (val) values (2) session1: rollback session2: commit и после этого думаем, как именно сервер должен извращаться, чтобы обеспечить отсутствие дыр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 07:47:33 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
Меня зацепил не факт наличия дыр, а причина их появления. В моём случае дыры будут тоже, если введённое слово, например «х.й», потом удалить (а таких слов будет куча: фвафывафы, 24352452, 7777777777, рорррррррррр…, — пока не набалуются). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 12:48:00 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
andrejkдыры будут тоже, если введённое слово потом удалитьв чём вы видите принципиальную разницу между моим примером и вашим? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 14:32:50 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
tanglirandrejkдыры будут тоже, если введённое слово потом удалитьв чём вы видите принципиальную разницу между моим примером и вашим? :) А где ваш пример?) Подозреваю, что это: session1: begin session2: begin session1: insert into trololo (val) values (1) session2: insert into trololo (val) values (2) session1: rollback session2: commit Ну так я ещё слово begin не расшифровал, а остальное в общих чертах понял. Вы бы не могли эту последовательность перевести на нормальный язык или прокомментировать строчки? session1: — это один запрос к БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 15:33:44 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
andrejkА где ваш пример?) Подозреваю, что это: session1: begin session2: begin session1: insert into trololo (val) values (1) session2: insert into trololo (val) values (2) session1: rollback session2: commit Ну так я ещё слово begin не расшифровал, а остальное в общих чертах понял. Вы бы не могли эту последовательность перевести на нормальный язык или прокомментировать строчки? session1: — это один запрос к БД?Ну это даже я понял :) session1 и session2 - обозначение того, в какой MySQL-сессии выполняется запрос Далее, собственно, сам запрос. Слово begin начинает транзакцию. Полезно в тех случаях, когда включен автокоммит. После слова begin автокоммит в этой сессии выключается до завершения транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 15:38:18 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
session1: begin — начал пользователь 1 session2: begin — начал пользователь 2 session1: insert into trololo (val) values (1) — запрос пользователя 1 session2: insert into trololo (val) values (2) — запрос пользователя 2 session1: rollback — пользователь 1 отменил транзакцию session2: commit — а пользователь 2 подтвердил Я правильно понял? И, я так понимаю, сдесь речь идёт об одной общей таблице для всех пользователей, но у меня для каждого пользователя создаётся своя таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 15:58:16 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
tanglirandrejkдыры будут тоже, если введённое слово потом удалитьв чём вы видите принципиальную разницу между моим примером и вашим? :) Да нет, я просто сначала вообще не понял, что вы мне написали))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 15:58:52 |
|
||
|
Пропуски в первичном ключе при IGNORE.
|
|||
|---|---|---|---|
|
#18+
andrejkно у меня для каждого пользователя создаётся своя таблица 13044537 всё, я пас если кому-то интересно, убеждайте его сами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2014, 16:00:47 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38710170&tid=1834402]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 374ms |

| 0 / 0 |
