一、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())
insert aa values(,''无限-女 '')
没有达到第一范式 create table aa(id int,name varcahr(),age char())
insert aa values(,''无限'',''女 '')
达到第一范式

实例

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(

sno int(),cno int(),grade int(),credit int(),

primary key sno,cno

)

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

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

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

sci

sno cno grade credit

. . . .

. . . .

. . . .

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

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

如要加新课程,由于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将重复存储,插入,删除和修改时也将产生类似以上例的情况。
原因:关系中存在传递依赖造成的。即SNO -> DNO。 而DNO ->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将重复存储,插入,删除和修改时也将产生类似以上例的情况。
原因:关系中存在传递依赖造成的。即SNO -> DNO。 而DNO ->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(三)之SQL语句分类、基本操作、三大范式的更多相关文章

  1. 1 Oracle概述&与MySQL的差别&SQL语句分类复习

    一. 知识点目录 Oracle的概念和安装 基本查询 条件查询 Oracle中的函数 多表查询 子查询 表空间的状态 用户 视图 索引 序列 同义词 PLSQL编程 游标 存储过程 存储函数 触发器 ...

  2. 五、mysql中sql语句分类及常用操作

    1.sql语句分类: DQL语句 数据查询语言 select DML语句 数据操作语言 insert delete update DDL语句 数据定义语言 create drop alter TCL语 ...

  3. MySQL的常用SQL语句.md

    修改密码 这是常见的大家一般都要用的 首先     安装成功了打开cmd --> mysql -u root -p -->输入你的密码     修改mysql root用户密码    格式 ...

  4. MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系

    数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于 ...

  5. 【MySQL】MySQL基础(SQL语句、约束、数据类型)

    数据库的基本概念 什么是数据库? 用于存储和管理数据的仓库 英文单词为:DataBase,简称DB 数据库的好处? 可以持久化存储数据 方便存储和管理数据 使用了统一的方式操作数据库 -- SQL 常 ...

  6. Oracle,SQL Server 数据库较MySql数据库,Sql语句差异

    原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...

  7. mysql(数据库,sql语句,普通查询)

    第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. l 什 ...

  8. 技术分析 | 浅谈在MySQL体系下SQL语句是如何在系统中执行的及可能遇到的问题

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 SQL语句大家并不陌生,但某种程度上来看,我们只是知道了这条语句是什么功能,它可 ...

  9. MySQL 常用的sql语句小结(待续)

    mysql 常用的sql语句 1.查看数据库各个表中的记录数 USE information_schema; SELECT table_name,table_rows FROM tables WHER ...

  10. mysql使用基础 sql语句(一)

    csdn博文地址:mysql使用基础 sql语句(一)  点击进入 命令行输入mysql -u root -p,回车再输入密码,进入mysql. 终端命令以分号作为一条语句的结束,可分为多行输入,只需 ...

随机推荐

  1. Datatables快速入门开发--一款好用的JQuery表格插件

    博主是一个java后端程序员小白,前端技术会用但不精通,做后台的一些功能经常要涉及表格的展示,分页,搜索,排序等等一系列功能,在经历了一段时间的原始手段,开始接触并使用Datatables,一个jqu ...

  2. Vue组件基础用法

    前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...

  3. Lua Behavior Tree For Unity3D(Lua描述行为树For Unity3D)

    行为树(BTTree)笔记 为什么是Lua版本的行为树 目前国内的手机游戏都标配热更新功能,而游戏AI自然也是MMO游戏的一个标配,比如说挂机的AI,宠物的AI等等. 说起如何用更简单的方式开发AI功 ...

  4. Uva 10142 Australia Voting

    水题 模拟 大意就是模拟一个选举的系统 认真读题,注意细节,耐心调试 #include<cmath> #include<math.h> #include<ctype.h& ...

  5. Codeforces 556 A Case of the Zeros and Ones

    A. Case of the Zeros and Ones time limit per test 1 second memory limit per test 256 megabytes input ...

  6. NYOJ--325--深度优先搜索--zb的生日

    /* Name: NYOJ--325--zb的生日 Author: shen_渊 Date: 15/04/17 08:18 Description: 输入时计算总质量,DFS搜索和总质量差值一般最接近 ...

  7. JavaScript 开发总结(一)

    数据类型:JavaScript定义的数据类型有字符串.数字.布尔.数组.对象.Null.Undefined,但typeof有区分可判别的数据分类是number.string.boolean.objec ...

  8. 最短路和次短路问题,dijkstra算法

    /*  *题目大意:  *在一个有向图中,求从s到t两个点之间的最短路和比最短路长1的次短路的条数之和;  *  *算法思想:  *用A*求第K短路,目测会超时,直接在dijkstra算法上求次短路; ...

  9. spring-session实现分布式集群session的共享

    前言 HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的.但是我们把应用搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同一用户 ...

  10. 如何两周达到150行Java程序的能力--part 2

    第一次课训练营课程打通了有C语言编程通往面向对象编程的道路,然而道路依然会曲折.下图是第二次训练营课程的训练大纲,从第二次开始,每次课首先进行测试. 针对作业1的训练要求,明确定义了13个具体的测试点 ...