首先,目前在产品环境可用的MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以数据表必须使用InnoDB引擎。

下面,我们先创建以下测试用数据库表:


CREATE TABLE `roottb` (
`id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
`data` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) TYPE=InnoDB;

CREATE TABLE `subtb` (
`id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
`rootid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`data` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
INDEX (`rootid`),
FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON DELETE CASCADE
) TYPE=InnoDB;



注意:
1、必须使用InnoDB引擎;
2、外键必须建立索引(INDEX);
3、外键绑定关系这里使用了“ ON DELETE CASCADE”,意思是如果外键对应数据被删除,将关联数据完全删除,更多信息请参考MySQL手册中关于InnoDB的文档;
posted @ 2007-03-19 10:40 三毛 阅读(276) | 评论(0) |  编辑
在使用NHibernate的过程中发现使用ICriteria的List方法时,如果没有查询到满足条件的记录,那么访问ICriteria实例对象时就会发生异常,但是使用IQuery时不会有这种现象.
posted @ 2007-03-19 10:30 三毛 阅读(36) | 评论(0) |  编辑
在MySQL中支持两种数据表引擎,MYISAM和INNODB
它们的区别是MyISAM有很高的性能,如果数据量不大,可以采用这种格式
InnoDb 存储引擎,支持事务,行锁,外键.InnoDb 设计用来处理大数据量时提供最好的
性能.
InnoDb 提供自己的缓存(buffer pool) 还缓存数据和索引.innodb 把数据和索引存放
到表空间(tablespace) ,表空间是几个磁盘文件或者是原是设备文件(raw disk). 它
不像MyISAM 存储引擎,每个表只是一个文件.(这样在某些系统下最大2G限制). 而Innodb
没有此限制,可以无限扩展.

将MyISAM 数据库移动到另一台机器中
     直接移动文件


将InnoDB 数据库移动到另一台机器中

只要机器的的浮点数格式一致,那 InnoDB 的数据和日志文件在任何平台上均是二进制兼容的。 你可以通过简单地复制所有相关文件的方式来移动一个 InnoDB 数据库,方法 已在上面的章节中给以描述。如果在两台机器上浮点格式是不同的,但是你没有在你的表中使用 FLOAT DOUBLE 数据类型,那么也可以使用这种方法:仅仅是复制相关文件。如果机器的格式不同而又使用了浮点数据,那么你不得不通过使用 mysqldump mysqlimport 来移动那些表。

当向数据库中导入数据时最好将自动提交(autocommit)开关关闭将提高性能,如果插入事务用尽所有可用表空间将会引起大的大的回滚。建议在插入完整个表或表片段后再提交事务。

posted @ 2007-03-19 10:23 三毛 阅读(63) | 评论(0) |  编辑