SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.11.2012 19:56:13

warma2d
Завсегдатай
Зарегистрирован: 12.08.2012
Сообщений: 33

Существует ли маска ввода?

Здравствуйте.

Возможно ли создать нéкую маску ввода для определенного столбика?

Например, пользователи при регистрации должны указать код своей учебной группы, 2290КИ или 2110ФИ... , т.е. только 4 цифры и только две буквы.

Другими словами, MySQL не должна принимать AB1234 или 12345ФА или 1234ИАВ и т.д.

Заранее спасибо.

Отредактированно warma2d (02.11.2012 19:57:30)

Неактивен

 

#2 03.11.2012 02:18:24

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Существует ли маска ввода?

Можно, например, триггер before insert, в результате действия которого запись не будет добавлена.

Но вам ведь нужно другое - чтобы пользователь при неправильном коде группы получил сообщение об ошибке и регистрация не прошла, а это нужно программировать на клиенте.

Неактивен

 

#3 03.11.2012 03:58:43

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Существует ли маска ввода?

В ряде СУБД есть приятная возможность добавлять CHECK CONSTRAINT - с определенных позиций это лучше триггера - тоже помогло бы топикстартеру, но вот, к сожалению, не торопятся разработчики MySQL реализовать это полноценно. Да и Монти (лидер MariaDB), только на него надежда и оставалась, тоже не спешит ( Unfortunately, at the moment we don't have any immediate plans of implementing CHECK constraints. ) sad.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#4 30.11.2012 11:46:12

PYMblH
Участник
Зарегистрирован: 30.11.2012
Сообщений: 2

Re: Существует ли маска ввода?

Вопрос практически такой же как у автора темы. Есть таблица new в ней есть столбец new1. Необходимо сделать ограничение на ввод данных в ячейки столбца new1, формат ввода следующий 2 цифры и 1 буква (пример: 11ф, 11а, 42г, и т.д.). Реализовать надо с помощью триггера. Нужно когда ввод данных в ячейку не соответствует заданному формату выдавалось сообщение об ошибке или хотя бы просто запретить всякий ввод не соответствующий заданному формату. Прошу помощи светлые головы.

Отредактированно PYMblH (30.11.2012 11:53:19)

Неактивен

 

#5 30.11.2012 12:16:48

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Существует ли маска ввода?

Предыдущие ответы все ещё актуальны. С помощью триггера вы сможете лишь отменить вставку, но пользователь об этом не узнает.
Если вам этого достаточно, то http://dev.mysql.com/doc/refman/5.5/en/regexp.html

Неактивен

 

#6 30.11.2012 12:39:14

PYMblH
Участник
Зарегистрирован: 30.11.2012
Сообщений: 2

Re: Существует ли маска ввода?

vasya написал:

Предыдущие ответы все ещё актуальны. С помощью триггера вы сможете лишь отменить вставку, но пользователь об этом не узнает.
Если вам этого достаточно, то http://dev.mysql.com/doc/refman/5.5/en/regexp.html

Уважаемый vasya, не могли бы мне в коде показать хоть примерно как должно выглядеть в английском не слишком силен?

Неактивен

 

#7 30.11.2012 13:53:50

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Существует ли маска ввода?

SELECT new.new1 regexp '^[[:digit:]]{2}[[:alpha:]]{1}$';  -- вернет 1, если формат ввода две цифры и одна буква, иначе вернет 0.

Неактивен

 

#8 30.11.2012 15:59:59

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Существует ли маска ввода?

deadka написал:

В ряде СУБД есть приятная возможность добавлять CHECK CONSTRAINT - с определенных позиций это лучше триггера - тоже помогло бы топикстартеру, но вот, к сожалению, не торопятся разработчики MySQL реализовать это полноценно. Да и Монти (лидер MariaDB), только на него надежда и оставалась, тоже не спешит ( Unfortunately, at the moment we don't have any immediate plans of implementing CHECK constraints. ) sad.

И правильно делают, что не торопятся. Во-первых какой-никакой инструмент уже есть (триггеры), а во-вторых все таки валидация данных - это задача приложения, а не СУБД. А то так скоро от mysql захотят чтобы она формочки на странице рисовала сама ))

Лучше бы PCRE имплементировали вместо существующего огрызка регулярок )

Неактивен

 

#9 30.11.2012 21:38:00

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Существует ли маска ввода?

Не, неправильно делают, пусть лучше торопятся! Триггеры - всё же несколько другое, хотя механизм и схож. Что до валидации данных - констрэйнты дают возможность фильтровать данные на входе - чтобы потом не мучиться и по крону не запускать какие-то скрипты ночью, которые будут валидировать данные. Представь себе (абсолютно реальную, к слову) ситуацию - когда в одну и ту же базу в одни и те же таблицы пишет c++-демон и  веб-приложение. Придётся делать две разных валидации данных или как-то сильно извращаться. А так констрэйнт втыкаешь на табличку - и вуаля.

Что до формочек - ну вот Оракул, похоже, пошёл по этому пути, я видел OracleForms smile.

Лучше бы PCRE имплементировали вместо существующего огрызка регулярок )

+1 smile


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson