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 表名;
MySQL外键及级联删除 && 表的存储引擎与创建索引 && 删除数据库和表的更多相关文章
- MySQL外键设置 级联删除
. cascade方式在父表上update/delete记录时,同步update/delete掉子表的匹配记录 . set null方式在父表上update/delete记录时,将子表上匹配记录的列设 ...
- MySQL外键之级联
简介 MySQL外键起到约束作用,在数据库层面保证数据的完整性.例如使用外键的CASCADE类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这 ...
- MySQL外键约束_ON DELETE CASCADE/ON UPDATE CASCADE
MySQL通过外键约束实现数据库的参照完整性,外键约束条件可在创建外键时指定,table的存储引擎只能是InnoDB,因为只有这种存储模式才支持外键. 外键约束条件有以下4种: (1)restrict ...
- mysql外键策略
1.外键 建表时添加外键:constraint 外键名 foreign key 从表字段 references 主表字段 级联操作 create table dage( create table xi ...
- mysql转换表的存储引擎方法
如果转换表的存储引擎,将会丢失原存储引擎的所有特性. 例如:如果将innodb转换成myisam,再转回innodb,原innodb表的的外键将丢失. 假设默认存储引擎是MyISAM转为InnoDB ...
- MySQL 如何查看表的存储引擎
MySQL 如何查看表的存储引擎 在MySQL中如何查看单个表的存储引擎? 如何查看整个数据库有那些表是某个特殊存储引擎,例如MyISAM存储引擎呢?下面简单的整理一下这方面的知识点. 如果要查看 ...
- [原创]MYSQL中利用外键实现级联删除和更新
MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定 ...
- SQL Server— 存在检测、建库、 建表、约束、外键、级联删除
/******************************************************************************** *主题: SQL Server- 存 ...
- mysql 外键约束及表关联
一.MYSQL中的约束 1.主键:primary key 唯一非空的特性并且可以优化查询速度 2.外键:foreign key 外键的作用保证2个或2个以上的数据表的数据一致性和完整性 3.唯一:un ...
随机推荐
- php打开错误日志
ini_set("display_errors", "On"); error_reporting(E_ALL | E_STRICT);
- JDK Windows安装
进入至JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 点击下载后,会进入下载列表 点击下载后,就等 ...
- hdu 1698 Just a Hook(线段树区间修改)
传送门:Just a Hook Problem Description In the game of DotA, Pudge’s meat hook is actually the most horr ...
- AttributeError: 'ForeignKey' object has no attribute 're' 解决办法
使用 field_object.rel.model.objects.filter(**db_condition) 报错 forekey中存在rel,为什么不能调用? 通过以下语句观察 print(fi ...
- CentOS7系统防火墙开关、状态与自启
首先需要说明的是CentOS7使用的是firewalld.service,而不是iptables.service [xf@xuexi ~]$ systemctl status firewalld.se ...
- 【JavaScript】JS将Java的Timestamp转为Date类型
遇到一个小需求,由于要填充日期插件里的数据,前台要把java后台传来的Date类型的数据转成YYYY-MM-DD格式的时间数据.通过json传输,Java的Date类型的数据自动转成了时间戳,例如 “ ...
- Beaglebone Black教程Beaglebone Black的引脚分配
Beaglebone Black教程Beaglebone Black的引脚分配 Beaglebone Black的引脚分配 绝大多数的微型开发平台都提供了一些称为GPIO的输入输出端口.这些端口可以让 ...
- 【状压dp】Travelling
[hdu3001]Travelling Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- mysql select 1
看数据库连接池源码,发现连接池的参数validationQuery(SQL查询,用来验证从连接池取出的连接)设置的值为"SELECT 1",之前很少用这种写法,于是 google一 ...
- realloc 用法
#include <stdio.h> #include <stdlib.h> #include <string> int main() { char * p_cha ...