问一个很简单的问题,mysql数据库怎么设置ID自动递增但不是主键?

我想在数据库中建立两张表student和course,两张表是多对多的关系,用score是它们之间的关系表,score中包括student_id和course_id,把这... 我想在数据库中建立两张表student和course,两张表是多对多的关系,用score是它们之间的关系表,score中包括student_id和course_id,把这两个作为表的联合主键,但是想为每个记录再加一个唯一的id,方便查找,该怎么办呢?数据库中警告不可以设置id自动递增但不是主键。。。。。 展开
 我来答
匿名用户
2013-07-08
展开全部

如果你要为  score中,  增加一个 唯一的 自增 id。


那么恐怕你要修改表的主键了, 把 那个使用  AUTO_INCREMENT  的   id  设置为主键。


因为 仅仅只定义 AUTO_INCREMENT 是无法处理的。

mysql> CREATE TABLE tab (
    ->   id  INT AUTO_INCREMENT,
    ->   val VARCHAR(10)
    -> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key


看上上面的例子了么?

我仅仅定义了  id  INT AUTO_INCREMENT。

没有定义为主键。

结果错误提示信息为:

只能有一个自动递增的列, 并且必须要定义为 key.

zhuling880621
2013-07-08
知道答主
回答量:21
采纳率:100%
帮助的人:8.1万
展开全部
可以写一个序列,序列步长为1,再写一个触发器,调用这个序列。
create sequence ID_CODE
minvalue 1
maxvalue 10
start with 1
increment by 1
cache 20;(这个是序列代码)

CREATE OR REPLACE TRIGGER score
BEFORE INSERT ON score
FOR EACH ROW
when (new.id IS NULL)
BEGIN
SELECT id_code.nextval INTO :new.id FROM dual;
END;(触发器,每当向score表中插入数据时,启动触发器,给id附一个序列的号码)
这样不管ID是否是主键,都没关系,麻是麻烦点,但是很实用,逻辑也很清晰。你就顺便学学序列和触发器吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
micro0369
2013-07-08 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4051万
展开全部
用自增长id做主键

然后学生id和课程id分别为非空,两者再定义一个联合的唯一索引。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
年翠花针妍
2020-03-31 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:32%
帮助的人:1041万
展开全部
primapy是主键的意思,表示定义的该列值在表中是唯一的意思,不可以有重复。
auto_increment可以理解为自动递增的意思,每增加一条记录,值会自动加1
如:
create
table
`table
name`
(
`id`
smallint(6)
unsigned
not
null
auto_increment,
`name`
varchar(16)
not
null
default
'',
primary
key
(`id`)
)
engine=myisam
default
charset=latin1
如果你insert
into
tablename
(id,name)
values
('','sadfa');
那么尖的值就是1
如果你再次insert
into
那这时你的id
的值班将会是2!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式