数据库入门

132 阅读10分钟

数据库入门

1、什么是数据库

数据库:数据存储的仓库

特点:

1)长期存储数据

2)对数据进行有组织的管理  *体现:通过操作指定的语言完成数据的增、删、改、查

2、数据库分类(分类标准:按照数据存储格式的不同)

1)关系型数据库RDMS:(Relational Database Management System):以二维表的形式进行数据的存储  

*二维表:类似excel,有行和列

*常见关系型数据库:Oracle(主要用于大型项目,如银行)、SQL Server、SQlite、MySQL(主要用于中小型项目,目前应用软件最常用的数据库)

*关系型数据库核心要素:a.数据行(一条记录)b.数据列(字段)c.数据表(数据行的集合)d.数据库(数据表的集合,一个数据库中能够有n多个数据表)

2)非关系型数据库NoSQL(not only sql)

 redis:键值对,开源,可做数据库、缓存、消息中间件和队列

 MangoDB:文档

 Hbasd:(大数据存储)一个结构化数据的分布式存储系统

3、MySQL简介:

官网:www.mysql.com/

分为社区版和商业版本,社区版本免费使用

1)MySQL特点:

1、可移植性好

2、支持多操作系统

3、支持多种编程语言

4、开源、社区版免费

5、支持多线程

6、优化sql查询算法

7、多种数据库连接方式

8、支持多语言编码格式

2)MySQL组成:

1、Mysql服务:存储数据并解析编译后的sql语言,将执行结果返回给客户端

2、、Mysql客户端:下发用户要执行的sql语句,并显示服务返回的执行结果

3)Mysql连接:

MySQL安装完成默认已安装命令行客户端,连接前要知道MySQL服务的ip地址(windows通过ipconfig,linux用ifconfig查看)和端口(默认3306)

连接命令:mysql -hhost -p端口号 -u用户名 -p密码

*host :服务器ip地址或域名,不填表示为本机。-p端口号不加则表示默认端口3306

 

4)MySQL连接工具:Dbeaver用的比较多,还有Navicat、mysql workbench等

以Dbeaver连接为例:

 

4、SQL:Structured Query Language(结构化查询语言)

1)作用:通过SQL语言可以对数据库进行操作。

2)分类:

a. DQL:数据查询语言,用于对数据进行查询.例如:select

b. DML:数据操作语言,对数据进行增、删、改操作。例如:insert、update、delete

c. TPL:事务处理语言,对事物进行处理,例:begin、transaction、commit、rollback

d. DCL:数据控制语言,进行授权与权限回收。例:grant、revoke

e. DDL:数据定义语言,进行数据库、表的管理。例:create、drop

f. CCL:指针控制语言,通过控制指针完成表的操作。例:declare、cursor

5、命令操作数据库和表

1)常见操作数据库命令

查看所有数据库:show databases;

使用数据库:use 数据库名;

查看当前使用数据库:select database();

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

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

 

2)常见操作数据表的命令

*操作数据表之前要先通过use打开对应的数据库

查看当前数据库所有的表:show tables;

查看表结构:desc 表名;

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

创建数据库表:

语法格式:

create table 表名(

字段名1 类型(长度)约束,

字段名2 类型(长度)约束,

...       ...          ...

)

例:

create table students(

 Id int unsigned primary key auto_increment,

Name varchar(20),

Age int unsigned,

Height decimal(5,2)

)

注意:

1)最后一个字段)之前不加,

2)Id int unsigned primary key auto_increment,主键id自增长

*数据约束:主要是指对数据库中数据进行限制,以确保数据的正确性、有效性、一致性

常见约束:

主键(primary key):物理上存储的顺序   非空(not null):此字段不允许填写空值

唯一(unique):此字段的值不允许重复   外键(foreign key):维护两个表之间的关联关系

默认值(default):当不填写此值时会使用默认值,如果填写时以填写为准

*常用数据类型:

整型int:有符号范围(-21474836482147483647)无符号(unsigned)范围(04294967295)

小数decimal:示例:decimal(5,2),表示该字段可以存5位小数,其中小数位数为2,整数为3

字符串varchar:范围(0~65533)一个字母或一个中文点一个字符 例:varchar(3)最多存3个字符

时间日期datetime:范围(1000-01-01 00:00:00~9999-12-31 23:59:59 示例:2021-01-01 12:29:59

3)删除数据库表

语法格式:

方法一:drop table 表名;

方法二:drop table if exists 表名;

例:

drop table students;

drop table if exists students

4)增加数据

a.添加一行数据:

*主键自增长,可以用0或null代替

方法一:insert into 表名 values(...)

方法二:insert into 表名(字段1,字段2,...) value (值1,值2,...)

例:insert into students values(0,’亚瑟’,22,177.56)

Insert into students(name,age)values(‘老夫子’,22)

注:全表添加可以用方法一也可以用方法二,部分字段添加用方法二

b.添加多行数据

方法一:写多条insert语句,多条语句之间用英文分号分隔

例:

insert into students(name) value ('老夫子2');

insert into students(name) value ('老夫子3');

insert into students values(0,'亚瑟2',23)

方式二: 通过一条insert语句插入多条数据,数据间用逗号分隔

格式一: insert into 表名 values (...), (...) ...

例: insert into students values(0,'亚瑟3',23,167.56),(0,'亚瑟4',23,167.56) 

格式二: insert into 表名(字段名1,...) value(值1,...),(值1,...)...

例: insert into students(name) value ('老夫子5'),('老夫子6')

5)修改数据

语法格式:

update 表名 set 字段名1=值1,字段名2=值2... where 条件

例:update students set name='狄仁杰',age=20 where id=5;

6) 删除数据

-delete(可以通过where子句删除部分记录删除所有数据时,自增长字段不会从1开始)

语法格式:

delete from 表名 where 条件

例:delete from students where id=6

-Truncate删除数据(表结构会保留,自增长字段从1开始。执行效率低于drop命令):

truncate table 表名

-Drop删除表(包括所有数据和表结构,删除表使用,且删除数据效率最高) :

格式三:drop table 表名

7)数据查询

a.简单查询

语法格式:

select * from 表名;

例: select * from students;

b.查询部分字段数据:

select 字段1,字段2,... from 表名

例:select name,sex,age from students

c.起别名:

select 别名.字段1,别名.字段2,... from 表名 as 别名

select 字段1 as 别名1,字段2 as 别名2,... from 表名

d.去重:

select distinct 字段1,... from 表名

e. 条件查询(是根据一定的条件去查询数据的结果)

语法格式:

select 字段1,字段2... from 表名 where 条件;

例: select * from students where studentNo = 001;

*where支持多种运算符进行条件处理

*比较运算符:大于>、小于<、等于=、不等于!=或<>、大于等于>=、小于等于<=

*逻辑运算符:and、or、not

*模糊查询:1)关键字: like   2)% :匹配任意多个字符  3)_ : 匹配一个任意字符

*范围查询:1)in表示在一个非连续的范围内 2)between ... and ...表示在一个连续的范围内

*空判断:1)判断为空: is null    2)判断非空: is not null  

*注意:Mysql中空表示null,与 ‘’ (空)是不一样的

f.排序

语法格式:

select * from 表名 order by 字段名1 asc|desc, 字段名2 asc|desc,....

说明:

⚫ 将行数据按照字段1进行排序,如果某些字段1的值相同时,则按照字段2排序,以此类推

⚫ 默认按照列值从小到排列

⚫ asc从小到大排列,即升序

⚫ desc从大到小排序,即降大序

g.聚合函数

使用聚合函数方便进行数据统计

聚合函数不能作为 where 条件

count( ):查询总记录数

max(字段名):查询最大值

min(字段名):查询最小值

sum(字段名):求和

avg(字段名):求平均数

h.分组查询****

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

⚫ 按照字段分组,此字段相同的数据会被放到一个组中

⚫ 分组的目的是对每一组的数据进行统计(使用聚合函数)

⚫ 语法格式:

select 字段1,字段2,聚合函数... from 表名 group by 字段1,字段2...

例3:查询各个班级的人数

select class,count(*) from students group by class;

 

i.分组后的数据筛选

⚫语法格式:

select 字段1,字段2,聚合... from 表名 group by 字段1,字段2,字段3...having 条件

说明: 关键字having后面的条件运算符与where的相同

having与where对比

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

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

having 后面的条件中可以用聚合函数,where后面不可以。

例1:查询男生总人数

方案一:select count(*) from students where sex='男'

方案二:select sex,count(*) from students group by sex having sex=‘男’

j.分页-获取部分数据

⚫使用场景: 用来获取一部分的数据或者用来分页

⚫语法格式:

select * from 表名 limit start,count

说明:

⚫从start开始,获取count条数据

⚫ start索引从0开始

例1:查询前3行学生信息

select * from students limit 0,3;

select * from students limit 3;

 

k.分页实现

⚫ Limit典型应用场景是分页查询:

select * from students limit (n-1)*m, m

说明:

⚫ n表示显示第几页的数据

⚫ m表示每页显示多少条数据

注意:

⚫(n-1)*m, m 是公式,并不是语法格式,不能直接写在SQL语句中

l.连接查询-常用方式

01.左连接:结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null 填充

⚫语法格式:

select * from 表1

left join 表2 on 表1.列=表2.列

例1:查询所有学生的成绩,包括没有成绩的学生

select * from students stu left join scores sc on stu.studentNo = sc.studentNo

 

02.右连接:结果为两个表匹配到的数据加右表特有的数据,对于左表中不存在的数据使用null 填充

⚫语法格式:

select * from 表1

right join 表2 on 表1.列=表2.列

例1:查询所有学生的成绩,包括没有成绩的学生

select * from scores sc right join students stu on stu.studentNo = sc.studentNo

03内连接:结果为两个表匹配到的数据加

⚫语法格式:

select * from 表1

inner join 表2 on 表1.列=表2.列

⚫ 另一种写法:

select * from 表1,表2 where 表1.列=表2.列

例1:查询学生信息及学生的成绩

方式一: Select * from students stu inner join scores sc on stu.studentNo = sc.studentNo

方式二:select * from students stu, scores sc where stu.studentNo = sc.studentNo

04、自关联(表特点:存在上下级关系)

⚫ 自关联:inner join 关联同一个表,不同的字段。

⚫ 自关联要用别名

 

05子查询****

*嵌入在其他查询语句中的select语句称为子查询其他的查询语句称之为主查询。

*子查询辅助主查询,要么充当条件,要么充当数据源

*子查询是一条完整的、可单独执行的select查询语句。