mysql ENGINE

对mysql 的 engine 关键字一直不了解。今天在给一个数据表添加外键关系的时候,外键强制功能一直不好使。就是在没有添加主表数据的时候,对关联表添加记录竟然成功了。

这里是两张表,web_news_type为新闻类型表,web_news为新闻表。建立表的sql如下:

-- 
-- 表的结构 web_news_type
-- 

CREATE TABLE web_news_type (
  mainkey char(32) NOT NULL,
  type_name varchar(50) default NULL,
  useflag char(1) default NULL COMMENT '0.不使用,1.使用',
  add_user varchar(32) default NULL,
  add_date date default NULL,
  PRIMARY KEY  (mainkey)
  

) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE web_news (
  mainkey char(32) NOT NULL,
  type_key char(32) default NULL,
  title varchar(200) default NULL,
  content text,
  show_flag char(1) default NULL COMMENT '0.否,1.是',
  state_key char(1) default NULL COMMENT '0.普通,1.hot,2.new',
  click_count int(32) default NULL,
  add_user varchar(32) default NULL,
  add_date date default NULL,
  PRIMARY KEY  (mainkey)
  -- foreign key(type_key) references web_news_type(mainkey) on delete cascade on update cascade,
  -- CONSTRAINT FK_type_news FOREIGN KEY (type_key) REFERENCES web_news_type (mainkey)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
ALTER TABLE web_news
  ADD CONSTRAINT FK_type_news FOREIGN KEY (type_key) REFERENCES web_news_type (mainkey);

 

 如果不用修改的办法(ALTER TABLE web_news),也可以直接将外键关系写在关联表中,注释的部分使用了两种写法表达外键关系。

 

这样建立的两张表之间虽然添加了外键关系,但是使用phpmyadmin工具查看关系的时候却找不到两张表的关联关系,

用PowerDesigner建立了两张表及外键关系,查看了一下生成的sql脚本,发现建表的时候没有指定ENGINE=MyISAM

,这样才能正常的生成主外键约束。r如果要使用FOREIGN KEY强制 ,请使用InnoDB存储引擎。

 

所以要弄清楚ENGINE的意思:

ENGINE在MySQL中被称作存储引擎(也称作表类型)。

 常用的存储引擎:
· MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注

    意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。

· InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。InnoDB也支持FOREIGN KEY强制。

    InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。

· BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。

· Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。

· Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。

    对于诸如数据仓储等VLDB环境十分适合。

· Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。

· Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式

    环境或数据集市环境。

· Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高

    的正常工作时间和可用性。

· Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应

    用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。

 

  仅供参考,如果有错误的地方,还请路过的指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值