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

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. 支付宝app支付服务器签名代码(C#)

    1,引入支付宝的sdk(AopSdk) 支付宝接口文档网站可下载,注意下载C#版本: 2,代码写的比较简单 public static string RSASign(string OrderNo,de ...

  2. wifi驱动总结(2)

    1.dhd_module_init(驱动模块初始化函数) → dhd_wifi_platform_register_drv(查找设备,注册驱动) → 1) wifi_ctrlfunc_register ...

  3. vmvare虚拟机经验

    关于网络连接:如果宿主机网络类型:如果是无线网络网络适配器选择桥接模式:如果是物理网线选择NAT模式: 关于刚装完系统apt-get update出现could not lock /var/lib/l ...

  4. (入门篇 NettyNIO开发指南)第三章-Netty入门应用

    作为Netty的第一个应用程序,我们依然以第2章的时间服务器为例进行开发,通过Netty版本的时间服务报的开发,让初学者尽快学到如何搭建Netty开发环境和!运行Netty应用程序. 如果你已经熟悉N ...

  5. 移动端页面 iPhone + Safari 页面调试 之 正确查看网络请求的姿势

    如题 本文主要将 Safari + iPhone 前端开发调试  之 正确查看网络请求的 姿势 惯例 说下问题场景: 早知道safari(Mac) + iPhone 调试的方便 能解决很多日常调试问题 ...

  6. CefSharp使用入门

    首先这是很重要的,环境搭建: 我用的是VS2017 步骤            方法 1.            打开VS的安装管理器 2.             进入修改界面,使用C++的桌面开发 ...

  7. 实现分布式队列ZooKeeper的实现

    一.背景 有一些时候,多个团队需要共同完成一个任务,比如,A团队将Hadoop集群计算的结果交给B团队继续计算,B完成了自己任务再交给C团队继续做.这就有点像业务系统的工作流一样,一环一环地传下去,直 ...

  8. 在node.js中如何屏蔽掉favicon.ico的请求

    今天准备用node做个api出来,还没入门,遇到一个小问题,特在此记录一下! 在做路由模块的时候,发现控制台每次都会多输出一条favicon.ico的请求,对于这种又占资源,看着又碍眼的玩意,强迫症完 ...

  9. FreeMarker标签

    目前最流行的两种模板技术恐怕要算freemarker和velocity了,webwork2.2对两者都有不错的支持,也就是说在webwork2中你可以随意选择使用freemarker或velocity ...

  10. VR全景:实体店与互联网的完美结合

    VR元年已过,VR项目.VR创业潮转为理性,VR行业分为两个方向:硬件和内容.硬件又分为VR头显和辅助设备,内容又分为VR全景和VR虚拟内容,如游戏.娱乐.根据行业划分为VR+购物,VR+教育,VR+ ...