mysql数据库

Posted Yinhb1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库相关的知识,希望对你有一定的参考价值。

1. 为什么软件测试工程师还需要学习数据库以及开发方面 的知识?

测试工程师在测试软件过程中,不仅仅需要在界面进行操作,还需要检查数据库中的数据是否正确,从而在软 件出现问题时候,能够定位到问题原因

2. 什么是数据库

数据库是按照数据的结构来组织,存储,和管理数据的仓库,简而言之,就是存放数据的仓库

3.数据库和SQL是什么关系?

数据库里面放着数据,而SQL是用来操作数据库里数据的语言(工具)。

例如有一碗米饭(碗就是mysql,里面放的米是数据),你要吃碗里的米饭,拿什么吃?拿筷子(sql)。用
筷子(sql)操作碗里(mysql)的米饭(数据)

4.数据库的分类

4.1:关系型数据库

关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,
对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类、合并、连接或选取等运算 来实现数据库的管理。

Oracle,mysql,SQLServer,SQLite

4.2:非关系型数据库

NoSQL,泛指非关系型的数据库,NoSql数据库在特定的场景下可以发挥出难以想象的高效率和高性能,它是
作为对传统关系型数据库的一个有效的补充

MongoDB,Redis

介绍

Oracle是一个关系型数据库管理系统是最挣钱的数据库,出自甲骨文公司,市场占有率非常高,功能非常强
大,被一些大型企业,电信,银行,证券公司所使用。 MySQL是一个关系型数据库管理系统,MySQL目前最流行的开源数据库。
SQLServer,微软开发的数据库,仅支持Windows操作系统,号称是windows上最好用的数据库。
MongoDB,最好用的文档型数据库,是NOSQL类型数据库的领导者之一,也是当前最成功的NoSQL类型数据
库,数据存储格式采用JSON形式,非常灵活。 Redis,最好的内存级数据库,查询效率极高,并且在Redis
3.0之后,支持多种数据类型,String, Set,List,Hash等类型,开始支持集群,弥补了自身短板。是目前做缓存最流行的数据库。 SQLite,最流行的嵌入式数据库,占领手机行业的绝对领导者地位,androidios两大手机系统,都内嵌
了SQLite数据库,SQLite是一个完整的关系型数据库,支持标准SQL,支持事务操作,程序包非常小,是嵌 入式设备的最佳选择。

5.MySQL的安装配置

5.1:安装配置
参考Mysql安装文档
5.2:安装问题说明
有些同学的电脑,安装时,有可能卡死在最后一步上,建议多试几次,或者安装的时候,先选择标准安装 方式,安装之后,再到my.ini文件下,搜索latin修改为utf8

6:sql语句的分类

DQL:数据查询语言,用于对数据的查询,select
DML:数据操作语句,用于修改数据库中的数据,包括插入(INSERT)、更新(UPDATE)和删除(DELETE)
DDL:数据定义语言,用于创建、修改、和删除数据库内的数据结构
DCL:数据控制语言,用于对数据库的访问,如:1:给用户授予访问权限(GRANT);2:取消用户访问权限 (REVOKE)

6.1:表字段数据类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型

6.1.1:整型

6.1.2:浮点型(float 和 double)

设一个字段定义为 float(5,3),如果插入一个数 23.45678,实际数据库里存的是 23.457,但总个 数还以实际为准,即
5位。
6.1.3:字符串(char,varchar,text)

char 和 varchar: VARCHAR与CHAR两种字符型数据类型相比,最大的差异就是前者是可变长度,而后者则是固定长度。在存储
时,前者会根据实际存储的数据来分配最终的存储空间。而后者则不管实际存储数据的长度,都是根据CHAR规 定的长度来分配存储空间

6.1.4:时间/日期

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据
类型的字段可以存放这条记录最后被修改的时间。
6.2.数据类型的属性

如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为 NULL ,就会报错。
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。 PRIMARY
KEY关键字用于定义列为主键。为了标识数据库记录唯一性,不允许记录重复,且键值不能为空, 主键也是一个特殊索引。
您可以使用多列来定义主键,列间以逗号分隔。 UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的 CHARSET 设置编码

6.3:DDL
(database defination language) 数据库定义语言
(1)创建数据库
在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下
语句

create database 数据库名; create database 数据库名 character set utf8;

操作

create database 2006C CHARACTER set utf8;

(2)选择数据库
在你连接到 MySQL 数据库后,可能有多个可以操作的数据库,所以你需要选择你要操作的数据库
语句

use 数据库;

操作

use 2006C;

(3)查询建立数据
查看数据库创建细节
语句

show create database 数据库;

操作

show create database 2006C;

(3)查询建立数据
查看数据库创建细节
语句

show create database 数据库;

操作

show create database 2006C;

(4)删除数据库
删除创建的数据库
语句

drop database 数据库;

操作

drop database 2006C;

(5)创建表
语句

create table 表名(字段 类型,字段 类型…)

操作

create table student(
id int PRIMARY key auto_increment,
name varchar(20),
sex varchar(20),
age int,
salery float(6,2),
birthday date)

(6)查看表的创建细节

show create table student;

(7)展示表结构

desc student;

(8)添加表字段
在原有的学生基础上添加address列

alter table student add address varchar(20);

(9)修改表字段
在原有的学生基础上修改address列

alter table student MODIFY address varchar(125);

(10)删除表字段
在原有的学生基础上删除address列

alter table student drop address;

6.4:DML
(1)新增数据
语句

单条:insert into 表名 values(字段值,字段值,字段值…) 多条:insert into 表名
values(字段值,字段值,字段值…),(字段值,字段值,字段值…);

操作单条

insert into student values(1,‘张三’,‘男’,18,389.10,‘1999-10-10’);

操作多条

insert into student values(2,‘李四’,‘男’,19,1389.10,‘2000-10-10’),(3,‘王
五’,‘女’,20,3389.10,‘2001-10-10’);

(2)修改数据
语句

UPDATE 表名 SET 字段1=值1,字段2=值2,…,字段n=值n [WHERE 条件];

操作

update student set name=‘马超’,salery=3456,birthday=“2003-02-12” where
id=2;

(3)删除数据
语句

单条:delete from 表名 where 条件; 全部:delete from 表名

操作

delete from student where id=1;

6.5:DQL
数据查询语言,用于对数据的查询
(1)查询表中的具体字段数据

SELECT 字段1,字段2…字段n FROM 表名;

(2)查询表中的全部数据

SELECT * FROM 表名;

(3)条件查询

SELECT * FROM 表名 where 条件;

3.1:按关系运算符筛选

等于 =
大于 >
大于等于>=
小于<
小于等于<=
不等于!=

3.2:逻辑运算符筛选

and
or
not

3.3:in的使用
(4)模糊查询

select * from 表 where 字段 like ‘%匹配数据%’;
select * from 表 where 字段 like‘匹配数据%’;
select * from 表 where 字段 like ‘%

匹配数据’;
(5) 排序查询(默认是正序)

select * from 表名 order by 字段;

(6)分组查询

select * from 表明 group by 字段; select * from 表明 group by 字段 having 条件;

补充:

having 条件表达式:用来分组查询后指定一些条件来输出查询结果 having作用和where一样,但having只能用于group by

(7)分页查询

select * from table limit m,n

补充:

其中m是指记录从m+1开始,N代表取n条记录
select * from student limit 2,4
即取出第3条至第6条,4条记录

(8)聚合函数

count(个数)、sum(求和)、avg(平均)、max(最大)、min(最小)等

7: 多表设计

7.1:一对一

有时候,为了业务,或者避免一张表中数据量过大,过复杂,在开发中会进行一对一方式来设计表。


7.2:一对多
(1方建主表(id为主键字段), 多方建外键字段)

指的是一个实体的某个数据与另外一个实体的多个数据有关联关系, 一对多的关系在设计的时候,需要设计 表的外键



7.3:多对多

一个实体的数据对应另外一个实体的多个数据,另外实体的数据也同样对应当前实体的多个数据。 比如:一个学生可以有多个老师,一个老师可以教多个学生
解决方案:创建一个中间表,专门用来维护多表之间的对应关系,通常是能够唯一标识出数据的字段(主键)

8:连接查询

8.1:内连接(inner join)/外连接(left join / right join)
语句

select 表1.字段,表2.字段 from 表1 inner/left/right join 表2 on 表1.字段 = 表2.字段
where 条件

select 表1.字段,表2.字段,表3.字段 from 表1 inner/left/right join 表2 on 表1.字段 =
表2.字段 inner/left/right join 表3 on 表1.字段 = 表3.字段 where 条件


1:找出选修过何老师的课程的学生成绩

select scgrade from studentcourse INNER JOIN course on
studentcourse.cno = course.cno where Cteacher =‘何昊’;

2:列出有不及格课程(成绩小于60)的学生的姓名

select sname from studentcourse as sc INNER JOIN student as s on
s.sno=sc.sno where scgrade<60 GROUP BY sname;

3:查询SC表中对应何昊老师所授课程的女生的信息

select * from studentcourse as sc INNER JOIN course as c on sc.cno =
c.cno INNER JOIN student as s on s.sno=sc.sno where Cteacher=‘何昊’ and
sex=‘女’;

4:找出没有选修过何老师的课程的所有学生的姓名

select sname from student where sno not in(select sno from
studentcourse INNER JOIN course on studentcourse.cno = course.cno
where Cteacher =‘何昊’);

以上是关于mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章

mysql 约束

米饭里加点它,4大病症全没了!一定要告诉家里做饭的TA

Mysql 查询阻塞和事物情况

大众点评网商家数据采集爬虫实现源码

蛋炒饭做法升级 更名为“饭炒蛋”

函数的进阶