你的位置:
问答吧
-> MySQL
-> 问题详情
MYSQL建表外键约束的问题
CREATE TABLE `admins_roles` (
`adminId` varchar(20) NOT NULL,
`roleId` int(11) NOT NULL,
PRIMARY KEY (`adminId`,`roleId`),
KEY `FKEF02020E4DA6F3F2` (`roleId`),
KEY `FKEF02020ED043BDEE` (`adminId`),
CONSTRAINT `FKEF02020E4DA6F3F2` FOREIGN KEY (`roleId`) REFERENCES `role` (`id`),
CONSTRAINT `FKEF02020ED043BDEE` FOREIGN KEY (`adminId`) REFERENCES `admin` (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
FKEF02020E4DA6F3F2 这是什么意思?
自己随便写的还是生成的?
如果不写的话建表是错误的
但是不加CONSTRAINT的约束的话,用建模的工具看没有关联关系。
作者: lequery
发布时间: 2010-09-29
引用FKEF02020E4DA6F3F2 这是什么意思?
查一下MYSQL手册中的语法就明白了。 这个是CONSTRAINT的名称
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name,...) reference_definition
引用自己随便写的还是生成的?
自行决定,可写可不写,不写则由系统自动命名。
作者: ACMAIN_CHM
发布时间: 2010-09-29
引用如果不写的话建表是错误的
估计你没写对。
SQL code
mysql>CREATETABLE`tx` (->`id`int(11)NOTNULL,->`c1`int(11)DEFAULTNULL,->`c2`int(11)DEFAULTNULL,->`c3`int(11)DEFAULTNULL,->PRIMARYKEY(`id`),->CONSTRAINTFOREIGNKEY(`c2`)REFERENCES`t2` (`id`)->) ENGINE=InnoDB ;
Query OK,0rows affected (0.11sec)
mysql>showcreatetabletx;+-------+----------------------------------------------------------------|Table|CreateTable+-------+----------------------------------------------------------------|tx|CREATETABLE`tx` (
`id`int(11)NOTNULL,
`c1`int(11)DEFAULTNULL,
`c2`int(11)DEFAULTNULL,
`c3`int(11)DEFAULTNULL,PRIMARYKEY(`id`),KEY`c2` (`c2`),CONSTRAINT`tx_ibfk_1`FOREIGNKEY(`c2`)REFERENCES`t2` (`id`)
) ENGINE=InnoDBDEFAULTCHARSET=latin1|+-------+----------------------------------------------------------------1rowinset(0.00sec)
mysql>
作者: ACMAIN_CHM
发布时间: 2010-09-29
约束名,自己写的
可以不用,系统自行生成
多了1个,
CREATE TABLE `admins_roles` (
`adminId` varchar(20) NOT NULL,
`roleId` int(11) NOT NULL,
PRIMARY KEY (`adminId`,`roleId`),
KEY `FKEF02020E4DA6F3F2` (`roleId`),
KEY `FKEF02020ED043BDEE` (`adminId`),
FOREIGN KEY (`roleId`) REFERENCES `role` (`id`),
FOREIGN KEY (`adminId`) REFERENCES `admin` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
作者: WWWWA
发布时间: 2010-09-29