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 表名;

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

  1. MySQL外键设置 级联删除

    . cascade方式在父表上update/delete记录时,同步update/delete掉子表的匹配记录 . set null方式在父表上update/delete记录时,将子表上匹配记录的列设 ...

  2. MySQL外键之级联

    简介 MySQL外键起到约束作用,在数据库层面保证数据的完整性.例如使用外键的CASCADE类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这 ...

  3. MySQL外键约束_ON DELETE CASCADE/ON UPDATE CASCADE

    MySQL通过外键约束实现数据库的参照完整性,外键约束条件可在创建外键时指定,table的存储引擎只能是InnoDB,因为只有这种存储模式才支持外键. 外键约束条件有以下4种: (1)restrict ...

  4. mysql外键策略

    1.外键 建表时添加外键:constraint 外键名 foreign key 从表字段 references 主表字段 级联操作 create table dage( create table xi ...

  5. mysql转换表的存储引擎方法

    如果转换表的存储引擎,将会丢失原存储引擎的所有特性. 例如:如果将innodb转换成myisam,再转回innodb,原innodb表的的外键将丢失. 假设默认存储引擎是MyISAM转为InnoDB ...

  6. MySQL 如何查看表的存储引擎

    MySQL 如何查看表的存储引擎   在MySQL中如何查看单个表的存储引擎? 如何查看整个数据库有那些表是某个特殊存储引擎,例如MyISAM存储引擎呢?下面简单的整理一下这方面的知识点. 如果要查看 ...

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

    MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定 ...

  8. SQL Server— 存在检测、建库、 建表、约束、外键、级联删除

    /******************************************************************************** *主题: SQL Server- 存 ...

  9. mysql 外键约束及表关联

    一.MYSQL中的约束 1.主键:primary key 唯一非空的特性并且可以优化查询速度 2.外键:foreign key 外键的作用保证2个或2个以上的数据表的数据一致性和完整性 3.唯一:un ...

随机推荐

  1. SpringBoot学习:在Interillj Idea上快速搭建SpringBoot项目

    一.创建SpringBoot项目 二.导入Jar包(pom.xml) <?xml version="1.0" encoding="UTF-8"?> ...

  2. Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库

    为什么要这样做? 默认情况下,Redis 服务会提供 16 个数据库,Laravel 使用数据库 0 (请见 Redis 文档)作为缓存和 Session 的存储. 在使用的过程中觉得这个默认的设置挺 ...

  3. hdu 1698 Just a Hook(线段树区间修改)

    传送门:Just a Hook Problem Description In the game of DotA, Pudge’s meat hook is actually the most horr ...

  4. CF 某套题 O :Grid (简单BFS)

    题意: 从左上角跳到右下角最少需要多少步,跳的规则为:可以向四个方向的任意一个方向跳当前格子中的步数,若跳不到右下角输出IMPOSSIBLE. 题解: BFS搜索,注意判断边界,标记. 代码: #in ...

  5. 转:VMware攻击界面分析

    转:https://comsecuris.com/blog/posts/vmware_vgpu_shader_vulnerabilities/ Wandering through the Shady ...

  6. AngularJS自定义指令及指令配置项

    两种写法 //第一种 angular.module('MyApp',[]) .directive('zl1',zl1) .controller('con1',['$scope',func1]); fu ...

  7. Sd - Java多线程

    1. Java中线程有哪些同步的方法? 在Java语言中,每个对象都有一个锁,一个线程可以通过关键字synchronized来申请获取某个对象的锁,关键字synchronized可以被用于方法(粗粒度 ...

  8. bzoj 2803 [Poi2012]Prefixuffix 兼字符串hash入门

    打cf的时候遇到的问题,clairs告诉我这是POI2012 的原题..原谅我菜没写过..于是拐过来写这道题并且学了下string hash.   字符串hash基于Rabin-Karp算法,并且对于 ...

  9. [xsy2123]毛毛虫

    题意:有一棵带点权的树,链修改是把$(x,y)$这条链和与其相邻的节点都加上一个数,查询是问$(x,y)$这条链和与其相邻的节点的权值和 学到了一个新姿势? 考虑树链剖分,在剖重链时每次给当前节点的儿 ...

  10. 【2-sat】Gym - 101201F - Illumination

    题意:平面上l盏灯,每盏灯可以照亮横向的2*r+1个格子或者纵向的2*r+1个格子,让你确定每盏灯的方向,使得每个格子只被同一行的不超过一盏灯照亮,并且只被同一列的不超过一盏灯照亮.输出是否有解. 显 ...