目录

一、数据库的基本知识

1、数据库概念

2、常见的数据库分类

(1)、当前主要使用的两种类型数据库

(2)、关系型数据库

(3)、非关系型数据库

二、SQL基本知识

1、SQL介绍

2、SQL语言的分类

三、MySQL基本知识

1、MySQL介绍

2、MySQL特点

3、MySQL的数据类型和约束

3.1、常用数据类型

3.2、约束

4、MySQL数据库语法

4.1、在Navicat中如何MySQL语句

4.2、创建数据库

语法格式

举例说明

4.3、使用数据库

4.4、修改数据库

4.5、删除数据库

4.6、数据库的其他操作

4.7、关于命令的小总结

4.8.1、使用Navicat工具实现数据库的备份

4.8.2、命令备份数据库

4.9、数据表的操作

4.9.1、创建表

4.9.2、查看表结构

4.9.3、删除数据表

4.10、数据操作

4.10.1、增加数据

4.10.2、修改数据

4.10.3、删除数据

4.10.4、拓展1:逻辑删除

4.10.5、拓展2:其他删除数据的方法

4.11、查询操作【非常重要】

4.11.1、查询所有字段

4.11.2、查询部分字段

4.11.3、起别名

4.11.4、去重

4.11.5、复杂查询

4.11.5.1、条件查询

4.11.5.1-1、比较运算符

4.11.5.1-2、逻辑运算符

4.11.5.1-3、模糊查询

4.11.5.1-4、范围查询

4.11.5.1-5、空判断

4.11.5.2、排序

4.11.5.3、聚合函数

4.11.6、分组

4.11.6.1、语法格式

4.11.6.2、分组后的数据筛选

4.11.6.2.1、语法格式

4.11.6.2.2、where和having的区别

4.11.7、分页

4.11.7.1、分页格式(分页万能公式)

5、连接查询【非常重要】

5.1、定义

5.2、连接方式图解

5.3、内连接

5.3.1、语法格式

5.3.2、举例说明

5.3.3、拓展:内连接的另一种写法(旧式写法)

5.4、左连接

5.4.1、语法格式

5.4.2、举例说明

5.5、右连接

5. 5.1、语法格式

5.5.2、例子

6、左右连接存在的必要性

7、自关联

7.1、基本概念

7.2、例子

8、子查询

8.1、子查询的基本概念

8.2、主查询和子查询的关系

8.3、例子1:子查询充当条件

8.4、例子2:子查询充当数据源

三、数据库设计

1、E-R模型

1.1、一对一

1.2、一对多

1.3、多对多

2、主键和外键

2.1、概念与介绍

2.2、设置主键

2.3、删除主键

2.4、设置外键

2.5、删除外键

3、索引

3.1、索引概念

3.2、设置索引

3.3、删除索引

4、外键和索引的综合说明

4.1、外键

4.2、索引

四、MySQL学习感悟


链接:软件测试第一篇_测试理论_Linux数据库_超详细教程_哔哩哔哩_bilibili

一、数据库的基本知识

1、数据库概念

数据库是指长期存储在计算机内、有组织的数据集合,简而言之,数据库就是一个存储数据的地方。

表是数据库中存储数据的基本单位,数据按照分类存储到不同的表中,能够非常高效的查询其中的数据。

注意:对于测试工作而言,如果项目页面没有实现,但是又想要校验数据,则可以直接通过查询数据库实现。

2、常见的数据库分类

(1)、当前主要使用的两种类型数据库

  • 关系型数据库
  • 非关系型数据库

(2)、关系型数据库

1、基本概念

RDMS:(Relational Database Management System)关系型数据库系统,是将数据间的关系以数据库表的形式加以表达,并将数据存储在表格中,以便于查询。

2、关系型数据库的代表产品

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

3、关系型数据库的核心元素

  • 数据行(一条记录)
  • 数据列(字段)
  • 数据表(数据行的集合)
  • 数据库(数据表的集合,一个数据库中能够有n多个数据表)

(3)、非关系型数据库

将数据以key、value、文本、图片等形式存储的数据构成。

  • Redis
  • MongoDB

二、SQL基本知识

1、SQL介绍

SQL:Structred Query Language(结构化查询语言),通过SQL语言可以对数据库进行操作。

主流的关系型数据库都支持使用SQL语言进行操作,也就是说可以通过SQL语言操作Oracle、MySQL、Microsoft SQL Server、SQLite 等关系型的数据库。

2、SQL语言的分类

  • DQL:数据查询语言,用于对数据进行查询,例如:select
  • DML:数据操作语言,对数据进行增加、修改、删除,例如:insert、update、delete。
  • DCL:数据控制语言,进行授权与权限回收,例如:grant、revoke。
  • DDL:数据定义语言,进行数据库、表的管理等,例如:create、drop。

注意

  • 对于测试工程师来说,重点是数据的查询,因此需要熟练编写DQL。
  • 在MySQL中,默认对SQL语法不区分大小写。

三、MySQL基本知识

登录MySQL的命令:mysql -u数据库用户名 -p数据库密码

关闭MySQL的命令:exit

1、MySQL介绍

MySQL是一个关系型数据库管理系统,目前属于Oracle旗下产品。

目前为止,MySQL社区版是可以免费使用的。

2、MySQL特点

开源、社区版免费、支持多平台/多语言、使用范围广泛,是学习数据库开发与使用的首选。

MySQL的连接工具,建议使用Navicat。

说明:由于数据库软件处于服务器中,想要操作数据库,就必须使用工具远程连接数据库后,进行操作。

3、MySQL的数据类型和约束

3.1、常用数据类型

数据类型:对于填入的数据值本身进行控制,保证数据准确性。

  • 整数:int,分为有符号范围和无符号范围。有符号范围(-2147483648~2147483647),无符号(unsigned[安塞的])范围(0~4294967295)。
  • 小数: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),例如:'2020-01-01 12:29:59'

3.2、约束

约束:对于整张数据表进行限制,确保对应字段的所有数据符合设计要求。

  • 主键(primary【拍莫瑞】 key):能唯一标识表中的每一条记录的属性组。
  • 非空(not null):此字段不允许填写空值。
  • 唯一(unique【优尼科】:此字段的值不允许重复。
  • 默认值(default):当不填写此值时会使用默认值,如果填写以填写为准。注意:如果默认值的内容为字符串,必须加英文格式下的引号。
  • 外键(foreign【for 瑞】 key):一个表中的一个字段引用另一个表的主键。

作用:

  1. 主键的作用是为了保证数据表内的数据每一条的顺序是固定的,不会由于删除或增加数据,而导致数据乱序,需要注意的是:一般的在一张数据表中只需要有一个主键。为了使用方便,一般会设置成自动递增,并且是无符号。
  2. 还需要注意的是,主键的虽然是天然的不为空,但也要将自动递增和无符号这两个选项选上。
  3. 唯一的操作顺序:
    1. 唯一的作用是当前字段内的所有数据不能重复

4、MySQL数据库语法

4.1、在Navicat中如何MySQL语句

想要操作数据库,就在如图所示的位置上右键点击新建查询,如果想要操作数据表,则在相对应的数据库右键新建查询。

4.2、创建数据库

  • 语法格式

# 创建数据库create database 数据库名称 [charset] [字符编码] [collate] [校验规则];# 创建结果查看show create database 数据库名称
  • 举例说明

# 创建一个名称为python的数据库create database python charset=utf8 collate=utf8_general_ci;# 查看创建结果show create database python;

4.3、使用数据库

# 语法格式# 使用(打开)数据库use 数据库名# 查看当前使用数据库select database()# 举例说明#使用数据库use python

4.4、修改数据库

 # 语法格式alter database [数据库名]
[default] character set <字符集名>
[default] collate <校对规则名># 举例说明# 创建testpython数据库,字符集为gb2312create database testpython charset=gb232# 修改testpython的指定字符集修改为utf8mb4,默认校验规则为utf8mb4_general_cialter database testpythondefault character set utf8mb4default collate utf8mb4_general_ci

4.5、删除数据库

# 语法格式drop database 数据库名;# 举例说明drop database python;

4.6、数据库的其他操作

  1. 查看所有数据库: show database
  2. mysqldump -uroot -p 数据库名 > python.sql     再按照提示输入mysql的密码

4.7、关于命令的小总结

  • 创建是create
  • 使用是use
  • 修改是alter【奥特儿】
  • 删除是drop【抓普】

4.8.1、使用Navicat工具实现数据库的备份

4.8.1.1、存储数据库

要备份哪个数据库,就鼠标右键哪个数据库,点击转储SQL文件。

4.8.1.2、恢复数据库

4.8.1.3、应用场景

  1. 说明:在测试工作中,为了防止对数据库产生错误操作,或产生垃圾数据,都需要在操作前,适当对数据库进行备份操作。
  2. 垃圾数据:例如在自动化测试中,对注册模块操作生成的所有数据,属于典型的垃圾数据,应该清理。

4.8.2、命令备份数据库

  1. 注意: 命令是不需要连接到数据库以后执行的(非 mysql> 模式 ),也就是说,在虚拟机中用命令备份数据库,不需要用 mysql -u数据库用户名 -p数据库密码 进入数据库。
  2. 备份命令:mysqldump -u数据库用户名 -p 目标数据库名 > 备份文件.sql
  3. 还原命令:mysql -u数据库用户名 -p 目标数据库 < 备份文件名.sql

注意点:因为-p后面没有跟数据库密码,所以需要根据提示输入数据库密码,执行数据库的备份和还原操作。

4.9、数据表的操作

4.9.1、创建表

# 语法create table 表名(字段名 类型 约束,字段名 类型 约束...
)# 例子:创建名为 students 的学生表
# primary key 是主键的意思,主键自带不为空,所以此处不需要写not null
# auto_increment 自增长create table students{id int primary key auto_increment,name varchar(20),age int unsigned,height decimal(5,2)
}因用以上创建表语法,只能执行一次,所以一般用以下语法来创建表,即:drop table if exists 表名;
create table 表名(字段名 类型 约束字段名 类型 约束...
)drop table if exists 表名 的意思是:判断该表是否存在,若存在则删除。
exists:【伊克塞斯】

4.9.1.1、通过Navicat快速获取创表语句

之所以要获取创表语句,是因为会在代码中进行使用。

4.9.1.2、通过语句获取创表语句

语句: show create table 表名

4.9.2、查看表结构

表结构就是字段信息。

语法:desc 表名

在Navicat中可以鼠标右键“设计表”查看

在黑色窗口中查看表结构:

注意:黑色窗口中 show tables 和desc sutudents 一定一定要加分号,别问,问就是血泪史!!!

4.9.3、删除数据表

  • 语法1:drop table 表名;
  • 语法2: drop table if exists 表名;

4.10、数据操作

4.10.1、增加数据

增加一行数据

语法:insert into 表名 values(...)

into:【因特】,进入

注意

  • 数据值需要和表的字段一一对应(数据个数及数据类型)
  • 主键列是自动增长,插入时需要占位,通常使用 0 或者 default 或者 null 来占位,插入成功后以实际数据为准。

例子:insert into students values(0,'张三',28,1.78)

增加部分数据

语法:insert into 表名(字段1...) values(值1...)

注意:值的顺序与给出的字段顺序对应。

例子:insert into students(name,height) values('赵五',1.68)

增加多行数据

  • 方式1:将单行插入语句,多句执行,每句分号隔开。

    • 例子:

insert into students values(0,'王五',19,1.78);

insert into students(name,height) values('赵六',1.70);

  • 方式2:  在插入单行语句的语法基础上,将values后边的数据进行多组化处理。

语法1:insert into 表名 values(...),(...)

语法2:insert into 表名(列1,...) values(值1,...),(值1...)....

语法2中的列1就是字段的意思。

例子1:insert into students values(0,'王五1',29,1.78),(0,'王五2',30,188);

例子2:insert into students(name,height) values('赵六1',1.82),('赵六2',176);

4.10.2、修改数据

  • 语法:update 表名 set 列1=值1,列2=值2... where 条件
  • 注意:where 不能省略,否则会修改整列数据
  • 例子:update students set age=66 where id=9;

4.10.3、删除数据

  • 语法:delete from 表名 where 条件;
  • 注意:where 不能省略,否则会删除全部数据。
  • 例子:delete from students where id=6;

4.10.4、拓展1:逻辑删除

  1. 定义:对于重要的数据,不能轻易执行delete语句进行删除。因为一旦删除,数据无法恢复,这时可以进行逻辑删除。
  2. 步骤:
    1. 给表添加字段,代表数据是否删除,一般起名isdelete,0代表未删除,1代表删除,默认值是0。
    2. 当要删除某条数据时,只需要设置这条数据的isdelete字段为1。
    3. 以后在查询数据的时候,只查询出isdelete为0的数据。
  3. 逻辑删除的例子:       

4.10.5、拓展2:其他删除数据的方法

  • 删除方法1:delete from 表名;
  • 删除方法2:truncate【砖K特】 table 表名;
  • 删除方法3:drop table 表名;

三种方法的区别:

  1. delete from 表名:删除所有数据,但是不重置主键字段的计数,对应navicat的清空表。也就是说,即便删除了所有数据,其中的自增长字段也不会从1开始。
  2. truncate table 表名:删除所有数据,并重置主键字段的计数,对应navicat的截断表。
  3. drop table 表名:删掉表(字段和数据均不再存在),对应navicat的删除表。

4.11、查询操作【非常重要】

4.11.1、查询所有字段

# 语法select * from 表名;#例子:查询所有学生字段select * from students;

4.11.2、查询部分字段

# 语法select 字段1,字段2,... from 表名;# 例子:查询students表中name,ageselect name,age from students;

4.11.3、起别名

# 给表起别名,在多表查询中经常使用# 语法格式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 姓名, sex as 性别, age as 年龄 from students;

起别名的作用:

  1. 美化数据结果的显示效果。
  2. 可以起到隐藏真正字段名的作用。
  3. 除了可以给字段起别名外,还可以给数据表起别名(连接查询时使用)。
  4. 起别名时,别名的引号和as关键字可以省略。
-- 正式语法select goodsName as '商品名称' , price as '价格' from goods;-- 省略别名引号select goodsName as 商品名称 , price as 价格 from goods;-- 省略as关键字select goodsName  商品名称 , price  价格 from goods;

给表起别名例子结果:

给字段起别名例子:

4.11.4、去重

# 语法:select distinct 字段1,... from 表名;# 例子:# 查询所有学生的性别,不显示重复的数据。select distinct sex from students;

distinct【第四丁科特】:不同的。

例子:

表信息:

去重结果:

4.11.5、复杂查询

定义

在基础查询的基础上,根据需求描述关系进行查询。实际应用中,往往是多种复合查询的组合使用:

  1. 条件查询:按照一定的条件筛选需要的结果。
  2. 排序:按照一定的排序规则筛选所需结果。
  3. 聚合函数:对一组数据进行计算得到一个结果的实现方法。
  4. 分组:在同一个属性(字段)中,将值相同的放到一组的过程。
  5. 分页:对大批量数据进行设定数量展示的过程。
  6. 连接查询:将不同的表通过特定关系连接的过程。
  7. 自关联:将同一表通过特定关系连接的过程。
  8. 子查询:在一个查询套入另一个查询的过程。

4.11.5.1、条件查询

  1. 使用where子句对表中的数据筛选,符合条件的数据会出现在结果集中。where后面跟条件。
  2. 语法格式:select 字段1,字段2... from 表名 where 条件。
  3. where后面支持多种运算符,进行条件的处理,有:比较运算、逻辑运算、模糊查询、范围查询、空判断。

4.11.5.1-1、比较运算符

  1. 等于:=
  2. 大于:>
  3. 大于等于:>=
  4. 小于:<
  5. 小于等于:<=
  6. 不等于:!= 或 <>
-- 例1:查询小乔的年龄select age from students where name="小乔";-- 例2:查询20岁以下的学生select * from students where age < 20;-- 例3:查询家乡不在北京的学生select * from students where hometown != '北京';

4.11.5.1-2、逻辑运算符

  1. and(与)
  2. or(或)
  3. not(非)

注意:作为查询条件使用的字符串必须带引号!

4.11.5.1-3、模糊查询

  1. like,使用like关键字进行查询。
  2. %表示任意多个字符
  3. _表示任意一个字符

详情见下图

4.11.5.1-4、范围查询

  1. in 表示一个非连续的范围内,格式为in(...),相当于逻辑运算符的or
  2. between...and... 表示在一个连续的范围内
例1:查询家乡是北京或上海或广东的同学select * from students where hometown in('北京','上海','广东');例2:查询年龄是18至20的学生select * from students where age between 18 and 20;

注意:在MySQL中,只有显示为null的才是空,其余空白可能是空格/制表符(tab)/换行符(回车键)等空白符号。

4.11.5.1-5、空判断

  1. 判空:is null
  2. 判非空:is not null
  3. 注意:null与' ' 是不同的。

4.11.5.2、排序

为了方便查看数据,可以对数据进行排序。

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

  1. 默认按照列值从小到打排列
  2. asc从小到大排序,即升序
  3. desc从大到小排序,即降序
  4. 将行数据按照列1进行排序,如果某些行列1的值相同,则按照列2排序,以此类推。
  5. 注意:离 order by 关键字越近,排序数据的范围越大,权重越高。英文中order就是顺序的意思。

4.11.5.3、聚合函数

  1. 定义:对于一组数据进行计算返回单个结果的实现过程,使用聚合函数方便进行数据统计,聚合函数不能在where字句中使用。
  2. 常用聚合函数:
    1. count( )【康特】:查询总记录数。
    2. max( ):查询最大值。
    3. min( ):查询最小值。
    4. sum( ):求和。
    5. avg( ):求平均值。

4.11.6、分组

定义:按照字段分组,此字段相同的数据会被放到一个组中,分组的目的是对每一组的数据进行统计(使用聚合函数)。

4.11.6.1、语法格式

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;
  • group by的中文意思是:分组。
  • 一般情况下,使用哪个字段进行分组,那么只有该字段可以在 * 的位置处使用,其他字段没有实际意义。
  • 分组操作多和聚合函数配合使用。

4.11.6.2、分组后的数据筛选

4.11.6.2.1、语法格式

select 字段1,字段2,聚合... from 表名 group up 字段1,字段2,字段3... having 字段1,...聚合...

  • having后面的条件运算符与where的相同。
--例子1:查询男生总人数--方案1:使用whereselect count(*) from students where sex='男'--方案2:使用havingselect sex,count(*) from students group by sex having sex='男'

4.11.6.2.2、where和having的区别

  1. where是对from后面指定的表进行数据筛选,属于对原始数据的筛选。
  2. having是对group by 的结果进行筛选。
  3. having后面的条件中可以用聚合函数,where后面不可以。

4.11.7、分页

当数据量过大时,在一页中查看数据是一件非常麻烦的事情,在这个时候,就可以用到分页。

  • 语法格式:select * from 表名 limit start,count;
  • 从start开始,获取count条数据。
  • start索引从0开始。
  • 需要注意的是,计算机的计数是从0开始的,因此start默认的第一条数据是0,如果默认是从第一条数据开始获取,则0可以省略。start类似js中的下标,count类似于js中的length。
--例子:查询前3行的学生信息select * from students limlt 0,3;

4.11.7.1、分页格式(分页万能公式)

limit典型的应用场景就是实现分页查询。

已知:每页显示m条数据,求显示第n页的数据,那么语法如下:

select * from 表名 limit (n-1)*m,m

5、连接查询【非常重要】

5.1、定义

连接查询分为:内连接、左连接、右连接和自连接

当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回。

5.2、连接方式图解

5.3、内连接

5.3.1、语法格式

select * from 表1
inner join 表2 on 表1.列(字段)=表2.列(字段)

5.3.2、举例说明

需要注意的是,内连接中,可以是表起别名,这样做的目的是:1、缩短表名利于编写,2、用别名给表创建副本。

5.3.3、拓展:内连接的另一种写法(旧式写法)

1、语法格式:

select * from 表1 , 表2 where 表1.字段名=表2.字段名

2、例子:

5.4、左连接

5.4.1、语法格式

select * from 表1left join 表2 on 表1.列(字段名)=表2.列(字段名)

注意:如果要保证一张数据表的全部数据都存在,则一定不能选择内连接,可以选择左连接或者右连接。

说明:以 left join 关键字为界,关键字左侧表为主表(都显示),而关键字右侧的表为从表(对应内容显示,不对应为null)。

5.4.2、举例说明

5.5、右连接

5. 5.1、语法格式

select * from 表1right join 表2 on 表1.列(字段名)=表2.列(字段名)

说明:以 right join 关键字为界,关键字右侧表为主表(都显示),而关键字左侧的表为从表(对应内容显示,不对应为null)。

5.5.2、例子

6、左右连接存在的必要性

  1. 说明:能够体现左右连接必要性的场景为:至少三张表进行连接查询。

  2. 注意:实际工作中,最多也就三张表连接查询。

7、自关联

7.1、基本概念

  1. 前提:(1)、数据表只有一张。(2)、数据表中至少有两个字段之间有某种联系。
  2. 方式:通过给表起别名的形式,将原本只有一张的数据表变为两张,然后通过对应字段实现连接查询。

7.2、例子

8、子查询

8.1、子查询的基本概念

子查询:在一个select语句中,嵌入了另外一个select语句,那么嵌入的select语句称之为子查询语句。

主查询:外层的select语句称之为主查询语句。

8.2、主查询和子查询的关系

  • 子查询是嵌入到主查询中的。
  • 子查询是辅助主查询的,要么充当条件,要么充当数据源。
  • 子查询是可以独立使用的语句,是一条完整的select语句。

8.3、例子1:子查询充当条件

8.4、例子2:子查询充当数据源

三、数据库设计

1、E-R模型

数据库能够有效存储现实世界中有意义的数据,通过E-R图能够更加有效的模拟现实世界。

E-R模型的基本元素是:实体、联系和属性。

  1. E表示entry【恩吹】,实体:描述具有相同特征事物的抽象。
  2. 属性:每个实体的具有的各种特征称之为属性。
  3. R表示relationship【瑞雷神晒泼】,联系:实体之间存在各种关系,关系的类型包括一对一、一对多、多对多。

举例说明:

学生就是一个实体,其具有属性:学号、姓名、年龄、班级等。

学生与学生之间存在角色关系,组长和组员,他们之间有一对多的关系。

1.1、一对一

实体A对实体B为1对1,则在表A或表B中创建一个字段,存储另一个表的主键值。

1.2、一对多

实体A对实体B为一对多,在表B中创建一个字段,存储表A的主键值。

1.3、多对多

实体A对实体B为多对多,新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B主键值。

2、主键和外键

2.1、概念与介绍

主键 外键
作用 用来保证数据完整性 用来和其他表建议联系      
定义 唯一的标识一条记录,不能重复,不能为空 一表的属性是是另一表的主键,可以重复,可以为空
个数 一个表主键只能有一个 一个表可以有多个外键值

2.2、设置主键

语法格式:

在创建数据库表时,create table 中指定主键

字段名 数据类型 PRIMARY KEY

举例说明:

-- 创建班级表(班级编号、班级名称),以班级编号为主键create table class(id int unsigned primary key auto_incrementname varchar(10)
);

2.3、删除主键

语法格式:

alter table 数据表名 drop primary key;alter[欧特]:改变

 举例说明:

alter table class drop primary key;

2.4、设置外键

语法格式:

在创建数据库表中,create table 中设置外键

constraint 外键名 foreign key(自己的字段) references 主表(主表字段)constraint[肯思春特]:限制;限定;约束;严管foreign[佛瑞]:外国的references[瑞儿芬赛斯]:参考资料

 举例说明:

-- 创建学生表,以班级编号关联班级表create table students(name varchar(10),class_id int unsigned,constraint stu_fk foreign key(class_id) references class(id)
);

2.5、删除外键

语法格式:

alter table 表名 drop foreign key 外键名称;

 举例说明:

-- 删除表student的stu_ibfk_1外键alter table student drop foreign key stu_fk;

3、索引

3.1、索引概念

  1. 作用:提供查询排序的速度
  2. 定义:快速查找特定值的记录
  3. 个数:一个表主键只能有一个

3.2、设置索引

语法格式:

表已存在时创建索引

create index 索引名称 on 表名(字段名称(长度))

举例说明:

create index name_index on create_index(name(10));

3.3、删除索引

语法格式:

drop index 索引名称 on 表名;

举例说明:

drop index name_index on create_index;

4、外键和索引的综合说明

4.1、外键

  1. 说明:通过外部数据表的字段,来控制当前数据表的数据内容变更,以避免单方面移除数据,导致关联数据表数据产生垃圾数据的一种方法。
  2. 注意:如果大量增加外键设置,会严重影响除数据查询操作以外的其他操作(增/删/改)的操作效率,因此在实际项目中很少会被采用,但在面试中容易被问到。

4.2、索引

  1. 说明:可以大幅度提高查询语句的执行效率。
  2. 注意:如果大量增加索引设置,会严重影响数据查询以外的其他操作(增/删/改)操作效率,不方便过多添加。

四、MySQL学习感悟

  1. linux操作系统语法和MySQL一样,非常的语义化,单词意思和英文意思一样,这一点,英语好的同学记语法来应该会更快。
  2. MySQL相同类型语法之间的格式都相差不大,比如,创建都是create。
  3. 欢迎你的补充……

MySQL学习笔记[学习资料来源于B站黑马测试]相关推荐

  1. Python学习笔记(1)---B站黑马程序员

    Python学习笔记(1)-B站黑马程序员 Python学习笔记(2)-B站黑马程序员 Python学习笔记(3)-B站黑马程序员 文章目录 Linux基础 Python基础 一.Python介绍 0 ...

  2. Python学习笔记(3)---B站黑马程序员

    Python学习笔记(1)-B站黑马程序员 Python学习笔记(2)-B站黑马程序员 Python学习笔记(3)-B站黑马程序员 文章目录 五.项目实战--飞机大战 001-Pycharm中安装py ...

  3. html, css学习笔记,自用(B站黑马程序员pink老师)

    附上教学视频链接黑马程序员pink老师前端入门教程 该博文是自己随手记的上述视频笔记 跳转到css, p61 P18 <div> </div>一行一个,<span> ...

  4. c++学习笔记-二进制文件操作(哔站-黑马程序员c++教学视频)

    一.基本概念 以二进制的方式对文件进行读写操作 打开方式指定为  ios::binary 优点:可以写入自己定义的数据类型 1.写文件 二进制方式写文件:流对象调用成员write 函数原型:ostre ...

  5. JDBC学习笔记(1)---B站尚硅谷宋红康

    JDBC学习笔记(1)-B站尚硅谷宋红康 JDBC学习笔记(2)-B站尚硅谷宋红康 文章目录 软件架构方式介绍 JavaWeb技术概览 第1章:JDBC概述 1.1 数据的持久化 1.2 Java中的 ...

  6. JavaWeb学习笔记(5)-B站尚硅谷

    文章目录 十四.书城项目第三阶段--优化 (1)页面jsp动态化 (2)抽取页面中相同的内容 A.登录成功的菜单 B.base.css.jQuery标签 C.每个页面的页脚 D.manager模块的菜 ...

  7. 分享CFA学习笔记和资料!

    21年最新学习笔记和资料 复制这段内容后打开百度网盘App,操作更方便哦. 链接:https://pan.baidu.com/s/1GPukBzxG6fw8Hz5vyy_Aiw 提取码:rv5r–来自 ...

  8. python自训练神经网络_tensorflow学习笔记之简单的神经网络训练和测试

    本文实例为大家分享了用简单的神经网络来训练和测试的具体代码,供大家参考,具体内容如下 刚开始学习tf时,我们从简单的地方开始.卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第 ...

  9. 【QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)】

    [QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)] 1.说明 2.实验环境 3.参照学习链接 4.自己的学习与理解 5.学习与实践代码. (1)建立基础工程. (2)加入绘图事 ...

  10. FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇尾

    FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇一 FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇二 ...

最新文章

  1. Electron的代码调试
  2. 【MATLAB】基本绘图 ( 绘制多图 | 设置图形对话框在 Windows 界面的位置和大小 | 在一个图形上绘制多个小图形 )
  3. 《深入理解Elasticsearch》读书笔记
  4. MySQL内连接方法_Mysql常用的几种join连接方式
  5. 673. Number of Longest Increasing Subsequence
  6. springboot pom.xml实战(com.mchange与c3p0配置)
  7. ETF最神秘的地带:清算交收(背景知识篇)
  8. 【Prescan学习】Prescan环境配置(介绍+安装+学习资源)
  9. js运算符优先级问题
  10. Android 最最最简单的浏览器代码
  11. 经纬度坐标转换xy坐标 python_Python 高斯坐标转经纬度算法
  12. 网络安全:ARP和IP协议
  13. 心情随笔(一):五月随笔满满的正能量
  14. Win10连接上了wifi,但显示Internet无网络访问权限的解决方法
  15. android 地图选房效果,概述-Android 室内地图SDK | 高德地图API
  16. Excel文件已损坏无法打开
  17. springboot毕设项目老年教育学习系统fte91(java+VUE+Mybatis+Maven+Mysql)
  18. 亲密数对(3~3000)
  19. 网站被恶意镜像怎么办?
  20. 开发 Django 博客文章阅读量统计功能

热门文章

  1. 【供应链架构day7】美团供应链的架构之道:O2O关键战场在供给端
  2. 基于wifi的物联网技术,主要有哪些优势?
  3. 《JAVA 技术》第二次作业
  4. 【论文阅读笔记】Beamforming Optimization for Wireless Network Aided by IRS with Discrete Phase Shifts
  5. ios 越狱后常见的源添加
  6. 全民小镇ios越狱用户叉叉助手辅助刷金币攻略
  7. 男女逗段,瞅瞅有没有说到你
  8. ASP页面中文乱码,已解决!!
  9. 鹏业安装算量软件按桥架快速布线
  10. 任务态fMRI的实验设计方法及注意事项有哪些?—重温经典文章的点滴思考