多表关系

一对一关系

一对多或多对一关系

多对多关系

MySQL引擎

所谓的MySQL引擎就是数据的存储方式,常用的数据库引擎有以下几种:

Myisam与InnoDB引擎之间的区别(面试)

 ①批量插入与查询速度
Myisam引擎相对于InnoDB引擎,在插入与查询时,速度要略快一些。 ②两者的存储方式不同
myisam:在数据表生成时会自动生成3个文件
*.frm :结构文件
*.MYD :数据文件
*.MYI :索引文件
innodb :在数据表生成时其结构如下:
innodb在生成时,只会升恒一个*.frm的结构文件,问题:数据保存在哪里呢?
答案:mysql->data->ibdata1文件 ③两者支持的功能也是不同的
myisam不支持事务处理,而innodb支持事务处理,最新说明:据说mysql5.6以后版本也开始支持事务处理。
myisam支持全文索引,但是innodb在mysql5.5以后才开始支持。
myisam支持表锁,而innodb支持行锁。
myisam不支持外键,而innodb支持外键。

外键

外键必须要满足这样的两个前提:①必须是两个表之间的关联字段②这个字段在从表中充当从键(非主键)。

基本语法:

 第一种:
create table数据表名称(
id int not null auto_increment,
title varchar(40) not null,
category_id int,
primary key(id),
foreign key(category_id) references 主表(主键) on delete cascade(关联删除)|set nullon update cascade(关联更新)|set null
)engine=innodb default charset=utf8; 第二种:
alter table 数据表名称 add constraint 外键名 foreign key(外键字段) references 主表(字段) on delete cascade(关联删除)|set null on update cascade(关联更新)|set null;

特别说明:外键操作时,关联操作一共有4种情况

  ①cascade,级联操作。主表数据被更新(主键值更新),从表也被更新(外键值更新)。主表记录被删除,从表相关记录也被删除。

  ②set null,设置为null。主表数据被更新(主键值更新),从表的外键被设置为null。主表记录被删除,从表相关记录外键被设置成null。

    但注意,要求该外键列,没有not null属性约束。

  ③restrict,拒绝父表删除和更新,默认情况

  ④no action,与③效果相同

关联删除

查询外键

删除外键

添加关联删除

关联置空

三范式

第一范式

 1NF,是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,
即实体中的某个属性不能有多个值或者不能有重复的属性。
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。 第一范式:就是数据表中的每一列要满足原子性,不能再划分。

第二范式

 2NF,在满足1NF的基础上,要求表中的每条记录必须被唯一的区分。
同时要求,实体属性应该完全依赖于主关键字。而不能是对主关键字形成部分函数依赖。
因此常用的做法,是为每一条记录一个字段用于表示其主键,就是单关键字主键。这样就没有组合主键,也就没有部分依赖了。

第三范式

 3NF,满足第二范式的基础上,要求不能出现传递依赖,也就是不能出现属性依赖于非主属性的。
①讲师信息依赖讲师主键id
②教室信息依赖班级主键id
③代课信息依赖上课主键id
正常情况下,一张表只能有一种关联关系,直接关联。如果出现传递依赖(A依赖B,B依赖C),则代表你设计的数据表不满足第三范式。

MySQL开发——【多表关系、引擎、外键、三范式】的更多相关文章

  1. mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)

    字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...

  2. MySQL入门(alter语法 与 外键)

    MySQL入门(三) 字段的修改.添加.与删除 修改表字段使用alter table语句,谨记! create table tf1( id int primary key auto_increment ...

  3. Python3-sqlalchemy-orm 联表查询-无外键关系

    #-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...

  4. 获取完全一样的数据库,包括表与表之间的外键关系,check,default表结构脚本

    今天公司给了一个任务,某一个项目由于数据过大,造成Sql Server 2012 的运行占用很大内存,于是要把之前的不常用的数据分开.要求写个脚本,要求: 1.能获取原来数据库中的表结构,主键一致.表 ...

  5. SQL SERVER中获取表间主外键关系

    sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OB ...

  6. Entity Framework - 理清关系 - 基于外键关联的单向一对一关系

      注:本文针对的是 Entity Framework Code First 场景. 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对 ...

  7. mysql数据库之表关系

    外键 前戏之一对多关系 # 定义一张部门员工表id name gender dep_name dep_desc1 jason male 教学部 教书育人2 egon male 外交部 漂泊游荡3 ta ...

  8. 在PowerDesigner中设计物理模型1——表和主外键

    原文:在PowerDesigner中设计物理模型1--表和主外键 在PD中建立物理模型由以下几种办法: 直接新建物理模型. 设计好概念模型,然后由概念模型生成物理模型. 设计好逻辑模型,然后由逻辑模型 ...

  9. MySQL修改数据表存储引擎的3种方法介绍

    这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改.导出导入.创建插入3种方法, 可以参考下   MySQL作为最常用的数据库,经常遇到各种各样的问题.今天要说的就是表存储引 ...

  10. 在PowerDesigner中设计物理模型1——表和主外键(转)

    出处:http://www.cnblogs.com/studyzy/archive/2009/12/15/1624899.html 在PD中建立物理模型由以下几种办法: 直接新建物理模型. 设计好概念 ...

随机推荐

  1. CMake for MFC example

    cmake_minimum_required(VERSION 2.8) add_definitions(-D_AFXDLL) set(CMAKE_MFC_FLAG 2) set(SRCS MFCApp ...

  2. 3.1 MathType上标位置调整的两种方法

    具体操作步骤如下: 1.打开MathType窗口后在工作区域中编辑好公式. 2.调整上标位置有两种方法: (1)选中要调整的上标,按下“Ctrl+↑,Ctrl+↓,Ctrl+←,Ctrl+→”进行调整 ...

  3. Elasticsearch -- Head插件安装

    安装Head插件 由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包. <1>安装Node.js 下载解压 wget https://node ...

  4. [转]C#程序性能优化

    C#程序性能优化 1.显式注册的EvenHandler要显式注销以避免内存泄漏 将一个成员方法注册到某个对象的事件会造成后者持有前者的引用.在事件注销之前,前者不会被垃圾回收.   private v ...

  5. PTA上Java问题自查与提问方法

    自查 首先请一定先看这篇文章<PTA中提交Java程序的一些套路>.该文囊括了PTA中提交Java程序的几乎所有常见问题,请仔细阅读可以少踩很多坑 题目测试方法:复制样例输入,然后打开一个 ...

  6. Linux文件误删之后恢复方法

    前言 今天不小心把一个文件给误删了,因为不想花半天时间重新写,就查找了一下Linux下恢复文件的方法. 因为是刚删不久,文件实际的数据应该还在 首先查看系统分区 Linux:~# df Filesys ...

  7. 【rabbitmq】Centos7 下安装rabbitmq

    rabbitmq安装 rabbitmq的安装依赖erlang,首先应该先安装erlang,然后安装rabbitmq: Step1:安装erlang erlang-rpm安装教程 选择在Centos7 ...

  8. FileProvider相关 Failed to find configured root that contains

    问题: 使用FileProvider构造SD卡中文件uri时异常 java.lang.IllegalArgumentException: Failed to find configured root ...

  9. select函数总结

    阻塞方式block,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回.使用Select就可以完成非阻塞non-block,就是进程或线程执 ...

  10. VLAN中继协议

    VTP(VLAN Trunking Protocol):是VLAN中继协议,也被称为虚拟局域网干道协议.作用是十几台交换机在企业网中,配置VLAN工作量大,使用VTP协议,把一台交换机配置成VTP S ...