自从接手ITOO权限系统后,遇到了很多问题,特别是数据库,把之前的SQL server 改成了MySQL,从4.1框架到5.0框架,建了一遍数据库,后面又从5.0的新框架回到4.1的WCF框架,又建了一遍数据库,算是有了些许经验,现在先回来总结一下遇到的问题。
查了很多资料,在建表的时候就是很难给表添加外键。也试了很多方法,什么键表之后再用手动添加,或是建表后再来条alter语句。建表的同时加外键,也是各种失败啊。后面又查了一下,人家说 InnoDB存储引擎没有启动。又查了一番怎么检查InnoDB引擎是否启动,怎么启动。可是后面用show engine语句,我看到我电脑上InnoDB存储引擎是开着的。想想可能是建库的时候少了点东西了。后面我就直接把库都删了,规规矩矩的用又键添加数据库、添加表了。这个时候添加的外键都能保存了。
后面米老师给我们开了个会,把新框架给否定了,也不让动数据库,米老师也要去我们用sql语句建表,这意味着我又绕回了之前的那个问题了。可是后面又想其实应该没那么难,在查询编辑器里用show create table ta_user;的sql语句就可以查看到建表时候的sql脚本,看了一眼,人家的sql脚本是这样的:
CREATE TABLE `ta_database` ( `DatabaseId` varchar(64) NOT NULL, `OrgId` varchar(64) DEFAULT NULL, `ResourceId` varchar(64) DEFAULT NULL, `Key` varchar(512) DEFAULT NULL, `TimeSpan` datetime DEFAULT NULL, `SysName` varchar(512) DEFAULT NULL, PRIMARY KEY (`DatabaseId`), KEY `ObFk` (`OrgId`), CONSTRAINT `ObFk` FOREIGN KEY (`OrgId`) REFERENCES `ta_organization` (`OrgId`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在用sql语句建表的时候也试问题不断,有因为多了个逗号的问题,也少了个分号的问题,有因为命名和MySQL里的数据类型冲突的问题,也有多个字母少个字母的问题。下面举两个例子:
1、
1022 - Can't write;duplicate key in table 'ta_roleresource'
这个问题是主键写错了,得回去检查主键。
2、
1064 - You have anerror in your SQL syntax; check the manual that corresponds to your MySQLserver version for the right syntax to use near 'Desc varchar(512) NULL,
PRIMARY KEY (`TimeId`),
KEY `fkres` (`ResourceId`)' at line 11
这个是因为MySQL例有Desc这个数据类型,而我也用了Desc这个命名字段,冲突了,其实这个问题不是问题,如果有冲突这个字段会变成蓝色和字段类型的颜色一样,加个单引号就好了。
建了两次数据库下来,解决了不少问题,也查了不少资料,突然觉得自己对于MySQL比sql server还熟悉。真的是在实践中才能学到更多东西啊。