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

2023-11-08

目录

一、数据库的基本知识

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数据库,字符集为gb2312
    
    create database testpython charset=gb232

    # 修改testpython的指定字符集修改为utf8mb4,默认校验规则为utf8mb4_general_ci

    alter database testpython
    default character set utf8mb4
    default 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,age

select 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:使用where

select count(*) from students where sex='男'


--方案2:使用having

select 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 表1

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

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

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

5.4.2、举例说明

5.5、右连接

5. 5.1、语法格式

select * from 表1

right 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_increment
    name 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. 欢迎你的补充……
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • (C语言)指针初识(1)——指针概念及指针类型

    指针 看似是一个令人头疼的问题 静下心来慢慢学习 指针这个主题 分成了几个的板块 比较多 耐心看完 一定会有收获啦 慢慢来 总是需要一个循序渐进的过程 目录 一 什么是指针 二 指针和指针类型 指针类型的意义 结论1 结论2 一 什么是指针
  • vue 和 react的对比

    vue 比react的优缺点 对比1 github 全球开发者星星点赞数量 此数据结果摘取于 2021年3月份 结论 vue 胜出 尤雨溪一个人撑起一个生态 战胜高手林立的巨头公司facebook 相当的传奇 对比2 React VS Vu
  • easyrecovery2023永久免费版激活密钥,手把手教您用EasyRecovery快速恢复数据

    Ontrack EasyRecovery Crack Professional是一个全面的备份和恢复实用程序 可以从多个数据丢失事件中恢复文件 例如常见的意外删除 更严重的 有时是病毒引起的 分区或驱动器格式化 甚至硬盘严重损坏后的数据丢失
  • 阿里Java代码规范

    代码规范 一 编程规约 一 命名风格 二 常量定义 三 代码格式 四 OOP 规约 五 集合处理 六 并发处理 七 控制语句 八 注释规约 九 其它 二 异常日志 一 异常处理 二 日志规约 三 单元测试 四 安全规约 五 MySQL 数据
  • YAML用法详解

    1 简介 YAML YAML Ain t Markup Language j m l 设计目标是方便人类读写 它实质上是一种通用的数据串行化格式 远比 JSON 格式方便 1 1 它的基本语法规则如下 大小写敏感 使用缩进表示层级关系 缩进
  • Spring Cloud之LB-Ribbon调用流程和源码分析(二)

    接着上面的一篇关于Spring Cloud之Open Feign调用流程和源码分析 解析feign在rpc调用的时候lb的组成及底层工作流程 关键组件介绍 ServerList 可以响应客户端的特定服务的服务器列表 ServerListFi
  • python多进程multiprocessing使用,看这篇就够了(二)

    1 上篇都是直接创建Process对象来创建子进程 其实还可以通过继承来创建子进程 来看看Process源码 可以通过承继Process 重写run方法来启动子进程 因为对一个不包括target属性 即当target None时 的Proc
  • C语言栈与队列知识,C语言数据结构基础学习笔记——栈和队列

    之前我们学过了普通的线性表 接下来我们来了解一下两种特殊的线性表 栈和队列 栈是只允许在一端进行插入或删除的线性表 栈的顺序存储结构也叫作顺序栈 对于栈顶指针top 当栈为空栈时 top 1 当栈为满栈时 top MaxSize 1 顺序栈
  • html当鼠标离开时触发事件,html中在鼠标指针移动到元素外时触发的事件属性onmouseout...

    实例 当鼠标指针移动到图像之外时执行一段 JavaScript 浏览器支持 IE Firefox Chrome Safari Opera 所有主流浏览器都支持 onmouseout 属性 定义和用法 onmouseout 属性在鼠标指针移动
  • C++实现——任意进制之间的转换

    include
  • 独孤九剑第七式-物以类聚 人以群分(K-means模型)

    文章适合于所有的相关人士进行学习 各位看官看完了之后不要立刻转身呀 期待三连关注小小博主加收藏 小小博主回关快 会给你意想不到的惊喜呀 各位老板动动小手给小弟点赞收藏一下 多多支持是我更新得动力 文章目录 前言 K means模型讲解 K
  • sparkstreaming读取文件读取不到数据

    今天用了下sparkstreaming读取hdfs文件或本地目录文件 发现文件内容一直不会被处理 使用了下面两种方法都不行 阅读源码并开启DEBUG后发现 textFileStream后面也是调用fileStream方法 并且newFile
  • make时遇到File `Makefile' has modification time 4e+04 s in the future的解决办法

    1 原因 是虚拟机时间和电脑时间不匹配造成 2 解决办法 在VMware 菜单虚拟机 M gt 设置 S gt 选项下设置开启时间同步 然后重启虚拟机 3 若还出现 warning Clock skew detected Your buil
  • 对Unity中的欧拉角的理解

    前言 欧拉角对人来说是十分直观的 很适合人机交互中 但不适用于插值和迭代 在说到欧拉角时有两点非常重要 旋转方式和旋转顺序 旋转方式 首先要区分每次旋转是绕固定轴旋转的 还是绕旋转之后的轴旋转的 绕固定轴旋转就是旋转过程中XYZ轴不变 绕旋
  • android自定义可缩放,移动图像裁剪框

    在实际项目中 经常要制作一个简易的图像裁剪功能 即获取一张图片 并用一个遮罩层选择目标范围并截取保存的功能 如下图所示 在此分享下该自定义视图的制作过程 需求说明 整一个视图包含一个透明的遮罩层 一个透明带白色边框的矩形 要实现的功能是 点
  • 代理IP与网络安全:保障跨境电商和游戏的顺畅运行

    在今天的数字时代 跨境电商和在线游戏已经成为全球互联网经济的两个重要组成部分 然而 这两者都需要强大的网络基础设施来支持其运行 同时 网络安全问题也变得愈发突出 在这个背景下 代理IP技术以及特别是Socks5代理协议 成为了网络工程师们重
  • react-router 5 管理路由

    实现功能 全局路由统一管理 支持配置路由重定向 路由懒加载 自定义meta字段等 全局路由拦截 支持读取路由meta配置 支持拦截跳转其他路由等 依赖版本 react 17 0 2 react router dom 5 3 0 react
  • 老杜:分享Java零基础小白学习方法和Java学习路线 课程笔记

    微信 https mp weixin qq com s muWNq6A6GjpM2rHxKo6FOA 一 学习前的准备 1 一个好的学习方法 合格程序员需要具备两个能力 指法速度 左手ASDF 右手JKL 形成肌肉记忆 编程思想 编程思想的
  • 关掉\禁用win7自动配置ipv4地址的方法 默认网关自动消失的解决办法

    转载自 http blog csdn net zouqin369 article details 6913692 今天去公司设置好IP后 无论怎么样都上不了internet 再次打开本地后发现默认网关自动消失 cmd下输入ipconfig后
  • MySQL学习笔记[学习资料来源于B站黑马测试]

    目录 一 数据库的基本知识 1 数据库概念 2 常见的数据库分类 1 当前主要使用的两种类型数据库 2 关系型数据库 3 非关系型数据库 二 SQL基本知识 1 SQL介绍 2 SQL语言的分类 三 MySQL基本知识 1 MySQL介绍