Sql 如何使用varchar字段和int自动递增字段设置复合主键?

Sql 如何使用varchar字段和int自动递增字段设置复合主键?,sql,mariadb,Sql,Mariadb,使用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`) 因此,产品的

使用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,例如TV,可以是:TV001

这将导致下一个错误:表定义不正确;只能有一个自动列,必须将其定义为键

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


谢谢

对您的定义稍作修改:(添加了
部分,以满足错误的
…一个自动列,必须将其定义为键
消息)

…为我工作:

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)

虽然有效,但这可能不是OP想要的。InnoDB没有从ID(在本例中为
code
)开始使用每个不同的
producttype
的功能。也就是说,“1”将是TV001所独有的;“1”其他类型将使用唯一的ID。@RickJames:我明白这一点。我认为模式更像是
TV001
TV002
PK003
DT004
,等等。我没有考虑在特定的
producttype
中重新开始,但是
producttype
+
code
只会使用下一个
代码
值。参见
INT(3)零填充
。或者,对于仅3位数字,
SMALLINT(3)无符号零填充
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)