今天更换主键时遇到的一个问题
2008-12-31 10:09
330 查看
.yewlloc_box {
BORDER-RIGHT: #e1e2e4 1px solid;
BORDER-TOP: #e1e2e4 1px solid;
BORDER-LEFT: #e1e2e4 1px solid;
BORDER-BOTTOM: #e1e2e4 1px solid;
BACKGROUND:#e1e2e4
}
.line_table
{}
.line_table TD{
PADDING-TOP: 5px;
PADDING-BOTTOM: 5px;
BORDER-TOP: #ffffff 1px solid;
BORDER-RIGHT: #ffffff 1px solid;
BORDER-BOTTOM: #ccc 1px dashed;
BORDER-LEFT: #ffffff 1px solid;
MARGIN-BOTTOM: 3px;
text-align:left
}
.title
{
color:#1d76c8;
font-weight:bold;
}
.note
{
color:#587f19;
text-decoration:underline;
}
.table1{border-collapse:collapse}
.table1 td{border:1px solid #ccc}
今天更换主键时遇到的一个问题
关于主键的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联合作为多值主键。
错误的做法:
按照以前的习惯,我的打算是先删除掉表的主键,然后再添加多值主键。但在使用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;
第二步:alter table t_google_mem drop primary key;
第三步:alter table t_google_mem add primary key (f_id, f_csname);
第四步:alter table t_google_mem modify f_id int(10) not null auto_increment;
BORDER-RIGHT: #e1e2e4 1px solid;
BORDER-TOP: #e1e2e4 1px solid;
BORDER-LEFT: #e1e2e4 1px solid;
BORDER-BOTTOM: #e1e2e4 1px solid;
BACKGROUND:#e1e2e4
}
.line_table
{}
.line_table TD{
PADDING-TOP: 5px;
PADDING-BOTTOM: 5px;
BORDER-TOP: #ffffff 1px solid;
BORDER-RIGHT: #ffffff 1px solid;
BORDER-BOTTOM: #ccc 1px dashed;
BORDER-LEFT: #ffffff 1px solid;
MARGIN-BOTTOM: 3px;
text-align:left
}
.title
{
color:#1d76c8;
font-weight:bold;
}
.note
{
color:#587f19;
text-decoration:underline;
}
.table1{border-collapse:collapse}
.table1 td{border:1px solid #ccc}
今天更换主键时遇到的一个问题
关于主键的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 | | +--------------+-----------+------+-----+---------------------+----------------+
相关文章推荐
- 今天更换主键时遇到的一个问题
- mysql更换主键遇到的一个问题
- 今天遇到的一个奇怪的vb.net问题
- 今天使用VS2012遇到一个问题:"链接器工具错误 LNK2026 XXX模块对于 SAFESEH 映像是不安全的"
- 今天遇到了一个问题,怎么判断你输入的数是整数 ----2012.6.28
- 记今天遇到了一个jQuery插件里的opacity属性的浏览器兼容性得问题
- 今天遇到的一个郁闷的问题。
- 今天又遇到了一个问题
- 今天遇到了一个很奇怪的问题
- 今天win 2003服务器上遇到一个问题
- 今天在csdn上遇到一个问题,是关于sql数据行列转换的,我的写法如下:
- 今天再做上传图片时候遇到了一个JS 图片预览问题
- 今天改bug遇到一个ie8样式错乱问题
- 今天在家装Tomcat服务器,郁闷了,遇到一个问题装好开启服务后 进入不了manager/
- 今天遇到一个奇怪的问题 android:sharedUserId有关
- 今天遇到的一个编译小问题
- 今天装完ASM时遇到的一个比较低级的问题ORA-15149: another ASM instance found running on the host
- 今天遇到一个问题才知道如果安装了命名实例 SSIS Service 需要手动更改配置文件
- 今天遇到一个weblogic的 奇怪的问题
- 今天遇到的一个开发问题 window.onload冲突