在MYSQL中创建表语句

Dav*_*cia 3 mysql

我正在尝试在 MYSQL 中创建下表并给出错误,

CREATE TABLE CUSTOMER (
CUS_ID INT NOT NULL AUTO_INCREMENT,
CUS_NAME VARCHAR,
CUS_DOB DATE,
CUS_ADDR VARCHAR,
CUS_EMAIL VARCHAR,
CUS_TEL VARCHAR,
CUS_PW VARCHAR,
CUS_JOINDATE DATETIME,
CUS_LASTACCESS DATE)

#1064 - 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 ' CUS_DOB DATE, CUS_ADDR VARCHAR, CUS_EMAIL VARCHAR, CUS_TEL VARCHAR, CUS_PW' at line 3
Run Code Online (Sandbox Code Playgroud)

Phi*_*lᵀᴹ 5

它有两个问题。

首先,您需要为VARCHAR列指定最大数据长度。

其次,该AUTO_INCREMENT列必须是PRIMARY KEY.

以下 DDL 语句将起作用:

CREATE TABLE CUSTOMER ( 
  CUS_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  CUS_NAME VARCHAR(32), 
  CUS_DOB DATE, 
  CUS_ADDR VARCHAR(128), 
  CUS_EMAIL VARCHAR(64), 
  CUS_TEL VARCHAR(16), 
  CUS_PW VARCHAR(32), 
  CUS_JOINDATE DATETIME, 
  CUS_LASTACCESS DATE
);
Run Code Online (Sandbox Code Playgroud)

显然,您需要更改VARCHAR类型以反映数据所需的大小。

  • @Phil:准确地说,`AUTO_INCREMENT` 列不需要是主键(或它的一部分)。它只需要被索引,虽然我无法想象它的用途(这里肯定不是这种情况)。 (2认同)

Aar*_*own 5

您必须为您的 VARCHAR 字段指定一个长度,并使您的 AUTO_INCREMENT 字段成为主键。我在这里为您编造了长度 - 您应该考虑每个字段实际需要的最大长度。

CREATE TABLE CUSTOMER (
CUS_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
CUS_NAME VARCHAR(30),
CUS_DOB DATE,
CUS_ADDR VARCHAR(50),
CUS_EMAIL VARCHAR(30),
CUS_TEL VARCHAR(20),
CUS_PW VARCHAR(30),
CUS_JOINDATE DATETIME,
CUS_LASTACCESS DATE)
Run Code Online (Sandbox Code Playgroud)

其他一些建议:

  1. 指定引擎(InnoDB 或 MyISAM)
  2. 去掉所有字段的 CUS_ 前缀。你知道他们是客户。他们在 CUSTOMERS 表中
  3. CUS_PW 看起来很像密码字段。在任何情况下,永远不要在任何环境中将客户密码以纯文本形式存储在数据库中。永远,永远。

这是CREATE TABLE数据类型的 MySQL 文档