Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет ввода, Запрет ввода 
:(
    Опции темы
satanko
Дата 27.5.2008, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Всем привет.

Есть таблица (tbl1) на MYSQL5 с 2 полями (id1 - INT, id2 - INT).

Как сделать следующее - мне нужно запретить ввод одинаковых id (id1 = id2), 
т.е. если id1 = 1 и id2 = 1 (или id1 = 2 и id2 = 2 и т.д.) - нужно запретить ввод!

Я думал может сделать с помощью триггера - но не знаю как.
Как сделать это?  smile 
PM MAIL   Вверх
v2v
Дата 27.5.2008, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



указать свойство поля ID уникальным.
например при создании таблицы:
Код

CREATE TABLE example (      id INT UNIQUE       );


Это сообщение отредактировал(а) v2v - 27.5.2008, 20:04


--------------------
PM   Вверх
skyboy
Дата 27.5.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



v2v, так ты добьешься уникального поля. ему же надо уникальность в пределах не таблицы, а каждой записи - чтоб поле1 <> поле2 в каждой отдельно взятой записи.
satanko, ты чем формируешь sql-запрос? такие вещи много проще делать на стороне клиента: сравнивать вставляемые в запрос данные...
PM MAIL   Вверх
v2v
Дата 27.5.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



Цитата(skyboy @  27.5.2008,  20:28 Найти цитируемый пост)
v2v, так ты добьешься уникального поля. ему же надо уникальность в пределах не таблицы, а каждой записи - чтоб поле1 <> поле2 в каждой отдельно взятой записи.

затупил  smile 


--------------------
PM   Вверх
satanko
Дата 28.5.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



v2v,  id1 и id2 вместе PRIMARY KEY.

skyboy, формирую на стороне PHP. Но я думал запретить такой ввод на уровне базы даных.

Можно ли это сделать?
PM MAIL   Вверх
skyboy
Дата 28.5.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(satanko @  28.5.2008,  09:20 Найти цитируемый пост)
 Но я думал запретить такой ввод на уровне базы даных.

религия?
ок. тогда тебе нужен будет хостинг с mysql5(версии ниже не поддерживают триггеры) и ознакомиться с разделом документации CREATE TRIGGER
PM MAIL   Вверх
satanko
Дата 28.5.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 21.11.2006

Репутация: нет
Всего: нет



Цитата

религия?


Возможно  smile.

Если можно пример запрета ввода даных на триггере бо я не знаю как написать.

В MSSQL это примерно так:

Код

CREATE TRIGGER [dbo].[trgAlertNotificationAccount_Check] ON [dbo].[tblAlertNotifications] FOR INSERT, UPDATE AS
BEGIN
    IF EXISTS
        (
            SELECT    TOP 1 1
            FROM [dbo].[tblAlertNotifications] an
                INNER JOIN Inserted i ON i.[anID] = an.[anID]
            WHERE (ISNUMERIC(i.[an_issID]) + ISNUMERIC(i.[an_ownID]) + ISNUMERIC(i.[an_hldID])) > 1
        )
    BEGIN
        RAISERROR('Alert notification account is already exists.', 16, 1);
        ROLLBACK
    END
END
GO


А как сделать такое на MySQL -  smile 
PM MAIL   Вверх
v2v
Дата 28.5.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: нет
Всего: 56



не нашёл как в мускульных триггерах генерить алерты?? (exceptionы).
но нашёл обходной путь - вставлять алерт в таблицу ошибок.

вот тригер

Код

delimiter |
/***/
create trigger not_create_same 
before insert 
on id1_id2 
for each row 
begin 
if NEW.id1=NEW.id2 
 then insert error_msg values ('ID1 equal ID2'); 
end if; 
end;
|

ещё надо создать таблицу error_msg и добавь в него запись ID1 equal ID2!.
Код

CREATE TABLE error_msg (error_msg VARCHAR(32) NOT NULL PRIMARY KEY);
INSERT INTO error_msg VALUES (‘ID1 equal ID2!’);

и теперь когда ты будешь создавть запись с одинаоквыми ид будет вылетать вот такая ошибка:
Код

ERROR 1062 (23000): Duplicate entry 'ID1 equal ID2!' for key 'PRIMARY'



--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.