Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пропуски в первичном ключе при IGNORE. / 25 сообщений из 47, страница 1 из 2
31.07.2014, 05:29:50
    #38709631
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
Такая оказия… Вот запрос:

Код: sql
1.
2.
3.
mysql_query(" 
INSERT IGNORE INTO `ts` (`s`) 
VALUES ('" . $massiv_itog[$i] . "')");



Это повторяющаяся часть запроса, вырезанная из цикла. Здесь в таблицу заносится массив слов с пропуском уже существующих. Но заметил, что эта зараза слова-то пропускает, а вот первичный ключ повышает всё равно и получаются большие дырки в первичном ключе: занёс слов сто, а показывает номер последнего слова аж за 800…

Как сделать так, чтобы пропуская уже существующее в таблице слово, первичный ключ не накручивался, а повышался только при записи именно нового слова?
...
Рейтинг: 0 / 0
31.07.2014, 06:42:29
    #38709636
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
это тебя не должно волновать.
значений первичного ключа тебе хватит с бльшим запасом.
...
Рейтинг: 0 / 0
31.07.2014, 08:42:45
    #38709664
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
+а если нужна своя нумерация, то надо завести своё поле для своей нумерации, т.к. нумерация не есть назначение ПК.
...
Рейтинг: 0 / 0
31.07.2014, 12:36:31
    #38709921
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
Но вы так и не ответили, на это можно повлиять или нет?
...
Рейтинг: 0 / 0
31.07.2014, 12:38:07
    #38709924
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
andrejkНо вы так и не ответили, на это можно повлиять или нет?Нет.
...
Рейтинг: 0 / 0
31.07.2014, 12:41:05
    #38709930
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
Точнее, можно, но ухудшив производительность. Схема такая:
1) Блокируете таблицу
2) SELECT-ом проверяете наличие нужной записи
3) Если нет, то INSERT
4) Снимаете блокировку

Это приведет к ухудшению быстродействия как отдельных вставок, так и в массе из разных сессий (они будут выполняться последовательно).
...
Рейтинг: 0 / 0
31.07.2014, 14:03:03
    #38710028
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
Просто получается очень огромные дырки будут, т. к. в бд постоянно будут попытки занести дубликат. И среди этих попыток, если появится слово новое, то у него будет уже огроменный индекс. Может тогда лучше переписать запрос, чтобы проверялось сначала наличие , а потом только вставлялось?
...
Рейтинг: 0 / 0
31.07.2014, 14:10:59
    #38710037
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
andrejkу него будет уже огроменный индексНу и что? Это вещь сугубо технологическая, не стоит о ней беспокоиться.
...
Рейтинг: 0 / 0
31.07.2014, 15:05:19
    #38710113
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
On 31.07.2014 06:29, andrejk wrote:

> заносится массив слов с пропуском уже существующих. Но заметил, что эта
> зараза слова-то пропускает, а вот первичный ключ повышает всё равно и
> получаются большие дырки в первичном ключе: занёс слов сто, а показывает
> номер последнего слова аж за 800…

Ну и фиг с ним, тебе -то что ?


> Как сделать так, чтобы пропуская уже существующее в таблице слово,
> первичный ключ не накручивался, а повышался только при записи именно
> нового слова?

Зачем -- вот главный вопрос.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.07.2014, 15:07:21
    #38710117
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
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
...
Рейтинг: 0 / 0
31.07.2014, 15:22:16
    #38710135
Users
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
andrejkПросто получается очень огромные дырки будут, т. к. в бд постоянно будут попытки занести дубликат. И среди этих попыток, если появится слово новое, то у него будет уже огроменный индекс. Может тогда лучше переписать запрос, чтобы проверялось сначала наличие , а потом только вставлялось?

Конечно, может. select name from tbl_newvalue where name not in (select name from tbl_oldvalue)
Соответственно, отберутся только те записи, которых еще нет.
...
Рейтинг: 0 / 0
31.07.2014, 15:33:26
    #38710147
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
UsersКонечно, может. select name from tbl_newvalue where name not in (select name from tbl_oldvalue)
Соответственно, отберутся только те записи, которых еще нет.Можно и так, но IN (SELECT ...) лучше переписать через JOIN.
...
Рейтинг: 0 / 0
31.07.2014, 16:09:25
    #38710170
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
MasterZivOn 31.07.2014 06:29, andrejk wrote:

> заносится массив слов с пропуском уже существующих. Но заметил, что эта
> зараза слова-то пропускает, а вот первичный ключ повышает всё равно и
> получаются большие дырки в первичном ключе: занёс слов сто, а показывает
> номер последнего слова аж за 800…

Ну и фиг с ним, тебе -то что ?

А то.

MasterZiv> Как сделать так, чтобы пропуская уже существующее в таблице слово,
> первичный ключ не накручивался, а повышался только при записи именно
> нового слова?

Зачем -- вот главный вопрос.

Нада.
...
Рейтинг: 0 / 0
31.07.2014, 16:15:21
    #38710179
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
Вот этот запрос в коде ПХП. Получается, что ПК не данные считает, а колличество обращений к БД. Это у меня вызывает когнитивный диссонанс и становится неудобно жить ;-).

Код: 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.
<?php
session_start();

$id_pol = $_SESSION['id_pol'];

require_once('bd.php');

$imya_nabora = time();
$massiv_itog = $_SESSION["SESSION_massiv_itog"];
if ($massiv_itog) {
    //########################################################################
    //%%%%%%%% SQL_zapros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    mysql_query(" 
INSERT INTO `".$id_pol."--tn` (`n`) 
VALUES ('".$imya_nabora."')");
    for ($i = 0; $i < count($massiv_itog); $i++) {
        //делаем повторяющуюся часть запроса
        mysql_query(" 
INSERT IGNORE INTO `ts` (`s`) 
VALUES ('".$massiv_itog[$i]."')");
        mysql_query(" 
INSERT INTO `".$id_pol."--t_s` (`id_n`, `id_s`) 
VALUES ((SELECT `idn` FROM `".$id_pol."--tn` WHERE `n` = '".$imya_nabora."'), 
        (SELECT `ids` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."')) 
");
    }
    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    //############################################################################
}
mysql_close($podkluchenie);
unset($_SESSION["SESSION_massiv_itog"]);

require_once('1_vvod_slov.php');
?>
...
Рейтинг: 0 / 0
31.07.2014, 18:57:32
    #38710328
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
Решил проблему через дополнительный проверочный запрос.

Код: 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.
<?php
session_start();
$id_pol = $_SESSION['id_pol'];
require_once ('bd.php');
$imya_nabora = time();
$massiv_itog = $_SESSION["SESSION_massiv_itog"];

if ($massiv_itog) {
    //%%%%%%%% SQL_zapros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    mysql_query("  
INSERT INTO `".$id_pol."--tn` (`n`)  
VALUES ('".$imya_nabora."')");
    for ($i = 0;$i < count($massiv_itog);$i++) {
        //делаем повторяющуюся часть запроса
        $slovo = mysql_fetch_array(mysql_query(" 
SELECT `s` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."' 
"));
var_dump($slovo);
        if ($slovo == FALSE) {
            mysql_query("  
INSERT INTO `ts` (`s`)  
VALUES ('".$massiv_itog[$i]."')");
        }
        mysql_query("  
INSERT INTO `".$id_pol."--t_s` (`id_n`, `id_s`)  
VALUES ((SELECT `idn` FROM `".$id_pol."--tn` WHERE `n` = '".$imya_nabora."'),  
        (SELECT `ids` FROM `ts` WHERE `s` = '".$massiv_itog[$i]."'))  
");
    }
    //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
}
mysql_close($podkluchenie);
unset($_SESSION["SESSION_massiv_itog"]);
require_once ('1_vvod_slov.php');
?>
...
Рейтинг: 0 / 0
31.07.2014, 20:55:37
    #38710373
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
andrejkВот этот запрос в коде ПХП. Получается, что ПК не данные считает, а колличество обращений к БД. Это у меня вызывает когнитивный диссонанс и становится неудобно житьОсознайте, что ПК не должен "считать" ни "данные", ни "количество обращений к БД", что это просто ссылка на запись, и "диссонанс" исчезнет. Хотите считать количество строк или запросов, делайте соответствующие счётчики.
...
Рейтинг: 0 / 0
01.08.2014, 01:36:28
    #38710466
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
Ребята, не надо в моих словах искать глупость, я понимаю, что такое пк, но я не вижу смысла делать какие-то счётчики, если это можно сделать с помощью пк. Где ваше чувство рационального? Меня просто убивал тот факт, что пк реагирует на все шорохи и всё. По-моему, это было через жопу, просто так совпало, что это принцпиально не вредит.
...
Рейтинг: 0 / 0
01.08.2014, 07:47:33
    #38710495
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
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
и после этого думаем, как именно сервер должен извращаться, чтобы обеспечить отсутствие дыр.
...
Рейтинг: 0 / 0
01.08.2014, 12:48:00
    #38710729
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
Меня зацепил не факт наличия дыр, а причина их появления. В моём случае дыры будут тоже, если введённое слово, например «х.й», потом удалить (а таких слов будет куча: фвафывафы, 24352452, 7777777777, рорррррррррр…, — пока не набалуются).
...
Рейтинг: 0 / 0
01.08.2014, 14:32:50
    #38710868
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
andrejkдыры будут тоже, если введённое слово потом удалитьв чём вы видите принципиальную разницу между моим примером и вашим? :)
...
Рейтинг: 0 / 0
01.08.2014, 15:33:44
    #38710982
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
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: — это один запрос к БД?
...
Рейтинг: 0 / 0
01.08.2014, 15:38:18
    #38710990
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
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 автокоммит в этой сессии выключается до завершения транзакции.
...
Рейтинг: 0 / 0
01.08.2014, 15:58:16
    #38711020
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
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 подтвердил

Я правильно понял?

И, я так понимаю, сдесь речь идёт об одной общей таблице для всех пользователей, но у меня для каждого пользователя создаётся своя таблица.
...
Рейтинг: 0 / 0
01.08.2014, 15:58:52
    #38711021
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
tanglirandrejkдыры будут тоже, если введённое слово потом удалитьв чём вы видите принципиальную разницу между моим примером и вашим? :)

Да нет, я просто сначала вообще не понял, что вы мне написали)))
...
Рейтинг: 0 / 0
01.08.2014, 16:00:47
    #38711025
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пропуски в первичном ключе при IGNORE.
andrejkно у меня для каждого пользователя создаётся своя таблица 13044537
всё, я пас
если кому-то интересно, убеждайте его сами
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Пропуски в первичном ключе при IGNORE. / 25 сообщений из 47, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]