За последние 24 часа нас посетили 17579 программистов и 1653 робота. Сейчас ищут 856 программистов ...

Не работает ограничение CHECK и кое-что ещё

Тема в разделе "MySQL", создана пользователем ЛетучийЗмей, 27 янв 2015.

  1. ЛетучийЗмей

    ЛетучийЗмей Новичок

    С нами с:
    21 авг 2014
    Сообщения:
    7
    Симпатии:
    0
    Добрый вечер.
    Создаю таблицу запросом:
    CREATE TABLE IF NOT EXISTS tb (id INT UNSIGNED, column0 VARCHAR(20), column1 INT DEFAULT 25 CHECK(column1>10));

    СУБД принимает запрос без ошибок и создаёт таблицу. Но если затем сделать:
    INSERT INTO tb (column1) VALUES(1);
    то значение 1 преспокойно добавится в column1, несмотря на выставленное ограничение column1>10. Кто-нибудь знает, почему CHECK игнорируется? Он вообще работает в mySQL?
    Спасибо.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В какую документацию ты смотришь?
     
  3. ЛетучийЗмей

    ЛетучийЗмей Новичок

    С нами с:
    21 авг 2014
    Сообщения:
    7
    Симпатии:
    0
    Версия mySQL 5.5.35-rel33.0-log (это выдала команда SELECT version()).
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
  5. ЛетучийЗмей

    ЛетучийЗмей Новичок

    С нами с:
    21 авг 2014
    Сообщения:
    7
    Симпатии:
    0
    Спасибо.
    Ещё есть непонятки с конструкцией CONSTRAINT. Например, пишу:
    - CREATE TABLE tb (id INT, column0 VARCHAR(20), column1 INT, CONSTRAINT pk PRIMARY KEY(column1)).
    СУБД вроде всё делает. Но когда потом делаю запрос ALTER TABLE tb DROP CONSTRAINT p или ALTER TABLE tb DROP p (не знаю, какой из них написан правильно, в разных описаниях встречал и ту, и другую вариацию), возникает ошибка. ALTER TABLE tb DROP PRIMARY KEY работает нормально.
    Занятно, что на одном сайте нашёл описание, как правильно удалять именованное ограничение UNIQUE:
    - CREATE TABLE tb (id INT, column0 VARCHAR(20), column1 INT, CONSTRAINT pk UNIQUE(column1)) - тогда удаляется это так:
    - ALTER TABLE tb DROP INDEX pk.
    Проверял, работает. А вот ALTER TABLE tb DROP pk, ALTER TABLE tb DROP CONSTRAINT pk гонят ту же пургу.
    Складывается впечатление, что для каждого типа ограничений есть свой способ удаления, и уж во всяком случае что способов этих больше одного. Действительно ли это так? И как, например, можно удалить вышеупомянутый PRIMARY KEY, действуя через имя ограничения?
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ЛетучийЗмей, читай документацию и спрашивай что в ней тебе непонятно.