MySQL外键及级联删除 && 表的存储引擎与创建索引 && 删除数据库和表

Messages表:

mysql>create table Messages(

->message_id int auto_increment primary key,

->user_name varchar(50) not null,

->author_id int not null,

->body text,

->forum_id int not null);

Forums表:

mysql>create table Forums(

->forum_id int auto_increment primary key,

->name varchar(150),

->description text,

->owner_id int);

两种最常见的引擎是MyISAM和InnDB。(MyIsAm更快并且表存储所需空间更少,,InnoDB 支持SQL事务处理所需的更加健壮的表和记录锁定);

在SQL中使用create table 语句时可以指定存储引擎:

mysql>create table Messages(

->message_id int auto_increment primary key,

->user_name varchar(50) not null,

->author_id int not null,

->body text,

->forum_id int not null

->)engine InnoDB;

对于某个表,比如Messages表,我们常常希望有效的搜索这个表,在只给定用户名(user_name)的条件下查找记录。

我们可以通过把索引添加到create table语句中完成这一操作:

mysql>create table Messages(

->message_id int auto_increment primary key,

->user_name varchar(50) not null,

->author_id int not null,

->body text,

->forum_id int not null

->index(user_name)

->)engine InnoDB;

如果我们后来又发现需要频繁的搜索author_id字段,那么使用create index 语句 我们可以在创建表之后创建索引:

create index author_id on Messages (author_id);

外键和级联删除::::

前面的连个表中,我们发现用于消息的表具有引用forums表的外键,:forums_id int not null

这表示我们希望messages中的forums_id只能是来自forums表中的forums_id 的合法标示符,虽然可以在用户添加消息时候添加一下代码验证forums_id是合法的,但是我们可以让数据库服务器通过强制外键来替我们完成这个工作,:

foreign key (formus_id) references Forums (forums_id);

如果试图把forums_id字段添加不表示来自适当表的合法标示符到Messages表,就会导致错误。

当我们想删除一个表时例如Forums 就会导致Messages表中有一行指向不在的Forums表,我们在设计Web应用程序时候,希望数据库自动删除所有属于这个表的消息,那么可以进一步修改foreign key约束,让他执行级联删除。当父表(Forums)中的记录被删除时候,子表(Messages)中外键引用的的被设置为刚被删除的父记录的Id(例如forums_id)的任何记录也被数据库引擎删除。

通过在外键声明中添加on delete cascade :

foreign key (forums_id) references Forums (forum_id)

on delete cascade

删除数据库和表:

在SQL中,使用drop database和drop table 查询执行这些任务。这两个查询都使用要删除的实体的名称作为参数:

drop database 数据库名;

drop table 表名;

时间: 2024-10-21 03:20:10

MySQL外键及级联删除 && 表的存储引擎与创建索引 && 删除数据库和表的相关文章

[原创]MYSQL中利用外键实现级联删除和更新

MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定在删除.更新父表时,对子表进行的相应操作,包括RESTRICT.NO ACTION.SET NULL和CASCADE.其中RESTRICT和NO ACTION相同,是指在子表有关联记录的情况下父表不能更新:CASCADE表示父表在更新或者删除时,更新或者删除子表对应记录:SET NULL则是表示父表

MySql 修改外键 支持级联删除

首先必须要有外键,InnoDB甚么的都不说了,直接上修改句子. ALTER TABLE `t_terminal` DROP FOREIGN KEY `FK704405E7F06A14EF`; ALTER TABLE `t_terminal` ADD CONSTRAINT `FK704405E7F06A14EF` FOREIGN KEY (`userId`) REFERENCES `t_user` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT; 要先删除该

MySQL——外键

概念 关键字:foreign key,也叫做外键约束! 如果一个实体A的某个字段,刚好指向另一个实体B的主键,那么实体A的这个字段就叫做外键: 所以,简单来说,外键就是本表的某个字段指向外表的主键! 上面的,学生表中的班级字段其实就是一个外键! 其中,被指向的实体集(班级表),叫做主实体集(主表),也叫做父实体集(父表),负责指向的实体集(学生表),叫做从实体集(从表),也叫做子实体集(子表) 作用 外键的意义就是用来约束关系内的实体! 为什么需要有外键约束,因为需要在插入记录的时候,保证其符合

mysql外键使用和事物使用

mysql外键功能主要是为了保证关联表数据的一致性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有 客户号,客户名称 b表中存有 每个客户的订单 有了外键后 你只能在确信b 表中没有客户x的订单后,才可以在a表中删除客户x 建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键). 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键表名>(外键列名) 事件触发限制:

MySQL外键使用及说明(简单易懂)

MySQL外键使用及说明 一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件:  1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持): 2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立:  3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以: 外键的好

MySQL 外键

在MySQL中 (1)MySQL 数据表主要支持六种类型 ,分别是:BDB.HEAP.ISAM.MERGE.MYISAM.InnoBDB.这六种又分为两类,一类是”事务安全型”(transaction-safe),包括BDB和InnoDB:其余都属于第二类,称为”非事务安全型”(non-transaction-safe). InnoDB 是较新的事务安全型存储引擎,用于事务处理应用程序,支持BDB的几乎所有特性,并具有众多新特性,包括ACID事务支持. 特性: 事务处理机制 支持外链 崩溃后能立

Mysql外键约束设置使用方法

如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松.外键主要用来保证数据的完整性和一致性 两个表必须是InnoDB表,MyISAM表暂时不支持外键 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立: 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列

mysql外键约束总结

总结三种MySQL外键约束方式 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松.这里以MySQL为例,总结一下3种外键约束方式的区别和联系. 这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组. 首先创建用户组表: 创建用户组表 create table t_group ( id int not n

MySQL外键使用需要注意的几点

最近刚刚接触MySQL,在建立表示遇到了一些问题,总是提示错误代码:150 can't create table ...,所以就到网上搜索了一下发现还有以下几点需要注意的: [CONSTRAINT [symbol]] FOREIGN KEY    [index_name] (index_col_name, ...)    REFERENCES tbl_name (index_col_name,...)    [ON DELETE reference_option]    [ON UPDATE r