[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите часто крошется таблица
php-down
Есть таблица которая постоянно рушиться и мне приходится ее восстанавливать с потерей одной строки.

SQL-запрос: SHOW COLUMNS FROM tab_comp;

Field Type Null Key Default Extra
id smallint(5) unsigned NO PRI NULL auto_increment
sector_id tinyint(2) NO 0
comp_name varchar(200) NO UNI NULL
tickers varchar(40) NO NULL
comp_link varchar(250) NO NULL
autor_id mediumint(8) NO 0
news text NO NULL
status tinyint(1) NO 0
allow_comm tinyint(1) NO 0
comm_num mediumint(8) NO 0

таблица компаний.
status это поле статуса обновления новостей в поле news
на странице компании есть комментарии что говорит 2 последних поля.
Есть предположение что рушится после запросов

UPDATE LOW_PRIORITY IGNORE tab_comp SET `news`='{$lenta}', `status`='1' WHERE `id`='{$id}' LIMIT 1;

UPDATE LOW_PRIORITY IGNORE tab_comp SET `status` = '1' WHERE `id` = {$comp_id} LIMIT 1;

Помогите советом.
Visman
LIMIT 1

Не нужен в обеих запросах, т.к. id -> auto_increment, т.е. поле id у тебя должно содержать уникальные значения.

IGNORE 

Это тоже совершенно ненужно, т.к. ты игнорируеш ошибки, которых по идее не должно быть в этих запросах.

Цитата
The UPDATE statement supports the following modifiers:

With the LOW_PRIORITY keyword, execution of the UPDATE is delayed until no other clients are reading from the table. This affects only storage engines that use only table-level locking (such as MyISAM, MEMORY, and MERGE).

With the IGNORE keyword, the update statement does not abort even if errors occur during the update. Rows for which duplicate-key conflicts occur are not updated. Rows for which columns are updated to values that would cause data conversion errors are updated to the closest valid values instead.
Visman
'{$id}'

Кавычки одинарные лишние.

`status`='1'

Аналогично.
php-down
из за кавычек рушится.
"Не верю!" (с) Станиславский
Guest
Ладно вытащу новости в отдельную таблицу. Думаю это правильнее будет.
Вот новая таблица tab_comp_news

comp_id smallint(5) unsigned NO PRI NULL auto_increment
news text NO NULL
status tinyint(1) NO 0

Вот еще вопросик

Как оптимизировать запрос?


SELECT c.id, c.sector_id, c.comp_name, c.tickers, c.comp_link, c.allow_comm, c.comm_num, n.news, s.sector_name
FROM tab_comp c , tab_comp_news n, tab_sectors s
WHERE c.sector_id = s.id AND n.comp_id = c.id AND c.id = {$comp_id}
LIMIT 1
php-down
Выделение новостей в отдельную таблицу не помогло.

Все равно рушится таблица: ошибка 145

Что делать прям не знаю. Может это хостинг виноват? (Мажордомо)

Запрос убивающий таблицу:
$dat_e = date( "Y-m-j H:i:s", $_TIME );
$news = "кафыавфыва";
UPDATE LOW_PRIORITY tab_comp_news SET `date`= '{$dat_e}', `news` = '{$news}', `status` = 1 WHERE `comp_id` = {$id}

Структура:
Цитата

Field    Type    Null    Key    Default    Extra
comp_id    smallint(5)    NO    PRI    NULL    auto_increment
date    datetime    NO        0000-00-00 00:00:00   
news    text    NO        NULL   
status    tinyint(1)    NO        0
Лена
comp_id smallint(5) NO PRI NULL auto_increment

Автоинкремент по умолчанию NULL не может быть, будет ошибка Duplicate entry '0' for key...

Вот с этим не уверена, но тоже подозрительно - date datetime NO 0000-00-00 00:00:00. Формат даты у вас один, а пихаете вы дату j без ведущих нулей - date( "Y-m-j H:i:s"

Что в $_TIME?

Я бы вывела сформированный запрос на экран, напр. - UPDATE LOW_PRIORITY tab_comp_news SET `date`= '2012-03-06 20:34:54', `news` = 'фыва', `status` = 1 WHERE `comp_id` = 2 и проверила его сначала через клиент работы с БД (phpmyadmin или другой), после уже в скрипте.

Тип таблиц MyISAM или InnoDB? Может, у вас блокировка срабатывает неправильно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.