【数据库设计的三大范式】

1.第一范式(1NF First Normal Fromate):数据表中的每一列(字段),必须是不可拆分的最小单元。也就是确保每一列的原子性。
例如: userInfo: '山东省烟台市 13181621008'
=> userAds:'山东省烟台市'
tel:'13181621008'

2.第二范式(2NF):满足1NF后,要求:表中所有的列,都必须功能依赖于主键,而不能有任何一列与主键没有关系。(一张表值描述一件事情)

3.第三范式(3NF):满足2NF后,要求:表中的每一列都要与主键直接相关,而不是间接相关。(表中的每一列,只能依赖于主键)

例如:订单表中,需要有客户相关信息,在分离出客户表之后。订单表中,只需要有一个用户ID
即可。而不能有其他的客户信息。因为,其他的用户信息是直接关联于用户ID。而不是关联于订单ID。

【第二范式与第三范式的本质区别】
在于有没有分出两张表,第二范式是说一张表中包含了多种不同实体的属性,那么必须要分成多张表。第三范式要求,已经分好了多张表的话,那么,一张表中只能有另一张表中的ID(主键),而不能有其他的信息(其他的信息,一律使用主键在另一种查询)。

*/

USE mydb;

-- 创建表:
定义列:列名 数据类型 列定义关键字
常用的列定义关键字:
UNSIGNED:设置列为无符号列。只能设置类型为数字类型的列
AUTO_INCREMENT :设置自动增长列。 自动增长列必须是主键。

【主键】
1.主键的注意事项? ① 主键默认非空! ② 只有主键才能设置自动增长(主键不一定自动增长,自动增长必须是主键)
2.设置主键的方式? ① 在列定义时设置:id INT PRIMARY KEY
② 在列定义完成后设置: PRIMARY KEY(id)
UNIQUE:设置唯一性约束。该字段不能出现重复值。
NOT NULL:设置非空约束。该字段不能为空。
DEFAULT:设置默认值约束。hight DOUBLE(3,2) DEFAULT(1.2) height如果不输入默认1.2
FOREIGN KEY:设置外键约束。
【外键】
1、设置外键有哪些注意事项?
1、设置外键有哪些注意事项?
只有innoDB的数据库引擎支持外键。
修改my.ini文件设置default-storage-engine=INNODB
②外键与参照列的数据类型必须相同
③设置外键的字段必须要有索引。如果没有索引,设置外键时会自动生成一个索引

[数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同]

2、设置外键的语法?
[CONSTRAINT 外键名] FOREIGN KEY(外键字段)REFERENCES 参照表(参照字段)
[ON DELETE SET NULL ON UPDATE CASCADE] -- 设置参照完整性

3、外键约束的参照操作。
参照操作:当对参照表的参照字段进行删除或更新时,外键表中的外键如何应对。
参照操作可选值:DESTRTCT 拒绝参照表删除或更新参照字段
NO ACTION 与 RESTRICT相同,但这个指令只在MySQL生效
CASCADE 删除或更新参照表的参照字段时,外键表的记录同步删除更新
SET NULL 删除或更新参照表的参照字段时,外键表的外键设为NULL
*/

CREATE TABLE IF NOT EXISTS tb1(
-- IF NOT EXISTS 可以省略,省略后面重复创建报错。如果不省略,则创建时表是否已存在,如果表存在则不再执行创建
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255), -- name 是系统关键字,所以使用反引号``包裹
age SMALLINT UNIQUE,
hight DOUBLE(3,2) DEFAULT(1.2)
-- PRIMARY KEY(id) ); DROP TABLE IF EXISTS CLASSES;
CREATE TABLE IF NOT EXISTS CLASSES(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
CLASSNAME VARCHAR(255) NOT NULL
); DROP TABLE IF EXISTS `USER`;
CREATE TABLE IF NOT EXISTS `USER`(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
CLSID INT UNSIGNED NOT NULL,
`NAME` VARCHAR(255) NOT NULL,
CONSTRAINT user_fk_classes FOREIGN KEY (clsid) REFERENCES classes(id) ); SHOW COLUMNS FROM CLASSES;
SHOW TABLES;

-- 显示表结构

SHOW COLUMNS FROM tb1;

-- 显示表的建表语句

SHOW CREATE TABLES TB1;

-- 删除表

DROP TABLE IF EXISTS tb1;

-- 修改表名 ALTER TABLE 旧表名 RENAME [TO] 新表名;

ALTER TABLE TB1 RENAME TB2;

-- 同时修改多表名 RENAME TABLE TB3 TO TB1[,`USER` TO USER1 ……];

RENAME TABLE TB3 TO TB1,`USER` TO USER1;

-- 修改字段 列
-- ALTER TABLE 表名 CHANGE 旧列名 新列名 列定义 [FIRST | AFTER 某一列]
-- FIRST 将这个字段调整为表格第一列 AFTER 某一列:将这个字段放到某一列后面

ALTER TABLE TB1 CHANGE `NAME` `USERNAME` VARCHAR(200) NOT NULL AFTER AGE;

-- MODIFY 只修改定义,不能改名

ALTER TABLE TB1 MODIFY `USERNAME` VARCHAR(200) NOT NULL AFTER AGE;

-- 删除表中某一列

ALTER TABLE TB1 DROP HEIGHT;

-- 新增一列 必须部分:ALTER TABLE tb1 ADD HEIGHT DOUBLE(8,2)

ALTER TABLE tb1 ADD HEIGHT DOUBLE(8,2) DEFAULT 1.2 AFTER AGE;

-- 新增多列 不能调整列的位置,只能插在最后。

ALTER TABLE TB1 ADD(
WEIGHT DOUBLE(3,2) UNSIGNED,
school VARCHAR(255)
)

-- 增加主键约束

ALTER TABLE tb1 ADD PRIMARY KEY(id);

-- 删除主键约束

ALTER TABLE tb1 DROP PRIMARY KEY;

-- 新增唯一性约束

ALTER TABLE TB1 ADD UNIQUE KEY (USERNAME);

-- 删除唯一性约束:由于创建唯一性约束会默认创建索引,所以删除时,需删除索引

ALTER TABLE TB1 DROP INDEX USERNAME;

-- 设置默认值约束

ALTER TABLE TB1 ALTER AGE SET DEFAULT 20;

-- 删除默认值约束

ALTER TABLE TB1 ALTER AGE DROP DEFAULT;

-- 设置外键约束 必选部分:ALTER TABLE tb1 ADD FOREIGN KEY (CLSID) REFERENCES CLASSES(ID)

ALTER TABLE tb1 ADD FOREIGN KEY (CLSID) REFERENCES CLASSES(ID) ON DELETE SET NULL ON UPDATE CASCADE;

-- 删除外键约束。由于创建外键时会默认

ALTER TABLE tb1 DROP FOREIGN KEY TB1_FK_CLASSES;

SHOW COLUMNS FROM TB1;

SHOW TABLES;

MySql三大范式与数据库设计和表创建常用语句的更多相关文章

  1. mysql学习5:数据库设计

    mysql学习5:数据库设计 本文转载:https://blog.51cto.com/9291927/2087925:原创为天山老妖S 一.数据库设计简介 按照规范设计,将数据库的设计过程分为六个阶段 ...

  2. mysql查看当前所有数据库中的表大小和元信息information_schema

    查看所有mysql数据库表和索引大小 mysql查看当前所有的数据库和索引大小 ,),' mb') as data_size, concat(,),'mb') as index_size from i ...

  3. C#:CodeSmith根据数据库中的表创建C#数据模型Model + 因为没有钱买正版,所以附加自己写的小代码

    对于C#面向对象的思想,我们习惯于将数据库中的表创建对应的数据模型: 但假如数据表很多时,我们手动增加模型类会显得很浪费时间: 这个时候有些人会用微软提供的EntityFrameWork,这个框架很强 ...

  4. MySQL数据库的设计和表创建

    首先,我们使用Navicat Premium编辑器创建一个用户,同时设置用户权限,MySQL默认有一个root用户,拥有最高权限 下面,我们先创建一个用户: ①CREATE USER  'aaa'@' ...

  5. JavaSE基础篇—MySQL三大范式—数据库设计规范

    1.概   念     范式是一种符合设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式.各个范式是以此嵌套包含的,范式越高,设计等级越高,在现实设计中也越难实现,一般数据库只要打 ...

  6. MySQL学习-数据库设计以及sql的进阶语句

    1.数据库设计 关系型数据库建议在E-R模型的基础上,我们需要根据产品经理的设计策划,抽取出来模型与关系,制定出表结构,这是项目开始的第一步 在开发中有很多设计数据库的软件,常用的如power des ...

  7. MySQL 08章_数据库设计

    一. 关系模型与对象模型之间的对应关系 序号 关系模型:数据库 对象模型:java程序 1 数据表table 实体entity:特殊的java类 2 字段field 属性attribute/字段fie ...

  8. Mysql系列四:数据库分库分表基础理论

    一.数据处理分类 1. 海量数据处理,按照使用场景主要分为两种类型: 联机事务处理(OLTP) 面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果. ...

  9. MYSQL三大范式

    第一范式:确保每列的原子性. 第一范式是最基本的范式. 数据库表中的字段都是单一属性的,不可再分. 只要是关系数据库都满足第一范式 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子 ...

随机推荐

  1. 解决ajax跨域的方法原理详解之Cors方法

    1.神马是跨域(Cross Domain)   对于端口和协议的不同,只能通过后台来解决.   一句话:同一个ip.同一个网络协议.同一个端口,三者都满足就是同一个域,否则就是 跨域问题了.而为什么开 ...

  2. hdu4614 Vases and Flowers 线段树+二分

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4614 题意: 给你N个花瓶,编号是0  到 N - 1 ,初始状态花瓶是空的,每个花瓶最多插一朵花. ...

  3. [笔记]scanf的使用(主要是针对char)

    学的是C++,用cin cout也用的很顺溜,写自己的类时重载"<<"与">>"运算符也很爽,但是发现在刷算法竞赛题时,cin cout ...

  4. javascript设计模式详解之策略模式

    接上篇命令模式来继续看下js设计模式中另一种常用的模式,策略模式.策略模式也是js开发中常用的一种实例,不要被这么略显深邃的名字给迷惑了.接下来我们慢慢看一下. 一.基本概念与使用场景: 基本概念:定 ...

  5. 全景智慧城市——NOW!!!VRSHOPPING颠覆你的购物认知!

    互联网+时代,人们对现有的网络资源已经不再感冒,一般的图片.文字信息已经无法满足人们对互联网的需求,虚拟现实.身临其境的体验是不可小觑的发展趋势,尤其是VR逛街.购物,更会深入人心,再次改变人们的生活 ...

  6. Java线程安全性中的对象发布和逸出

    发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系. 什么是发布?简单来说就是提供一个对象的引用给作用域之外 ...

  7. 【JAVAWEB学习笔记】07_BootStrap、Viewport介绍

    今天主要学习了BootStrap,viewport的介绍和最后对网站进行了重构 今天晨读单词: Compatible:兼容性 viewport:视口 device:设备 initial:初始化(缩写i ...

  8. Windows下快速安装Xgboost(无需Git或者VS)

    xgboost的全称是eXtreme Gradient Boosting,现在已经风靡Kaggle.天池.DataCastle.Kesci等国内外数据竞赛平台,是比赛夺冠的必备大杀器!如果把数据竞赛比 ...

  9. 【AngularJS中的自定义服务service VS factory VS provider】---它们的区别,你知道么?

    在介绍AngularJS自定义服务之前,我们先来了解一下AngularJS~ 学过HTML的人都知道,HTML是一门很好的伪静态文本展示设计的声明式语言,但是,要构建WEB应用的话它就显得乏力了. 而 ...

  10. ActionBar 通用方法

    自定义actionBar布局:标题居中,左边有返回按键 <?xml version="1.0" encoding="utf-8"?> <Rel ...