一、数据库简介

  1、概念:人类在进化的过程中,创造了数字、文字、符号等来进行数据的记录,但是承受着认知能力和创造能力的提升,数据量越来越大,对于数据的记录和准确查找,成为了一个重大难题。计算机诞生后,数据开始在计算机中存储并计算,并设计出了数据库系统。

  数据库系统解决的问题:持久化存储、优化读写、保证数据的有效性

  当前使用的数据库,主要分为两类

    文档型:如sqlite,就是一个文件,通过对文件的赋值完成数据库的复制

    服务型:如mysql、postgre,数据存储在一个物理文件中,但是需要使用终端以tcp/ip协议连接,进行数据库                               的读写操作

  2、三范式

    概念:经过研究和对使用中问题的总结,对于设计数据库提出了一些规范,这些规范被称为范式

    范式:

      第一范式(1NF):列不可拆分

      第二范式(2NF):唯一标识

      第三范式(3NF):引用主键

  3、E-R模型

    当前物理的数据库都是按照E-R模型进行设计的,E代表entry,实体,R代表relationship,关系

    一个实体转换为数据库中的一个表

    关系描述两个实体之间的对应规则,包括:一对一,一对多,多对多

    关系转换为数据库表中的一个列*在关系型数据库中一行就是一个对象

  4、主要操作

    数据库的操作,包括创建、删除

    表的操作,包括创建、修改、删除

    数据的操作,包括增加、修改、删除、查询、简称crud

二、数据完整性

  1、概念:一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中。在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束

  2、字段类型

    数字:int,decimal    decimal(5,2)表示一共包含五位数,小数包含2位

    字符串:char,varchar,text

    日期:datatime

    布尔:bit

  3、约束

    主键:primary key    主键只能有一个

    非空:not null

    唯一:unique            可以有多个,物理上存储的结构是由主键维护的

    默认:default

    外键:foreign key

三、数据库基本操作

  net start mysql:启动mysql服务,以管理员身份运行cmd

  net stop mysql:关闭mysql服务,以管理员身份运行cmd

  mysql –u root –p:启动mysql客户端

  主键:可以保证数据的唯一性

  基本命令:

    连接数据库:mysql –u 用户名 –p  输入密码

    退出登录(断开连接):quit或exit

    查看版本(连接后可以执行):select version();

    显示当前时间(连接后可以执行):select now();

    远程连接:mysql –h ip地址 –u 用户名 –p    输入密码

  数据库操作命令

    创建数据库:create database 数据库名 charset=utf8;

    删除数据库:drop database 数据库名

    切换数据库:use 数据名;

    查看当前选择的数据库:select database();

  表操作命令

    查看数据库中所有表:show tables;

    创建表:create table 表名(列及类型);

      create table student(id int auto_increment primary key, name varchar(20) not null,age int not null,gender bit default 1,address varchar(20),isDelete bit default 0);

      auto_increment:表示自增长 

      primary key:表示主键

      not null:表示不为空

    删除表:drop table 表名;

    查看表结构:desc 表名;

    查看建表语句:show create table 表名;

    重命名表:rename table 原表名 to 新表名;

    修改表:alter table 表名 add|change|drop 列名 类型;

  数据操作命令

    增:

      1.全列插入:insert into 表名values(…)

        insert into student values(0,”习大大”,66,1,”北京”,0);

        说明:主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功以后以实际数据为准。

      2.缺省插入:insert into 表名(列1,列2,…) values(值1,值2,…);

      3.同时插入多条数据:insert into 表名 values(…),(…),…(…);

    删:delete from 表名 where 条件; 注意:没有条件是全部删除,慎用。

    改:update 表名 set 列1 = 值1, 列2 = 值2… where 条件;

      注意:没有条件是全部列都修改,慎用。

    查:select * from 表名;

      说明:查询表中的全部数据

    查

      基本语法:select * from 表名

        from关键字后面是表名,表示数据来源于这张表

        select后面写表中的列名,如果是*表示在结果集中显示表中的所有列

        在select后面的列名部分,可以使用as为列名起别名,这个别名显示在结果集中

        如果要查询多个列之间使用逗号分隔

        消除重复行:在select后面列名前面使用distinct可以消除重复的行

    条件查询:

      1.语法:select * from 表名 where 条件;

      2.比较运算符:=、>、<、>=、<=、!=或<>

        select * from student where id > 2;

      3.逻辑运算符:and、or、not

        select * from student where id > 2 and gender=0;

      4.模糊查询:like

        %表示任意多个任意字符

        _表示一个任意字符

      5.范围查询:in

        in:表示在一个非连续的范围内

        between:表示在一个连续的范围内

          select * from student where id in(4,6,8);

          select * from student where id between 6 and 8;

      6.空判断

         insert into student(name,age) values(“特朗普”,70);

          注意:null与””是不同的

         判断空:is null     判断非空:is not null

          select * from student where address is null;

      7.优先级

        小括号,not,比较远算符,逻辑运算符

        and比or优先级高,如果同时出现并希望先选or,需要结合()来使用

    聚合:为了快速得到统计数据,提供了5个聚合函数

      1.count(*) 表示计算总行数,括号中可以写*和列名

        需求:查询学生总数

        示例:select count(*|id) from student;

      2.max(列) 表示求此列的最大值

        需求:查询女生的编号最大值

        示例:select max(id) from student where gender=0;

      3.min(列) 表示求此列的最小值

        需求:查询女生的编号最小值

        示例:select min(id) from student where gender=0;

      4.sum(列) 表示求此列的和

        需求:查询所有学生的年龄和

        示例:select sum(age) from student;

      5.avg(列) 表示求此列的平均值

        需求:查询所有学生年龄的平均值

        示例:select avg(age) from student;

    分组:按照字段分组,表示此字段相同的数据会被放到一个集合中。分组后只能查询出相同的数据列,对于有差异的数据列无法显示在结果集中。可以对分组后的数据进行统计,做聚合运算

      语法:select 列1,列2,聚合…from 表名 group by 列1,列2,…

      需求:查询男女生总数

      示例:select gender,count(*) from student group by gender,age;

    分组后的数据筛选:select 列1,列2,聚合…from 表名 group by 列1,列2,… having 列1,列2,列3,…聚合…

      示例:select gender,count(*) from student group by gender having gender;

    where与having的区别:

      where是对from后面指定的表进行筛选,属于对原始数据的筛选

      having是对group by的结果进行筛选

    排序:

      语法:select * from 表名 order by 列1 asc|desc,列2 asc|desc,…

      说明:1.将数据按照列1进行排序,如果某些列1的值相同,则按照列2进行排序

      2.默认按照从小到大的顺序排序

      3.asc:升序 desc:降序

        需求:将没有被删除的数据按年龄排序

        示例:select * from student where isDelete=0 order by age asc,id desc;

    分页:

      语法:select * from 表名 limit start,count;

      说明:start索引从0开始

      示例:select * from student where gender=1 limit 0,3;

    关联:

      建表语句:create table class(id int auto_increment primary key,name varchar(20) not null,stuNum int not null);

      create table students(id int auto_increment primary key, name varchar(20) not null,gender bit default 1,classid int not null,foreign key(classid) references class(id));

      插入一些数据:

        insert into class values(0,’python01’,55),(0,’python02’,50),

                  (0,’python03’,60),(0,’python04’,80);

        insert into students values(0,’tom’,1,1);

        insert into students values(0,’lilei’,1,10);

        insert into students values(0,’jack’,1,2);

      select * from students;

    关联查询:

      select students.name,class.name from class inner join students on class.id =students.classid;

    分类:

      1.表A inner join 表B

        表A与表B匹配的行将会出现在结果集中

      2.表A left join 表B

        表A与表B匹配的行会出现在结果集中,外加表A中独有的数据,未对应的数据使用null填充

      3.表A right join 表B

        表A与表B匹配的行会出现在结果集中,外加表B中独有的数据,未对应的数据使用null填充

版权声明:本文为ccmldl原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ccmldl/p/9600912.html