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