首页 > 解决方案 > 如何使用 varchar 字段和 int 自增字段设置复合主键?

问题描述

使用 mariadb,我想创建一个像这样的表:

CREATE TABLE `products` (
`producttype` varchar(15) NOT NULL,
`code` int(6) NOT NULL auto_increment,
`description` varchar(200) NOT NULL,
`price` double default 0.0,
`stock` int default 0,
PRIMARY KEY(`producttype`, `code`)

因此,产品(例如电视)的 id 可能是:TV001。

这给出了下一个错误:不正确的表定义;只能有一个自动列,并且必须将其定义为键。

如果您真的希望产品的 id 由类型加上自动增量整数组成,您将如何做到这一点?

谢谢

标签: sqlmariadb

解决方案


对您的定义稍作更改:(添加的key部分,以满足错误...one auto column and it must be defined as a key消息)

CREATE TABLE `products` (
`producttype` varchar(15) NOT NULL,
`code` int(6) NOT NULL auto_increment,
`description` varchar(200) NOT NULL,
`price` double default 0.0,
`stock` int default 0,
key (`code`),
PRIMARY KEY(`producttype`, `code`));

...为我工作:

MariaDB [test]> CREATE TABLE `products` (
    -> `producttype` varchar(15) NOT NULL,
    -> `code` int(6) NOT NULL auto_increment,
    -> `description` varchar(200) NOT NULL,
    -> `price` double default 0.0,
    -> `stock` int default 0,
    -> key (`code`),
    -> PRIMARY KEY(`producttype`, `code`));

Query OK, 0 rows affected (0.38 sec)

...然后检查表格:

MariaDB [test]> desc products;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| producttype | varchar(15)  | NO   | PRI | NULL    |                |
| code        | int(6)       | NO   | PRI | NULL    | auto_increment |
| description | varchar(200) | NO   |     | NULL    |                |
| price       | double       | YES  |     | 0       |                |
| stock       | int(11)      | YES  |     | 0       |                |
+-------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

推荐阅读