分享

[MySQL]mysql主键(Primary key),外键(references key),unique key设置

 思念是一种饼 2011-04-11
看一下下面的sql代码就可以了:
DROP TABLE IF EXISTS `Program_Release`;
CREATE TABLE `Program_Release` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`prog_id` mediumint(8) unsigned NOT NULL default '0',
`name` char(15) collate utf8_bin NOT NULL default '',
-- 主键
PRIMARY KEY (`id`),
-- unique键
UNIQUE KEY `name` (`name`),
-- 外键
KEY `FK_Program_Release_1` (`prog_id`),
CONSTRAINT `FK_Program_Release_1` FOREIGN KEY (`prog_id`) REFERENCES `Program` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

mysql只有InnoDB这个引擎支持外键。

在表建好之后设置外键的方法:
ALTER table IC_Release add foreign key(ic_id) references IC(id) on delete restrict on update restrict;
设置unique键的方法:
ALTER TABLE `Branch` ADD UNIQUE (`name`);
---------------------------------------------------------------
我现在有两个字段不能重复一个ID,一个name,id设置成了自动增长,怎么才能把name设置成不能重复???

下面那个不行:
CREATE TABLE tb_department (
  id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  dt_name char(10),
  dt_createTime varchar(20),
  dt_bz varchar (50)
  UNIQUE(dt_name)
) AUTO_INCREMENT = 100;
回答:
不能放在这里,要单独的一个建立索引的语句才行,例如:
create unique index idx_num on tb_department (dt_name);
-----------------------------------------------------------------
原有一unique索引AK_PAS_Name(PAC_Name)在表tb_webparamcounter中,

然后我执行以下sql修改索引
alter   table   tb_webparamcounter   drop   index   AK_PAS_Name;
alter   table   tb_webparamcounter   add   UNIQUE   AK_PAS_Name(PC_ID,PAC_Name);

这一段执行成功后,我向表里添加了一条新数据,再加另一条时发现索引的逻辑不对,还需要再加一个字段进去,于是执行
alter   table   tb_webparamcounter   drop   index   AK_PAS_Name;
alter   table   tb_webparamcounter   add   UNIQUE   AK_PAS_Name(PC_ID,PAC_Name,PAC_Value);

此时提示
1025-Error   on   rename   of   '.\hotelweb\#sql-e84_3 '   to   '.\hotelweb\tb_webparamcounter '(errno:150)

为什么会出这个错,如何解决?我现在一般情况下不能把表中数据导出,表中数据有用不能drop表。
回答:
在google查到解决方法,原来其中的PC_ID是FOREIGN   KEY,必需先drop   FOREIGN   KEY,再重做上一步才行。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多