За последние 24 часа нас посетили 16749 программистов и 1635 роботов. Сейчас ищут 1640 программистов ...

Странности Mysql иль мои

Тема в разделе "Вопросы от блондинок", создана пользователем Sundro, 8 фев 2011.

  1. Sundro

    Sundro Активный пользователь

    С нами с:
    18 ноя 2010
    Сообщения:
    18
    Симпатии:
    0
    В месте с php изучаю мускул по книге в ней имеется пример создания таблицы, он почемуто не работает. (Скорее всего расщитан на другую версию мускула)
    А вот и он,
    CREATE TABLE user (
    usernumber MEDIUMINT(10) DEFAULT '0' NOT NULL AUTO_INCREMENT,
    userid VARCHAR(8) BINARY NOT NULL,
    userpassword VARCHAR(20) BINARY NOT NULL,
    username VARCHAR(30) NOT NULL,
    userposition VARCHAR(50) NOT NULL,
    useremail VARCHAR(50) NOT NULL,
    userprofile TEXT NOT NULL,
    PRIMARY KEY (userid),
    UNIQUE usernumber (usernumber)
    );
    Выдает ошибку: ERROR 1067 (42000): Invalid default value for 'usernumber'

    Ища по форумам в чем дело нашел что вместо '0' нужно написать Null, я так и сделал. Все заработало, но (из книги)" NULL или NOT NULL Поля NOT NULL не допускают NULL-значений. Поля, объявленные
    как NULL, сохраняют значение, заданное по умолчанию, в случае
    если в поле записывается NULL.
    Если значение по умолчанию не указано, то в поле просто
    сохраняется NULL. Если атрибут не задан, то предполагается NULL"
    Вопрос. Почему поле объявленное как нул допускает оный ?

    Как я понял из форумов в моем случае Default вообще лучше не устанавливать, AUTO_INCREMENT сам считает с нуля.
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    я пользуюсь user_id INT UNSIGNED NOT NULL AUTO_INCREMENT
    или проще user_id SERIAL
     
  3. Jampire

    Jampire Активный пользователь

    С нами с:
    22 авг 2009
    Сообщения:
    181
    Симпатии:
    0
    Адрес:
    Гомель
    Удалите кавычки вокруг 0.
     
  4. Sundro

    Sundro Активный пользователь

    С нами с:
    18 ноя 2010
    Сообщения:
    18
    Симпатии:
    0
    А почему если в том же примере usernumber MEDIUMINT(10) DEFAULT '0' NOT NULL AUTO_INCREMENT, вместо '0'
    вставить Null не выводится ни какой ошибки ведь поле объявлено как NOT NULL?
     
  5. Sundro

    Sundro Активный пользователь

    С нами с:
    18 ноя 2010
    Сообщения:
    18
    Симпатии:
    0
    Кто знает вменяемые учебники по теории реляционных баз данных и конкретно про Mysql, поделитесь пожалуйста.
     
  6. Sundro

    Sundro Активный пользователь

    С нами с:
    18 ноя 2010
    Сообщения:
    18
    Симпатии:
    0
    Удаление кавычек не помогает. В той же книге есть пример создания другой таблицы
    CREATE TABLE access_log (
    page VARCHAR(250) NOT NULL,
    userid VARCHAR(8) BINARY NOT NULL,
    visitcount MEDIUMINT(5) DEFAULT '0' NOT NULL,
    accessdate TIMESTAMP(14),
    PRIMARY KEY (userid, page));

    Здесь ошибок не выдается все проходит нормально. PS Это таблицы из одной базы данных
     
  7. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Sundro
    автоинкрементному полю нелзя выставлять значение по умолчанию, отличное от НУЛЛ-а.
    потому что именно при подаче НУЛЛ-а генерируется новое значение.
     
  8. Sundro

    Sundro Активный пользователь

    С нами с:
    18 ноя 2010
    Сообщения:
    18
    Симпатии:
    0
    Спасибо за освещение подвалов моего незнания.
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ой, а я вечно id ставлю с not null:
    [sql] `id` int(10) unsigned NOT NULL auto_increment,[/sql]