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

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创建表时添加范式_MySql三大范式与数据库设计和表创建常用语句相关推荐

  1. mysql查询动态表名的数据类型_Mysql中查询某个数据库中所有表的字段信息

    前言 有时候,需要在数据库中查询一些字段的具体信息,而这些字段又存在于不同的表中,那么我们如何来查询呢? 在每一个数据库链接的information_schema数据库中,存在这样一张表--COLUM ...

  2. mysql 创建表时提示错误代码_MySQL创建表时遇到的错误

    学习MySQL第一个程序就遇到了bug .创建表时需注意的事项加以总结: 1.先创建数据库: create database 数据库名:然后连接要用的数据库 use 数据库名:下面就可以执行建表语句 ...

  3. 使用MySQL数据库创建表时添加外键约束

    /题目:创建表Book表,字段如下: bid整型,要求主键 bname学符型,要求设置唯一键,并非空 price浮点型,要求有默认值10 btypeId 类型编号,要求引用bookType表的id字段 ...

  4. mysql 表中添加数据类型_MySQL数据表添加字段(三种方式)

    MySQL 数据表是由行和列构成的,通常把表的"列"称为字段(Field),把表的"行"称为记录(Record).随着业务的变化,可能需要在已有的表中添加新的字 ...

  5. 禁止windows系统创建快捷方式时添加文字“- 快捷方式”

    转载自如何禁止windows系统创建快捷方式时添加文字"- 快捷方式",仅作学习交流使用 如何禁止windows系统创建快捷方式时添加文字"- 快捷方式" 20 ...

  6. mysql schema 保存数据_在MySQL中,所有触发器的定义都保存在information_schema数据库下的()表中。_学小易找答案...

    [单选题]如何将英制 的零件转为公制的零件 ( ). [判断题]连续选择边线创建倒角时,不能单独修改某一边线的倒角大小 [判断题]创建筋特征时截面必须是闭和的 [填空题]Hibernate 的会话接口 ...

  7. 数据库设计模板 + Excel创建sql语句(VBA)

    数据库设计模板 + Excel创建sql语句-VBA 1. 表格设计 2. 效果展示 3. VB代码 4. Excel测试文件下载 1. 表格设计 直接看图,3个页签 <建表语句>页签,把 ...

  8. mysql创建表时添加范式,MySql三大范式与数据库设计和表创建常用语句

    [导读]第一范式1NF First Normal Fromate:数据表中的每一列字段,必须是不可拆分的最小单元.也就是确保每一列的原子性. [数据库设计的三大范式] 1.第一范式(1NF First ...

  9. mysql创建表时默认默认_mysql创建数据表时指定默认值教程

    指定默认值 如果在插入行时没有给出值,MySQL允许指定此时使用的默认值.默认值用 CREATE TABLE 语句的列定义中的 DEFAULT 关键字指定. 请看下面的例子: 输入:create ta ...

最新文章

  1. 论论资排辈和有能者居之
  2. 项目日报模板_第一届全国技能大赛现场直击:混凝土建筑项目全场最“高”
  3. 2014电池测试软件,【技术】关于锂电池GB31241-2014洗涤测试要求
  4. 使用localhost访问远程tensorboard
  5. ExtJS2.0开发与实践笔记[4]——Ext中的动画处理
  6. MySQL Replicaction Error 一例
  7. GULP 案例 1 代码解释:声子色散曲线和态密度的计算
  8. SpringBoot-DDD领域驱动设计的概念
  9. 视频 码率控制类型和内涵
  10. Arcgis实例操作9--空间分布趋势图、分割多部分要素、导出矢量数据的文本文件
  11. java 线程的插队运行_java笔记–线程的插队行为
  12. mysql reads sql data_在其声明中使用DETERMINISTIC,NO SQL或READS SQL DATA并启用二进制日志记录...
  13. Android中MVC,MVP和MVVM的区别
  14. python from win32com import client 出现弹框 隐藏模块中出现编译错误
  15. ISO3834国际焊接认证简介
  16. 2015美国计算机研究生就业,2015年美国计算机专业研究生排名
  17. 【MATLAB教程案例26】图像特征点提取算法matlab仿真与分析——sift,surf,kaze,corner,BRISK等
  18. PyCharm配置解释器
  19. 利用LSTM进行空气指数预测
  20. Java--进制转换(一)

热门文章

  1. python中布尔类型是特殊的_Python中的特殊方法以及应用详解
  2. datax 持续数据同步_采用DataX实现多表增量数据同步
  3. python关于路径需使用的方法笔记
  4. android message 代码,Android Handler移除Message详解及实例代码
  5. alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)
  6. android官方架构组件,Android 架构组件官方文档01——LifeCycle
  7. php redis并发读写,PHP使用Redis实现防止大并发下二次写入的方法
  8. mac json格式化工具_简洁好用的工具都是相似的
  9. SFP光模块基本概念及使用注意事项详解
  10. rs-485光端机的使用你真的清楚吗?