Forum Webscript.Ru

Общие => Базы данных => Тема начата: Boatman от 03 Июля 2002, 17:36:12

Название: ОТкуда ошибка?
Отправлено: Boatman от 03 Июля 2002, 17:36:12
Вот такой запрос ругается на синтаксис:

CREATE TABLE user2
(
key varchar(20) PRIMARY KEY,
value text(255)
)

В чем  дело?
Название: ОТкуда ошибка?
Отправлено: AlieN от 03 Июля 2002, 17:49:03
Boatman
1) почему текстовое поля первичный ключ?
2) в поле text необязательно указывать размер
Название: ОТкуда ошибка?
Отправлено: fidget от 03 Июля 2002, 17:51:22
key - это служебное слово
Название: ОТкуда ошибка?
Отправлено: Boatman от 03 Июля 2002, 17:53:54
Цитировать
key - это служебное слово


Да фигня это служебное слово.

я его заменял, ошибку все равно выдает.


Цитировать
) почему текстовое поля первичный ключ?


А что нельзя или просто не рекомендуется?
Название: ОТкуда ошибка?
Отправлено: AlieN от 03 Июля 2002, 18:01:46
Boatman
Цитировать
А что нельзя

нельзя :)
Название: ОТкуда ошибка?
Отправлено: fidget от 03 Июля 2002, 18:06:53
Цитировать
нельзя

блин! где ты эту глупость нашел!
можно, все можно!
mysql> create table test(
    -> name varchar(20) primary key);
Query OK, 0 rows affected (0.10 sec)

Boatman
замени key на другое  и убери 255 из text!
Название: ОТкуда ошибка?
Отправлено: YA от 04 Июля 2002, 02:10:48
Цитировать
и убери 255 из text

или используй TINYTEXT
Название: ОТкуда ошибка?
Отправлено: Alexandr от 04 Июля 2002, 09:19:41
Вот ответ:
CREATE TEMPORARY TABLE user2
(
_key varchar(20) PRIMARY KEY,
_value text
)
А вот комментарии:
Слова "value" и "key" зарезервированые.
Название: ОТкуда ошибка?
Отправлено: Boatman от 04 Июля 2002, 09:58:48
Цитировать
и убери 255 из text


Почему?
Мануал не  запрещает этого.
Название: ОТкуда ошибка?
Отправлено: Maniac от 04 Июля 2002, 10:51:23
Цитировать
Почему?
Мануал не запрещает этого.

Кто тебе сказал?

Цитировать

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
[table_options] [select_statement]

create_definition:
  col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
            [PRIMARY KEY] [reference_definition]
  or    PRIMARY KEY (index_col_name,...)
  or    KEY [index_name] (index_col_name,...)
  or    INDEX [index_name] (index_col_name,...)
  or    UNIQUE [INDEX] [index_name] (index_col_name,...)
  or    FULLTEXT [INDEX] [index_name] (index_col_name,...)
  or    [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...)
            [reference_definition]
  or    CHECK (expr)

type:
        TINYINT[(length)] [UNSIGNED] [ZEROFILL]
  or    SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
  or    MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
  or    INT[(length)] [UNSIGNED] [ZEROFILL]
  or    INTEGER[(length)] [UNSIGNED] [ZEROFILL]
  or    BIGINT[(length)] [UNSIGNED] [ZEROFILL]
  or    REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
  or    DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
  or    FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
  or    DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
  or    NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]
  or    CHAR(length) [BINARY]
  or    VARCHAR(length) [BINARY]
  or    DATE
  or    TIME
  or    TIMESTAMP
  or    DATETIME
  or    TINYBLOB
  or    BLOB
  or    MEDIUMBLOB
  or    LONGBLOB
  or    TINYTEXT
  or    TEXT
  or    MEDIUMTEXT
  or    LONGTEXT
  or    ENUM(value1,value2,value3,...)
  or    SET(value1,value2,value3,...)

index_col_name:
        col_name [(length)]

reference_definition:
        REFERENCES tbl_name [(index_col_name,...)]
                   [MATCH FULL | MATCH PARTIAL]
                   [ON DELETE reference_option]
                   [ON UPDATE reference_option]

reference_option:
        RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

table_options:
   TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MYISAM }
or   AUTO_INCREMENT = #
or   AVG_ROW_LENGTH = #
or   CHECKSUM = {0 | 1}
or   COMMENT = "string"
or   MAX_ROWS = #
or   MIN_ROWS = #
or   PACK_KEYS = {0 | 1}
or   PASSWORD = "string"
or   DELAY_KEY_WRITE = {0 | 1}
or      ROW_FORMAT= { default | dynamic | fixed | compressed }
or   RAID_TYPE= {1 | STRIPED | RAID0 } RAID_CHUNKS=#  RAID_CHUNKSIZE=#
or   UNION = (table_name,[table_name...])
or      DATA DIRECTORY="directory"
or      INDEX DIRECTORY="directory"

select_statement:
   [IGNORE | REPLACE] SELECT ...  (Some legal select statement)

Название: ОТкуда ошибка?
Отправлено: fidget от 04 Июля 2002, 11:03:29
value не является зарезервированным, ты его с values перепутал
Название: ОТкуда ошибка?
Отправлено: Alexandr от 04 Июля 2002, 12:40:10
Цитировать
value не является зарезервированным, ты его с values перепутал

Да верняк
Название: ОТкуда ошибка?
Отправлено: YA от 04 Июля 2002, 17:42:47
Чтобы не было проблем с зарезервированными словами, рекоммендуется использовать ``. Хотя бы потому, что список зарезервированных слов расширяется.