数据库入门 自用

数据库简介

测试主要工作:1.数据校验(查询)  2.适当准备数据和清理数据

数据库:存放数据的仓库

数据库分类

关系型数据库

RDMS:(Relational Database ManagementSystem关系型数据库系统。

将数据间的关系以数据库表的形式加以表达,并将数据存储在表格中,以便于查询。

常用关系型数据库:

  • Oracle:在大型项目中使用,例如:银行、电信等项目
  • MySQL:Web项目中使用最广泛的关系型数据库
  • Microsoft SQL Server:在微软的项目中使用
  • SQLite:轻量级数据库,主要应用在移动平台

非关系型数据库  

  • redis
  • mongodb
  • hbase

关系型数据库核心要素

数据行(一条记录)

数据列(字段)

数据表(数据行的集合)

数据库(数据表的集合,一个数据库中能够有n多个数据表)

SQL的分类:

SQL是一个结构化的查询语言,通过SQL能够对数据库进行相关的操作

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

data query language

  • 🌟DML:数据操作语言,对数据进行增加、修改、删除,例如:insert、update、dele

data manipulation language

  • TPL:事务处理语言,对事务进行处理,例如:begin transaction、commit、rollba

transaction processing language

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

data control language

  • 🌟DDL:数据定义语言,进行数据库、表的管理等,例如:create、drop

data definition language

  • CCL:指针控制语言,通过控制指针完成表的操作,例如:declare cursor

cursor control language

mysql安装及组成

mysql服务器:存储数据并解析编译后的sql语句,讲执行结果返回客户端

mqsql客户端(终端,工具navicat):下发用户要执行的sql语句,并显示服务器返回的执行结果

🌟命令连接MySQL数据库

前置条件:

确定mysql数据库的IP地址

可以通过ifconfig来确认

确认mysql数据库服务是否开启

netstat-anptu|grep3306

连接命令:

mysql  -h数据库IP    -P端口号    -u数据库登陆用户名  -p数据库登陆密码

mysql -uroot -p123456 本机登录数据库

-h不加时则表示为本机

-P不加时则表示默认3306端口

exit  退出

🌟工具navicat

临时关闭防火墙:systemctl stop firewalld

新建连接 本地ip地址 端口22 连接

新建数据库  数据库名test-db(尽量英文)  

  字符集 utf8mb4  排序规则utf8mb4_0900_ai_ci

操作表   点击表 右击新建表,填写字段信息(添加字段),保存填写表名,确定。

右击表名  打开表(双击表名):填写表中真正的数据  设计表:修改表的字段  删除表

🌟数据类型和约束

数据类型

整数 int  年龄无负数,无符号

小数 decimal  可以存5位数,小数位数2 整数3位

字符串 varchar  一个字母,一个中文  varchar(3)最多存3个字符

通过命令来写要加单引号  ‘姜美’

时间日期 datetime  2021-01-01

数据约束

主键(primarykey):物理上存储的顺序

当把某个字段设定为主键之后,该字段的值必须唯一,且不能为空

针对主键的字段,可以设定自动自增,自动在原来最大的ID值上加1

非空(notnull):此字段不允许填写空值

  空(Null)和"空字符是不一样的

唯一(unique):此字段的值不允许重复

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

外键(foreignkey):维护两个表之间的关联关系

数据库备份和还原

备份: 右击数据库-转储sql文件-结构和数据-选择保存路径

还原:右击数据库-运行sql文件-选择备份文件-开始

命令行操作数据库

常用命令

查看所有数据库:show databases;

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

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

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

sql语句

创建删除数据库表

create table 表名(

字段名  类型  约束,

……

  • CREATE TABLE students(
  • id INT UNSIGNED PRIMARY KEY auto_increment,
  • name VARCHAR(20),
  • age INT UNSIGNED,
  • height DECIMAL(5,2)
  • )

navicat  数据库右击 新建查询  

drop table 表名;

drop table if exists 表名;

-- 注释

选中要注释的内容 ctrl+斜杠

🌟添加数据insert

说明:主键自增长,可以用0或null代替。

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

  • 例: insert into students values(0,'亚瑟',22,177.56);

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

  • 例: insert into students(name) values('老夫子');

其他的不填就默认空

插入多行数据

  • 例: insert into students values(0,'亚瑟',22,177.56),(0,'张三',21,173.2);

添加删除数据 update 

语法格式:

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

例:修改id为5的学生数据,姓名改为狄仁杰,年龄改为20

update students set name=‘狄仁杰‘,age=20  where  id=5

delete from 表名 where 条件(物理删除对应的数据)

delete from students where id=6;

注意

此方法为物理删除,工作中大部分使用逻辑删除

逻辑删除是指通过设定一个字段(is_delete)来标识当前记录已经删除  实际还有数据,只是看不到了        1代表删除

delete

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

truncate 

  • truncat删除数据时,表结构会保留,自增长字段从1 开始。执行效率低于drop命令。

drop 

  • 如果想删除表,建议使用drop,且删除数据效率最高。

🌟查询

查询的基本操作

SELECT *FROM students; (查询全部)

查询部分字段数据:

  • select 字段1,字段2,...from 表名
  • 例:select name,sex,age from students

表起别名:

  • select 别名.字段1,别名.字段2…. from 表名 as 别名
  • 例:select  s.name , s.sex , s.age from students as s;

字段起别名

  • select 字段1 as 别名1 , 字段2 as 别名2.... from 表名
  • 例:select name as 姓名,sexas性别,age as 年龄from students;

字段内容去重

  • SELECT DISTINCT sex FROM students ;

🌟条件查询

根据一定条件查询数据结果

比较运算

  • !=    <>不等于
  • hometown != '北京' 家乡不在北京的      age < 20 年龄小于20岁的

逻辑运算

  • and 满足条件1和条件2
  • or 满足条件1或者条件2
  • not  非
  • SELECT * from students where not hometown ='天津'

模糊查询

  • 关键字查询 like
  • % 匹配任意多个字符 
  • _ 匹配任意一个字符

SELECT * FROM students WHERE name like '孙%'  查找孙某某

SELECT * FROM students WHERE name like '__' and age > 20    大于20岁名字两个字的

范围查询

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

例:查询家乡是北京或上海或广东的学生

select * from students where hometown in('北京','上海','广东')

●between .. and ..表示在一个连续的范围内

例:查询年龄为18至20的学生

select * from students where age between 18 and 20

空判断

注意:Mysq|中空表示null,与“(空)是不一样的。

空字符串是"",会创建一个对象,内容是“”,有内存空间。
而null,不会创建对象,没有内存空间,所对应的变量只是一个引用

●判断为空: is null

例:查询没有填写身份证的学生

select * from students where card is null

●判断非空: is not null

例:查询填写了身份证的学生

select * from students where card is not null

排序

●语法格式:

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

说明:

  • 将行数据按照字段1进行排序, 如果某些字段1的值相同时,则按照字段2排序,以此类推
  • 默认按照列值从小到大排列
  • asc从小到大排列,即升序  这个可以不写
  • desc从大到小排序,即降序

查询所有学生信息,按班级从小到大排序,班级相同时,再按学号从小到大排序.

SELECT * FROM students ORDER BY class ,studentNo;

聚合函数

方便进行数据统计

聚合函数不能在where中使用  where age=max(age)这个会报错

count( ):查询总记录数

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

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

sum(字段名):求和

avg(字段名):求平均数

查询北京学生的平均年龄

SELECT AVG(age) from students where hometown='北京'

分组分页

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

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

●语法格式:

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

例1:查询各种性别的人数

  • select sex,count(*) from students group by sex

例2:查询每个班级中各种性别的人数

  • select class,sex,count(*) from students group by class,sex(先以班级 再以性别分)

having是对group by后面的结果进行筛选,不能直接用where

limit  start,count  从start开始,0是表示第一个 

SELECT * FROM students LIMIT 0,5;

分页查询实现

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

n表示的是页数      n=1,2,3, 4

m表示的是每页显示的记录数        m=3

(n-1)*m, m是公式,并不是语法格式,不能直接写 在SQL语句中,需要替换为具体的数字

🌟连接查询

必须有字段是能关联的 

内连接    结果为两个表匹配到的数据,两边都有才连

语法格式:

  • select * from表1
  • inner join表2 on表1.列=表2.列

另一种写法:

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

-- 查询学生信息及成绩

SELECT *FROM students as stu INNER JOIN scores as sc on stu.studentNo=sc.studentno;    (as可以省略不写)

-- 查询王昭君的成绩,显示姓名课程号成绩

SELECT stu.name,sc.courseNo,sc.score FROM students stu INNER JOIN scores sc on stu.studentNo=sc.studentno WHERE stu.name='王昭君';

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

语法格式:

  • select * from表1
  • left  join表2 on表1.列=表2.列

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

语法格式:

  • select * from表1
  • right  join表2 on表1.列=表2.列

-- 查询男生中最高成绩,显示姓名课程名,成绩

  • SELECT students.`name`,courses.`name`,scores.score FROM students -- 显示姓名,课程名,成绩
  • inner JOIN scores on students.studentNO=scores.studentno 
  • INNER JOIN courses on courses.courseNo=scores.courseNo
  • WHERE students.sex='男' -- 从男生中选
  • ORDER BY scores.score desc -- 从大到小排序
  • LIMIT 0,1; -- 排序中取第一个

自关联

不需要多张表 自己和自己连接  比如省市区

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

●自关联要用别名

例1:查询河南省所有的市

Select * from areas as a1 inner join areas as a2 on a1.aid=a2.pid where a1.atitle='河南省';

例2:查询郑州市的所有的区

Select * from areas as a1 inner join areas as a2 on a1.aid=a2.pid where a1.atitle= ='郑州市';

例3:查询河南省的所有的市区

SELECT * FROM areas as a1 

INNER JOIN areas as a2 on a1.aid=a2.pid 

LEFT JOIN areas as a3 on a2.aid=a3.pid -- 市也会显示,没有区显示null

where a1.atitle='河南省';

子查询

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

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

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

-- 查询18岁学生的成绩  因为不止一个学生号,用in

SELECT score from scores WHERE studentno in (SELECT studentno FROM students WHERE age =18)

--查询数据库和系统测试的课程成绩  作为数据源

SELECT * FROM scores as sc INNER JOIN (

SELECT * FROM courses where name in ('数据库','系统测试')

)as co on co.courseno=sc.courseno;

起别名 原来没有名字 充当数据源

自查询特定关键字:

in 范围

主查询 where 条件 in (列子查询)

all 所有

主查询 where  列=all(列子查询)

any|some 任意

主查询 where  列 =  any(列子查询)

⚠️in 等价于 =any          some是any的别称        !=all等价于 not  in 

主键( primary key) :物理上存储的顺序

外键( foreign key): 维护两个表之间的关联关系

tpshop环境部署,数据库验证

软件工具准备

Vmware虚拟机

●在本机上安装好Vmware虛拟机

●在虚拟机.上安装并运行Linux系统

●注意:实际工作中使用云服务器

远程连接工具

●在本机上安装好远程连接工具 (xshell/putty/finalshell)

●通过远程连接工具连接到虚拟机

vmware 虚拟机  可以看作电脑

Linux  电脑上的系统

centos7——Linux的一个发行版本

平时操作的不是虚拟机是虚拟机上的某个系统,系统出问题重新解压打开就是一个新的系统(centos7.zip) 不需要重新安装虚拟机

环境搭建准备

关闭Linux上的防火墙(不然有些端口访问不通)

停止firewall服务  systemctl stop firewalld.service

禁止firewall开机启动  systemctl stop firewalld.service

远程连接步骤

远程机器  查看IP  ifconfig(如果是连云服务器,会直接给公网地址)

本地(电脑终端)测试是否能ping通    ping 远程ip

本地远程连接  finalshell  打开后新建ssh连接 填写名称,ip,用户名,密码

环境部署

  1. 项目技术架构介绍

客户端

服务器

浏览器

www.xxx.com➡️

web服务器

请求➡️

相应⬅️

数据库服务器

返回页面数据⬅️

php项目

mysql数据库

php项目代码

操作系统

lnmp环境  linux  mysql  nginx(web服务器)  php或python或java

  1. centos常见安装方式

yum 在线安装

必须连互联网;能够解决依赖问题

rpm 安装

自己下载RPM包;自己解决依赖

源码编译安装

自己下载源码并修改编译安装;自己解决依赖

依赖问题:安装过程中 弹窗 软件运行需要xxx软件,要依赖其他软件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值