一、SQL语句的分类

DML(Data Manipulation Langauge,数据操纵/管理语言) (insert,delete,update,select)

DDL(Data Definition Language,数据定义语言) (create,drop,alter)

DCL(Data Control Language,数据控制语言) grant(授权),revoke(撤销权限)

TCL(Transaction Control Language,事务控制语言) commit(提交事务),rollback(回滚事务)

二、数据库的基本操作

2.1、show命令了解数据库

1) show databases [like “%te%”];

查看当前连接的MySQL服务器上的所有数据库名

注意:MySQL在创建一个数据库时,就会在MySQL的安装目录下的data目录中生成和该数据库同名的目录。

2)show tables [from db_name][like “%b%”];

查看当前所操作的数据库中的所有表的名字

3)show columns from tbl_name;

查看某个表中的所有字段/列名

注意:这个作用等同于desc

4)show index from tbl_name;

查看某一张表中的所有索引

5)show status;

查看MySQL服务器的状态信息

6)show variables;

查看MySQL系统变量的值,使用mysqladmin varables命令得到这个信息。

6.1)一个是全局变量:show global variables;

6.2)当前连接MySQL的Session的变量:show session variables;

6.3)查看MySQL服务器的编码方式

7)show processlist

显示哪个线程正在运行,使用mysqladmin processlist命令得到这个消息。如果你有

process权限,你可以看到所有的线程。否则,你仅能看到你自己的线程。

8)show table status from db_name;

查看某个数据库中的表的详细信息

9)show grants for user;

查看MySQL服务器某个用户的权限信息,显示的是给该用户进行授权的SQL语句。

10)show engines;

查看MySQL数据库所支持的以及默认的数据库引擎

2.2、其他的命令了解MySQL

1)desc

desc tbl_name;

查看表结构

2)use

use 数据库名;

设置当前需要操作的数据库

2.3、MySQL引擎

在MySQL5.5版本以前MySQL默认的使用MyISAM作为默认的引擎,之后使用额是InnoDB作为默认的引擎。

三、SQL的三大范式

3.1、第一范式(1NF)

强调的是列的原子性,即列不能够再分成其他几列。

数据库表中的任何字段都是单一属性的,不可再分。(所有的值尽可能的是最小的不可分割的)

考虑这样一个表:【联系人】(姓名,性别,电话)

如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。

create table aa(id int,NameAge varchar(100))

insert aa values(1,''无限-女 '')

没有达到第一范式

create table aa(idint,name varcahr(10),age char(2))

insert aa values(1,''无限'',''女 '')

达到第一范式

实例

3.2、第二范式(2NF)

首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

数据库表中的非关键字段对任一候选关键字段都不存在部分函数依赖 (除了主键列之外的其他所有的列的值尽可能的依赖于主)

考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。

因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。

显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。

可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。

create table sci(

snoint(32),cno int(32),grade int(32),credit int(32),

primary key sno,cno

)

课程(cno)1---1学分(credit)

学生(sno)n---n课程(cno)

学生+课程--->分数(grade)

sci

sno cno grade credit1 1 60 80

2 1 90 80

3 1 70 80. . . .

. . . .

. . . .

如此以来,学分被大量重复存储,数据冗余

如要某课程学分,则要大量重复操作

如要加新课程,由于sno和cno共同做为主键,则在加入新课程时,必须有人选该课

如某学生某课程结业,则该学生其它课程信息也同时被删除了

总之

这种设计不太好吧,非关键字属性credit仅函数依赖于cno,也就是credit部分依赖组合关键字(sno,cno)而不是完全依赖

解决

分成两个关系模式 sc1(sno,cno,grade),c2(cno,credit)。新关系包括两个关系模式,它们之间通过sc1中的外关键字cno相联系,需要时再进行自然联接,恢复了原来的关系3.3、第三范式(3NF)

关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖

确保每列和主键直接相关,而不是简接相关。

例----S1(SNO,SNAME,DNO, DNAME, LOCATION)

学号 姓名 所在系 系名称 系地址

关键字SNO决定各个属性。由于是单个关键字,没有部分依赖的问题,肯定是2NF。但这关系肯定有大量的冗余,有关学生所在的几个属性DNO,DNAME,LOCATION将重复存储,插入,删除和修改时也将产生类似以上例的情况。

原因:关系中存在传递依赖造成的。即SNO1->1 DNO。 而DNO 1->n SNO却不存在, 而DNO -> LOCATION存在, 因此关键辽 SNO 对 LOCATION 函数决定是通过传递依赖 SNO ->LOCATION 实现的。也就是说,SNO不直接决定非主属性LOCATION。

解决目地:每个关系模式中不能留有传递依赖。

解决方法:分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)

注意:关系S中不能没有外关键字DNO。否则两个关系之间失去联系

实例2

3.3、第三范式(3NF)

首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖

确保每列和主键直接相关,而不是简接相关。

考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。

其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。

不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。

通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。

例----S1(SNO,SNAME,DNO, DNAME, LOCATION)

学号 姓名 所在系 系名称 系地址

关键字SNO决定各个属性。由于是单个关键字,没有部分依赖的问题,肯定是2NF。但这关系肯定有大量的冗余,有关学生所在的几个属性DNO,DNAME,LOCATION将重复存储,插入,删除和修改时也将产生类似以上例的情况。

原因:关系中存在传递依赖造成的。即SNO1->1 DNO。 而DNO 1->n SNO却不存在, 而DNO -> LOCATION存在, 因此关键辽 SNO 对 LOCATION 函数决定是通过传递依赖 SNO ->LOCATION 实现的。也就是说,SNO不直接决定非主属性LOCATION。

解决目地:每个关系模式中不能留有传递依赖。

解决方法:分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)

注意:关系S中不能没有外关键字DNO。否则两个关系之间失去联系

实例3

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

mysql候选关键字_MySQL(三)之SQL语句分类、基本操作、三大范式相关推荐

  1. mysql候选关键字_MySQL——(SQL语句)

    关系型数据库设计范式: 第一范式:当关系模式R的每个关系属性都是不可分的数据项,那么就成R是第一范式的模式(1NF) 简单说法:字段是原子性的 第二范式:党关系模式R是2NF,且关系模式R(U,F)中 ...

  2. MySQL基础学习(三)————SQL语句的常用操作

    文章目录 1.库 1.1库的创建 1.2 库的删除 1.3 库的修改 1.4 库的查找 2.表 2.1 表的创建 2.2 表的删除 2.3 表的修改 2.4 表的查找 3.数据或者记录 3.1 数据的 ...

  3. mysql 输出名称_MySQL常用的SQL语句//输出所有信息showfullfieldsfrom'表名称';//改表

    MySQL常用的SQL语句 //输出所有信息 show full fields from '表名称'; //改表名 ALTER  TABLE table_name RENAME TO new_tabl ...

  4. mysql商品查询_MYSQL——怎么一个sql语句查询出用户和用户商品的列表啊

    我现在都是先写一个sql查出所有用户数组,然后foreach循环这个数组拿id查他的所有商品数据,有没好点儿的方法 商品的基本数据是可以缓存的 尤其是大访问量很明显数据库走的越少越好 但是用户买了什么 ...

  5. Mysql入门学习第二章(学习sql语句)

    SQL学习(重要) SQL SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.(用人话说就是通过程序能看懂的方式告诉mysql程序怎么做) ...

  6. 解析MySQL基础架构及一条SQL语句的执行流程和流转

    前言 本篇文章分析SQL语句在MySQL中的执行流程,包括SQL的查询在MySQL内部会怎么流转,SQL语句的更新是怎么完成的.在分析之前我们一起看看MySQL的基础架构,知道了 MySQL由那些组件 ...

  7. MySQL查询本年的数据的sql语句

    MySQL查询本年的数据的sql语句: SELECT * FROM 表名 WHERE YEAR(时间字段)=YEAR(NOW());

  8. Oracle 实验三: SQL语句基础(复习)

    实验三: SQL语句基础(复习) 一.实验目的 1.oracle中常用数据字典的使用. 2.复习并掌握表管理(创建.修改.创建约束.删除等)操作 二.实验内容 1.利用数据字典完成以下操作,对运行过程 ...

  9. Mysql中文乱码以及导出为sql语句和Excel问题解决

    Mysql中文乱码以及导出为sql语句和Excel问题解决 参考文章: (1)Mysql中文乱码以及导出为sql语句和Excel问题解决 (2)https://www.cnblogs.com/zhao ...

最新文章

  1. DOS 如何取当前时间做为文件名?
  2. Linux 下使用命令行查看 內核版本 | 系統版本 | cpu 位數 | 內存使用
  3. 关于图片按比例自适应缩放
  4. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第1章-绪论
  5. CListCtrl的使用完全指南
  6. python 归并排序,合并有序数组,逆序对个数
  7. FTServer 0.9 发布,全文搜索服务器
  8. 记录一下目前thinksoar portal的进度和计划!
  9. 深度学习DeBug小笔记(一)——visdom服务启动时提示Downloading scripts, this may take a little while解决办法
  10. 如何在ImageRanger中设置人脸识别来整理照片分类
  11. 风控建模基础笔记(一)
  12. SPSS Modeler 数据整理之变量设定 (指南 第三章)
  13. opencv获取不规则图像
  14. abc能否构成三角形c语言,编写程序输入三角形三边a.b.c 判断abc能否构成三角形...
  15. 【LC中等】1321. 餐馆营业额变化增长
  16. STM32F10×××系列的PC13、PC14、PC15引脚用作普通IO口配置方法
  17. GitHub的Linux配置与常用操作
  18. ffmpeg命令:wav转pcm,pcm转wav
  19. 【matplotlib】绘制简单二维、三维图像
  20. 自媒体视频号博主个人兴趣认证怎么选择?

热门文章

  1. 你知道外卖cps是什么吗?(附裂变分销小程序源码搭建教程)
  2. 一文读懂交叉熵和最大似然的关系及在人脸识别中的应用
  3. springboot项目部署到服务器第三步部署java环境(最白教程)
  4. linux 4.8.4开机黑屏,修复多个细节 Linux Kernel 4.8.4发布
  5. 程序员才看得明白的面试圣经
  6. C语言单元测试框架——CUnit
  7. 阿里测试工程师聊:软件测试需要学什么?
  8. 机械设备远程实时监控方案
  9. 华为桌面云虚拟机白屏无法启动的修复方法
  10. 台式计算机报废如何进行处置,设备报废处置请示.doc