не создается таблица в mysql, если название поля separator

Тема в разделе "Базы данных", создана пользователем vilk108, 22 фев 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. vilk108

    vilk108

    Регистр.:
    17 дек 2007
    Сообщения:
    174
    Симпатии:
    41
    Создаю таблицу
    Код:
     CREATE TABLE IF NOT EXISTS  'test'(
     id int(10) PRIMARY KEY NOT NULL auto_increment,
     separator varchar(255),
     text varchar(255)
    ) 
    Из за того что поле называется separator, то таблица не создается. Почему нельзя использовать имя separator в названиях полей?
     
  2. boyzer

    boyzer Постоялец

    Регистр.:
    31 янв 2008
    Сообщения:
    121
    Симпатии:
    27
    Т.к. это зарезервированное слово синтаксиса MySQL. Используется в некоторых операторах языка, например в GROUP_CONCAT.
     
    vilk108 нравится это.
  3. vilk108

    vilk108

    Регистр.:
    17 дек 2007
    Сообщения:
    174
    Симпатии:
    41
    мне еще сказали что если слово separator поставить между обратными косыми кавычками так - `separator`, то ошибки не будет и поле создастся.
     
  4. vilk108

    vilk108

    Регистр.:
    17 дек 2007
    Сообщения:
    174
    Симпатии:
    41
    меня не обманули. Просто с обратными кавычками будет работать если в название таблицы убрать кавычки.
    Так правильно:
    Код:
      CREATE TABLE IF NOT EXISTS  test(
     id int(10) PRIMARY KEY NOT NULL auto_increment,
     `separator` varchar(255),
     text varchar(255)
    ) 
     
  5. zs_ftp

    zs_ftp Создатель

    Регистр.:
    4 окт 2006
    Сообщения:
    16
    Симпатии:
    0
    Вот так более правильно будет:

    Код:
    CREATE TABLE IF NOT EXISTS  `test`(
       `id` int(10) PRIMARY KEY NOT NULL auto_increment,
       `separator` varchar(255),
       `text` varchar(255)
    )
    
     
  6. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    лучше всеже воздержатся от подобной практики
    SELECT * FROM test WHERE ... GROUP ...
    прийдется или опять применять обратные кавычки с алиасами.
    хорошая практика это давать названия полям применяя имя таблицы
    к примеру test_separator в будущем очень поможет при анализе или модернизации
    к примеру WHERE `foo_id`=`bar_pid` ясно говорит из каких таблиц, если запрос большой.
    ну а обратные кавычки стоит применять всегда
     
  7. zs_ftp

    zs_ftp Создатель

    Регистр.:
    4 окт 2006
    Сообщения:
    16
    Симпатии:
    0
    Мне кажутся такие конструкции избыточными, поскольку в таком виде запрос у тебя перед глазами и видно откуда "растут ноги" :)
     
  8. RomAndry

    RomAndry Постоялец

    Регистр.:
    21 ноя 2007
    Сообщения:
    102
    Симпатии:
    24
    потом с ростом совершенства такие конструкции позволяют строить абстракции
    к примеру
    $mysql->query(array('foo_id'=>'bar_pid' ))
    абстракция может построить сама запрос
     
  9. rodeg

    rodeg Постоялец

    Регистр.:
    15 сен 2008
    Сообщения:
    96
    Симпатии:
    7
    Столкнулся с подобной проблемой
    mysql> CREATE TABLE `voc2_quiz` (
    -> `id` int(11) unsigned NOT NULL auto_increment,
    -> `question` text NOT NULL,
    -> `answer` varchar(255) NOT NULL default'',
    -> `last_use` datetime NOT NULL default '0000-00-00 00:00:00',
    -> PRIMARY KEY (`id`)
    -> ) TYPE=MyISAM;
    ERROR 1064 (42000:( You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE `voc2_quiz` (
    `id` int(11) unsigned NOT NULL auto_increment,
    `qu' at line 1

    Подскажите в чем трабла?:nezn:
     
  10. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
    запрос верный, кривизна в каком-то символе, возм. перенос
    копирнул в блокнот, вытянул запрос в одну строку - работает
     
Статус темы:
Закрыта.