今天更换主键时遇到的一个问题

今天更换主键时遇到的一个问题

关于主键的SQL语法:
alter table t_google_mem drop primary key; //删除表现有主键
alter table t_google_mem add primary key (f_id); //创建主键
alter table t_google_mem add primary key (f_id, f_csname); //创建多值主键
下面说下我在实际的工作过程中,遇到的一个问题。目前我有了如下的一张表,现在要做的操作是将f_id和f_csname联合作为多值主键。
mysql> desc t_google_mem;
+--------------+-----------+------+-----+---------------------+----------------+
| Field        | Type      | Null | Key | Default             | Extra          |
+--------------+-----------+------+-----+---------------------+----------------+
| f_id         | int(10)   | NO   | PRI | NULL                | auto_increment |
| f_name       | char(255) | NO   |     |                     |                |
| f_assion     | char(255) | NO   |     |                     |                |
| f_csname     | char(255) | NO   |     |                     |                |
| f_time       | datetime  | NO   |     | 0000-00-00 00:00:00 |                |
| f_status     | int(10)   | NO   |     | 1                   |                |
+--------------+-----------+------+-----+---------------------+----------------+
错误的做法:
按照以前的习惯,我的打算是先删除掉表的主键,然后再添加多值主键。但在使用alter table t_google_mem drop primary key;语句时,出错了提示如下:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
错误的大概意思是: 不正确的表格定义;这里只能有一个字段当作auto increment,并且必须把这个字段作为主键。

思考上面的错误提示后,我觉得正确的步骤应该首先去掉表中字段f_id的auto_increment的属性,然后再删除主键,下一步再添加多值主键,最后再将f_id调整成auto_increment。

说做就做,下面开始实施SQL修改。
第一步:alter table t_google_mem modify f_id int(10) not null default 0;
mysql> alter table t_google_mem modify f_id int(10) not null default 0;
Query OK, 41 rows affected (0.05 sec)
Records: 41  Duplicates: 0  Warnings: 0
第二步:alter table t_google_mem drop primary key;
mysql> alter table t_google_mem drop primary key;
Query OK, 41 rows affected (0.04 sec)
Records: 41  Duplicates: 0  Warnings: 0
第三步:alter table t_google_mem add primary key (f_id, f_csname);
mysql> alter table t_google_mem add primary key (f_id, f_csname);
Query OK, 41 rows affected (0.03 sec)
Records: 41  Duplicates: 0  Warnings: 0
第四步:alter table t_google_mem modify f_id int(10) not null auto_increment;
mysql> alter table t_google_mem modify f_id int(10) not null  auto_increment;
Query OK, 41 rows affected (0.02 sec)
Records: 41  Duplicates: 0  Warnings: 0


经过上述4步的修改后,检查表结构,结果显示已经满足我的要求。
mysql> desc t_google_mem;
+--------------+-----------+------+-----+---------------------+----------------+
| Field        | Type      | Null | Key | Default             | Extra          |
+--------------+-----------+------+-----+---------------------+----------------+
| f_id         | int(10)   | NO   | PRI | NULL                | auto_increment |
| f_name       | char(255) | NO   |     |                     |                |
| f_assion     | char(255) | NO   |     |                     |                |
| f_csname     | char(255) | NO   | PRI |                     |                |
| f_time       | datetime  | NO   |     | 0000-00-00 00:00:00 |                |
| f_status     | int(10)   | NO   |     | 1                   |                |
+--------------+-----------+------+-----+---------------------+----------------+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值