Что не так с этим простым оператором MySQL CREATE TABLE? - PullRequest
0 голосов
/ 22 июля 2011

Это простая инструкция CREATE TABLE, которую я пишу в PHPMyAdmin. Хорошо, я знаю, что мог бы просто сделать это простым способом в PHPMyAdmin, но мне нравится иметь полный контроль. Вот утверждение:

CREATE TABLE profile
(
id int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
type int(1) NOT NULL,
view int(1) NOT NULL default '1',
ver int(1) NOT NULL default '2',
email NOT NULL varchar(32),
password NOT NULL varchar(16),
first varchar(32),
last varchar(32),
site varchar(64),
address varchar(32),
city varchar(32),
zip int,
state char(2),
country varchar(50),
about text,
datereg int(20)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Ответы [ 5 ]

3 голосов
/ 22 июля 2011

Существует несколько ошибок, из-за которых ваш оператор SQL не работает.

Попробуйте вместо этого:

CREATE TABLE `profile` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` int(1) NOT NULL,
  `view` int(1) NOT NULL DEFAULT '1',
  `ver` int(1) NOT NULL DEFAULT '2',
  `email` varchar(32) NOT NULL,
  `password` varchar(16) NOT NULL,
  `first` varchar(32),
  `last` varchar(32),
  `site` varchar(64),
  `address` varchar(32),
  `city` varchar(32) ,
  `zip` int(11),
  `state` char(2),
  `country` varchar(50),
  `about` text,
  `datereg` int(20),
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Несколько дополнений:

  • Попробуйтеизбегая зарезервированных слов (таких как view, last, first и т. д.) в ваших таблицах.Это возможно (если экранировано правильно), но это помогает вообще не использовать ничего.
  • Правильно избегайте имен полей и таблиц.
  • Прочтите руководство: http://dev.mysql.com/doc/refman/5.1/en/create-table.html
3 голосов
/ 22 июля 2011

я заменил

view int(1) NOT NULL default '1',
ver int(1) NOT NULL default '2',
email NOT NULL varchar(32),
password NOT NULL varchar(16),

с

view int(1) NOT NULL default 1,
ver int(1) NOT NULL default 2,
email varchar(32) NOT NULL ,
password varchar(16) NOT NULL ,

и все заработало

2 голосов
/ 22 июля 2011

попробуйте это =)

CREATE TABLE `db`.`profile` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `type` INT(1) NOT NULL ,
  `view` INT(1) NOT NULL DEFAULT 1 ,
  `ver` INT(1) NOT NULL DEFAULT 2 ,
  `email` VARCHAR(32) NULL ,
  `password` VARCHAR(16) NULL ,
  `first` VARCHAR(32) NULL ,
  `last` VARCHAR(32) NULL ,
  `site` VARCHAR(64) NULL ,
  `address` VARCHAR(32) NULL ,
  `city` VARCHAR(32) NULL ,
  `zip` INT NULL ,
  `state` CHAR(2) NULL ,
  `country` VARCHAR(50) NULL ,
  `about` TEXT NULL ,
  `datereg` INT(20) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = MyISAM DEFAULT CHARSET=utf8;
1 голос
/ 22 июля 2011

- это ключевое слово MySQL.Если вы хотите использовать столбец с тем же именем, вы должны заключить его в кавычки, такие как

`view` int(1) NOT NULL default 1,
0 голосов
/ 22 июля 2011

Не видя, что это за ошибка, я бы сказал, что она дает сбой, потому что вы пытаетесь назвать столбец с помощью зарезервированного ключевого слова MySQL - я предполагаю, что view

Если вы ставите обратные пометки `вокруг имен столбцов, это позволит вам использовать зарезервированные слова.Просто помните, что любые другие запросы к этой таблице также должны иметь обратные метки вокруг имен столбцов, которые используют зарезервированные слова.

например.

CREATE TABLE profile
(
`id` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
`type` int(1) NOT NULL,
`view` int(1) NOT NULL default '1',
`ver` int(1) NOT NULL default '2',
`email` NOT NULL varchar(32),
`password` NOT NULL varchar(16),
`first` varchar(32),
`last` varchar(32),
`site` varchar(64),
`address` varchar(32),
`city` varchar(32),
`zip` int,
`state` char(2),
`country` varchar(50),
`about` text,
`datereg` int(20)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
...