Страница 1 из 1

[MySQL 5.1] пофиксить запрос

Добавлено: 2011-06-06 12:52:19
Alex Keda
есть такой неправильный запрос, в общем доносящий смысл того что пытаются сделать

Код: Выделить всё

ALTER TABLE `Clauses` ADD KEY `ClausesPartition` (`Partition`) IF NOT EXISTS (SHOW KEYS FROM `Clauses` WHERE Key_name = 'ClausesPartition');
надо добавить ключ, если он не существует. и не добавлять если существует.
впрое простая операция - но чё-то не выходит каменный цветок.

гугление ничего не принесло - толи ни у кого этой проблемы нету, толи всё настока просто, что никто даже не спршивает =((

Re: [MySQL 5.1] пофиксить запрос

Добавлено: 2011-06-06 13:30:45
Gamerman
Если ключ существует, то при добавлении ключа мускуль ругнется да и все. Или это критично?

Re: [MySQL 5.1] пофиксить запрос

Добавлено: 2011-06-06 14:06:26
Alex Keda
критично.
php обвёртка на этом тут же отваливается и остальные запросы не проходят

Re: [MySQL 5.1] пофиксить запрос

Добавлено: 2011-06-06 18:23:00
FreeBSP
в синтаксисе ALTER TABLE упоминания про IF NOT EXIST я не увидел, зато это явно упоминается в синтаксисе CREATE TABLE

мне видятся такие варианты:
1) если не критична скорость, настругать обвертку для запроса на пхп типа как

Код: Выделить всё

if (!mysql_num_rows(mysql_query("SHOW KEYS FROM `Clauses` WHERE Key_name = 'ClausesPartition')")) {
mysql_query(ALTER TABLE `Clauses` ADD KEY `ClausesPartition` (`Partition`)
2) если при попытке удаления несуществующего ключа система не будет падать -
сначала удалять ключ, а потом добавлять

Re: [MySQL 5.1] пофиксить запрос

Добавлено: 2011-06-06 21:30:03
rmn
FreeBSP писал(а): 1) если не критична скорость, настругать обвертку для запроса на пхп типа как
если есть возможность сделать запрос в обход фреймворка, зачем делать проверки? просто игнорим ошибку...

Код: Выделить всё

@mysql_query('ALTER TABLE ... ADD KEY ... ');

Re: [MySQL 5.1] пофиксить запрос

Добавлено: 2011-06-07 19:01:14
Alex Keda
обвёртку трогать не могу.
могу тока запрос пилить как хочу.
хоть процедуры писать хоть что.

Re: [MySQL 5.1] пофиксить запрос

Добавлено: 2011-06-07 20:35:59
Gamerman
так процедуру можно накатать, которая и будет делать все что нужно. А в запросе вызов процедуры сделать.

Re: [MySQL 5.1] пофиксить запрос

Добавлено: 2011-06-07 22:29:44
FiL
http://dev.mysql.com/doc/refman/5.1/en/ ... index.html

читать последний камент.

Re: [MySQL 5.1] пофиксить запрос

Добавлено: 2011-06-12 8:29:01
zg
Alex Keda писал(а):гугление ничего не принесло - толи ни у кого этой проблемы нету, толи всё настока просто, что никто даже не спршивает =((
такой проблемы в мусе нету, поскольку есть IGNORE

Код: Выделить всё

ALTER IGNORE TABLE `Clauses` ADD KEY `ClausesPartition` (`Partition`)