zoukankan      html  css  js  c++  java
  • MySQL学习笔记(一)—数据库基础

    一、数据库概述

    1.数据库的组织结构

         (1)数据库就是用来存放信息的仓库。

         (2)数据库里的数据集合都存放在数据表(table)里。

         (3)数据表由数据行(row)和数据列(column)构成。

         (4)一个数据行就是数据表里的一条记录。

    二、数据库设计的三大范式

         为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

    1.第一范式(确保每列保持原子性)

         如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式。
         例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。

    2.第二范式(确保表中的每列都与主键相关)

         如果一个关系满足第一范式,并且除了主键以外的其它列,都依赖于该主键,则满足第二范式。
    例如:订单表(
    订单编号、产品编号、定购日期、价格、……),"订单编号"为主键,"产品编号"和主键列没有直接的关系,即"产品编号"列不依赖于主键列,应删除该列。

    3.第三范式(属性不依赖于其它非主属性,消除传递依赖)

         简而言之,第三范式就是属性不依赖于其它非主属性。

    三、数据库基本操作

    1.创建表

    格式: create table tb_name(column_specs);

         tb_name: 数据表名字。

         column_specs: 数据表各个数据以及各种索引(如果有的话)。

    CREATE TABLE president
    (
    	last_name VARCHAR(15) NOT NULL,
    	first_name VARCHAR(15) NOT NULL,
    	city VARCHAR(20) NOT NULL,
    	state VARCHAR(2) NOT NULL,
    	birth DATE NOT NULL
    );

    2.查看表结构

    格式:  describe tb_name;desc tb_name;

    DESCRIBE president;

    结果:

    image

    3.添加数据

    (1)一次性的列出全部数据的值

        格式: insert into tb_name values(...)

         关键字values后面的括号必须为数据表全体数据列准备好对应的值,这些值的顺序也表存储的顺序一致。

         还可以一次性插入多个数据行,格式如下。

        格式: insert into tb_name values(...),(...),...;

    INSERT INTO president VALUES('Tom','A','China','Bj','1992-10-30');
    INSERT INTO president VALUES('Jerry','B','China','SH','1991-10-31'),('Li','B','China','BJ','1991-11-11');

    结果:

    image

    (2)给出数据列的名字再列出它的值

         这种适合与只有少数几个数据列需要有初始值的情况。

         格式: insert into tb_name (name1,name2,...) values (value1,value2,...);

    4.查询数据

    (1)推荐明确指定列名

         格式: select column_1,column_2,... from tb_name;    

         使用'*'来无条件的地获取所有列数据,当然简单,但是会产生几个问题。如果针对拥有很多列的表情况,那些不需要的列就会浪费很多内存。

    SELECT last_name,city,birth FROM president;

    结果:

    image

    (2)条件检索

         如果想获取与特定条件一致的记录必须使用where语句。

    SELECT last_name,city,birth FROM president WHERE birth >= '1991/10/31';

    image

    image

    (3)模糊检索

         模糊检索就是以列中是否有指定字符串为条件的检索。

    SELECT last_name,city,birth FROM president WHERE last_name LIKE 'T%';

         T%: 代表以T开头的所有字符串。

         %T: 代表以T结尾的所有字符串。

         %T%: 代表所有包含T的所有字符串。

    (4)NULL条件

         不是使用=运算符,必须得使用 is。

    SELECT last_name,city,birth FROM president WHERE birth IS NULL;

    结果:

    image

    (5)多个条件表达式

         AND运算符是左右都为True返回True。

         OR运算符是只要有一个为True时返回True。

         NOT: 求反值的运算符。

    image

    运算符的优先级: NOT---AND---OR

    所以应该这样写。

    SELECT name,birth,sex FROM customer WHERE (birth<= '1976-01-01' OR birth >= '1980-01-01' ) AND sex='1';

    (6)结果排序

        使用order by语句进行数据的排序。

    image

    (7)取得指定区间的

    image

    SELECT name, age,address FROM person LIMIT 2;
    结果:

    image

         limit 2: 是从开始取出两个数据。要取出2、3行数据,使用limit 1,2。即[开始位置,数量],开始位置从0开始。

    SELECT name, age,address FROM person LIMIT 1,2;

    结果:

    image

        原则上limit语句是要与order by语句同时使用的,如果没有指定排序方式,数据库就会按照随机的顺序将数据取出。

    (7)数据分组

         group by通常与统计函数一起使用。

    image

    image

    我想列出每个部门最高薪水的结果。
    SELECT dep,MAX(salary) AS MaxSalary FROM person GROUP BY dep;

    结果:

    image

  • 相关阅读:
    java之元数据(metadata)
    悲观锁(Pessimistic Locking)和乐观锁
    新建了springboot项目在包下右键创建class时无class选项
    idea创建一个springboot项目
    处理百万级以上的数据提高查询速度的方法
    写入文件
    WCf客户端测试
    WCF客户端代理
    WCF之Windows宿主(可安装成服务自动并启动)
    戴上耳机,全世界都是你的
  • 原文地址:https://www.cnblogs.com/yangang2013/p/5397065.html
Copyright © 2011-2022 走看看