Forum Webscript.Ru
Общие => Базы данных => Тема начата: Boatman от 03 Июля 2002, 17:36:12
-
Вот такой запрос ругается на синтаксис:
CREATE TABLE user2
(
key varchar(20) PRIMARY KEY,
value text(255)
)
В чем дело?
-
Boatman
1) почему текстовое поля первичный ключ?
2) в поле text необязательно указывать размер
-
key - это служебное слово
-
key - это служебное слово
Да фигня это служебное слово.
я его заменял, ошибку все равно выдает.
) почему текстовое поля первичный ключ?
А что нельзя или просто не рекомендуется?
-
Boatman
А что нельзя
нельзя :)
-
нельзя
блин! где ты эту глупость нашел!
можно, все можно!
mysql> create table test(
-> name varchar(20) primary key);
Query OK, 0 rows affected (0.10 sec)
Boatman
замени key на другое и убери 255 из text!
-
и убери 255 из text
или используй TINYTEXT
-
Вот ответ:
CREATE TEMPORARY TABLE user2
(
_key varchar(20) PRIMARY KEY,
_value text
)
А вот комментарии:
Слова "value" и "key" зарезервированые.
-
и убери 255 из text
Почему?
Мануал не запрещает этого.
-
Почему?
Мануал не запрещает этого.
Кто тебе сказал?
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)
-
value не является зарезервированным, ты его с values перепутал
-
value не является зарезервированным, ты его с values перепутал
Да верняк
-
Чтобы не было проблем с зарезервированными словами, рекоммендуется использовать ``. Хотя бы потому, что список зарезервированных слов расширяется.