#mysql #constraints
#mysql #ограничения
Вопрос:
Согласно руководству MySQL « CHECK
Предложение анализируется, но игнорируется всеми механизмами хранения». Итак, я знаю, что о простом решении не может быть и речи, но есть ли другой возможный способ прийти к тому же результату? Может быть, с помощью некоторых триггеров или хранимых процедур? Если да, то каким образом?
Кроме того, поскольку это просто «проанализировано», это так же хорошо, как сказать, избегайте его использования, поскольку оно не служит цели?
Использование таблиц MySQL 5.5.11 и InnoDB
Ответ №1:
Взгляните на эту интересную статью
https://wikis.oracle.com/display/mysql/Triggers#Triggers-EmulatingCheckConstraints
Я часто использую этот метод.
Комментарии:
1. Большое спасибо за эту ссылку. Дает хорошую информацию о том, как это реализовать. Мне придется немного поиграть с этим и посмотреть, вызывают ли ограничения проблемы в моем приложении. Вы действительно используете выделенную базу данных только для этих триггеров?
2. Привет. Я не понимаю, что вы имеете в виду под выделенной базой данных. Я использую триггеры каждый раз, когда они мне нужны, во всех базах данных, которые их требуют.
3. Взято из этого руководства «Чтобы сделать это, нам нужно создать две вещи: таблицу для выдачи ошибки и процедуру для вставки в эту таблицу, которая, в свою очередь, вызовет ошибку. Было бы хорошей идеей создать их в отдельной базе данных, чтобы к ним можно было получить доступ из любой базы данных.»
4. А, ладно. Честно говоря, я использую их в каждой отдельной базе данных. Давайте посмотрим, есть ли у кого-нибудь еще какой-нибудь хороший совет. 🙂
5. Ссылка, к сожалению, ведет на страницу без содержимого :/
Ответ №2:
Я использую версию 5.5.21. Вы можете использовать ENUM для проверки ограниченийhttp://dev.mysql.com/doc/refman/5.0/en/enum.html
Комментарии:
1. Не очень полезно для
FLOAT
столбца или там, где допустимые значения составляют что-то вроде 0-100000…