存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型。
基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
- 查看数据库可以支持的存储引擎
用show engines; 命令可以显示当前数据库支持的存储引擎情况
2.创建数据库表时设置存储存储引擎的基本语法是:
Create table tableName(
columnName(列名1) type(数据类型) attri(属性设置),
columnName(列名2) type(数据类型) attri(属性设置),
……..) engine = engineName
例:
create table user(
id int not null auto_increment,
username char(20) not null,
sex char(2),
primary key(id))
engine=InnoDB;
如果经常用InnoDB的话可以直接将它设置为默认的存储引擎。
外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。
对于外键
下面直接放一个例子来说:
//表1:(父表)
create table repo_table(
repo_id char(13) not null primary key,
repo_name char(14) not null)
engine=InnoDB;
//表2:(子表)
create table busi_table(
busi_id char(13) not null primary key,
busi_name char(13) not null,
repo_id char(13) not null,
index (repo_id),//外键必须建立索引
foreign key(repo_id) references repo_table(repo_id) on delete cascade on update cascade)//增加级联操作
engine=InnoDB;
insert into repo_table values("12","sz");//成功
insert into repo_table values("13","cd");//成功
insert into busi_table values("1003","cd", "13");//成功
insert into busi_table values("1002","sz", "12");//成功
insert into busi_table values("1001","gx", "11");//失败
//级联删除:删除父表的数据,子表对应的也会被删除
delete from repo_table where repo_id=12;
//级联更新:更新父表的数据,子表对应的也会被更新
update repo_table set repo_id=6 where repo_id=12;
注意:
·删除先删除子表数据
·插入先插入父表数据
网友评论