create table student( s_id VARCHAR(50) PRIMARY KEY AUTO_INCREMENT, s_gender CHAR(2) UNIQUE NOT NULL, s_birthday datetime DEFAULT '1970-01-01', s_degree VARCHAR(12), s_graduate_date datetime DEFAULT '1970-01-02', s_specialty VARCHAR(50), s_phone VARCHAR(200), s_salary SMALLINT, s_allowance DECIMAL(18,2), s_skill VARCHAR(2000) )为什么会报1063 - Incorrect column specifier for column 's_id'错误
时间: 2024-03-07 15:48:01 浏览: 36
这是因为在MySQL中,VARCHAR类型不能使用AUTO_INCREMENT属性,只有整数类型才能使用AUTO_INCREMENT。因此,将s_id列的类型更改为INT或BIGINT,并将其AUTO_INCREMENT属性设置为主键即可,例如:
```
CREATE TABLE student (
s_id INT PRIMARY KEY AUTO_INCREMENT,
s_gender CHAR(2) UNIQUE NOT NULL,
s_birthday datetime DEFAULT '1970-01-01',
s_degree VARCHAR(12),
s_graduate_date datetime DEFAULT '1970-01-02',
s_specialty VARCHAR(50),
s_phone VARCHAR(200),
s_salary SMALLINT,
s_allowance DECIMAL(18,2),
s_skill VARCHAR(2000)
);
```
这样就可以成功创建表了。
相关问题
create table t_card( card_id char(20) primary key auto_increment not null , student_id char(10) not null, student_name varchar(20) not null, curr_money decimal(8,2) not null, Register_data date not null );
这是一条创建名为 t_card 的表的 SQL 语句。该表包含以下 5 个列:
- card_id: char(20) 类型的主键列,长度为 20,使用 auto_increment 自增,并且不允许为空。
- student_id: char(10) 类型的列,长度为 10,不允许为空。
- student_name: varchar(20) 类型的列,长度为 20,不允许为空。
- curr_money: decimal(8,2) 类型的列,总长度为 8,小数点后有 2 位,不允许为空。
- Register_data: date 类型的列,日期类型,不允许为空。
这个表的设计比较简单,适用于存储学生卡的信息,其中每张卡都由一个唯一的卡号(card_id)来标识,同时记录了该卡所属的学生(student_id)、学生姓名(student_name)、卡内余额(curr_money)和注册日期(Register_data)。
alter table user add use_id varchar(10) primary key auto_increment first;哪里错了
在 MySQL 中,`auto_increment` 必须用于整数类型的列,不能用于字符串类型的列。所以,将 `use_id` 的数据类型改为整数类型,例如 `int`,就可以使用 `auto_increment` 属性了。修改后的语句如下:
```
alter table user add use_id int primary key auto_increment first;
```