Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

目录

1.基本的SELECT语句

 1.1 查询表中特定字段

1.2 字段取别名 

 1.3 数据去重

  1.4 数据空值替换

 1.5 显示表的结构

 1.6 条件查询where

 2.算术运算符

3.比较运算符

要注意一点 不要让null参与比较运算 

 3.1非符号类型的运算符

 3.2 最大最小运算

 3.3 between…and…

 3.4  noot between…and…

3.5 in 、not in

 3.6 模糊查询 like 

3.7 转义字符

4.逻辑运算符 

 4.2 优先级

5.排序与分页

5.1 排序规则

5.2分页

 6. 多表查询

6.1表去取别名 

6.2 多表查询的分类

6.2.1 等值连接和非等值连接

6.2.2 自连接,非自连接

 6.2.3 内连接和外连接

7.单行函数

 7.1日期函数的的运用

 7.2日期与时间戳的转换

7.3获取月份、星期、星期数、天数等函数

 7.4 日期格式化和解析

 7.4流程控制函数

 8.聚合函数

8.1 AVG和SUM函数

8.2 MIN和MAX函数

8.3 COUNT函数

8.3 GROUP BY

8.4HAVING

9.子查询

9.1单行子查询

9.2多行子查询

 9.3子查询的其他应用场景

9.4相关子查询

我们发现子查询可以嵌套在很多关键字和函数中我们总结一下

10.EXISTS 与 NOT EXISTS关键字

11.创建数据库

11.1数据库管理

11.2删除数据库

12 创建数据表

12.1创建表

12.2基于现有的表,同时导入数据

12.3 新创建的表的字段的名称基于别名。

​编辑

 12.4表的复制

​编辑

12.5修改表

13.数据处理之增删改

 13.1 单行插入数据

 13. 2 多行插入数据

 13. 3 修改数据

 13. 4删除数据

13.5mysql8新特性计算

数据库材料sql语句


这次选用8.0.26的数据库和Navicat Premium 15作为图像化工具

1.基本的SELECT语句


*代表这个表的全部字段 ,employees表示数据源自那个表

结果

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 1.1 查询表中特定字段


注意每个字段要用英文的,隔开

结果

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

1.2 字段取别名 

可以在字段后面

  • {字段}as {别名}
  • {字段} {别名} (中间有空格)
  • {字段} “别名” (中间有空格,不要用单引号)

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 1.3 数据去重

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 这样查询我们发现会有很多重复的记录


这样就取出重复数据

  1.4 数据空值替换

空值:null 不等同 0和“ ”

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

我们的comm.._ptc(工资增长率)这个字段是有空值和数字的

假如我们计算一个员工一年的的工资 


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 我们发现有的是空有的是有值这个时候我们要替换空的值IFNULL(commission_pct,0)如果这个字段为空我们替换为0


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 1.5 显示表的结构

或者DESC {表名}

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 1.6 条件查询where


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 2.算术运算符

这里比较简单介绍一下即可

加减运算

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 乘除运算Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

取模 

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

3.比较运算符

要注意一点 不要让null参与比较运算 

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

        等号运算符(=)判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回 0。

        在使用等号运算符时,遵循如下规则: 如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的 是每个字符串中字符的ANSI编码是否相等。 如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。 如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。 如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。

        对比:SQL中赋值符号使用 :=

        如果不可避免null参与运算,我们要引用<=>这个可以判断null的值

!=null,=null、 <=>null案例

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 3.1非符号类型的运算符

        在上面的案例讲到和null做运算会有很多不必要的麻烦,然而我们只可以用<=>查询等于空的值我们不能用!=查询不等于的空的值,并且也没有!<=>运算。那我们怎么来查询非空值

        这样我们要了解比较运算符返回的机制


所以我们可以这样查询非空值

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

除此之外我们还可以用函数

ISNULL()

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

is not null

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 3.2 最大最小运算

least() 最小运算

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 greatest()最大值运算

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 3.3 between…and…


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 等价


 3.4  noot between…and…


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

等价


3.5 in 、not in

        假设我们要查询 工资等于 3000 6000 5000的数据按照上述的方式

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

会比较长,我们可以这样替代


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

not in 用法相同意思不同 

 3.6 模糊查询 like 

        语法规则 {字段}like ‘%a%’  

表示查询字段带有a的数据 %表示模糊方向,举个例子,%在a前面表示不管a前面有什么都可以,也就表示查询最后一个字母是a的数据

案例演示


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 假如我我们需要查询第二个字母为a的我们要怎么查询这里我们就要引入下划线_占位的概念

几个下划线表示占几位

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

这样就查到第三个字符为a的数据 

3.7 转义字符

沿用上面的例子我们需要查询一个数据包含 _a的字符怎么办呢。这个时候我们要在 _前面加上让系统知道你的后的字符是普通字符串不是系统的表示方式

错误案例

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 自定义转义字符


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 我们自己规定*号是转义字符,需要ESCAPE设定

4.逻辑运算符 

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

上面的案例以及涉及到了这里就不详细记录了。

and同时满足

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

or满足一个

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 xor表示不满足两边的的条件其中一个,这个用的比较少

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 4.2 优先级

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 数字编号越大,优先级越高,优先级高的运算符先进行计算。可以看到,赋值运算符的优先级最低,使 用“()”括起来的表达式的优先级最高

5.排序与分页

5.1 排序规则

使用 ORDER BY 子句排序

ASC(ascend): 升序

DESC(descend):降序

ORDER BY 子句在SELECT语句的结尾。

在这我们就强调一下书写的格式,有下列语句

SELECT xxxx,x1x1x1

FROM yyyy

WHERE z=78

ORDER BY

这这样的格式下执行的顺序是,先执行where->from->select->order by 所以我们要注意,在select中取得字段别名是可以运用的到where语句中 的但是可以在order by使用

  • 升序

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

  •  降序

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)​​​​​​​

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 二级排序

先按部门升序排列,在排列好的部门顺序下安装工资降序排列


 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

5.2分页

用limit page,size关键字实现

需求:每页显示5条记录,当前第1页

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

需求:每页显示5条记录,当前第2页 

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

如果不设置分页查询的结果是

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 我们观察分页查询的规律,发现它的原理是将所有的数据根基每页size做分组

但是你的page是你的开始地址,相当于程序在你的起始地址做分组,起始地址开始往后的每个size作为一个页数,这样就得出了一个分页公式

LIMIT (page-1)*size,size


查询工资大于6000降序排序让后5行作为一页

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 mysql 8.0之后 limit x,y等价于 limit y offset x

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 6. 多表查询

  • 错误示范

假设我们要查员工表的员工所在部门的名称

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 我们的一共的数据只有107个员工 但是查询的结果有2000+条明显是错误的

因为这种查询方式是自然连接(理论知识详细了解的小伙伴可以去搜一下)笛卡尔积运算

所以这样认定一个employee_id的记录和dep表做连接,一个employee_id的记录就会延伸出多个

employee_id*N。N是dep表的记录数量。

  • 正确 

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

这下就正确了,因为有个员工不属于任何部门所以只有106条数据 ,我们只需要获取employee_id和dep做链接的 dep_id相同的数据。

值得注意的一点

当我们的2个表都有一个相同的字段的时候,就是一个表1的属性作为表2的外码,对于这个同时拥有的属性表表计来自那个I表


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

6.1表去取别名 

        属性可以取别名顾名思义表也是可以取别名的,方式也是相同的(尽量还是英文名称)。

这样sql语句看起来就比较简洁了。如果给表取了别名那么 在select和wehere就必须使用这个别名

案例:查询员工的编号部门名称和城市地址


6.2 多表查询的分类

6.2.1 等值连接和非等值连接

  • 等值连接就是我们前面的例子讲到的
  • 非等值连接

案例,我们要查一个员工的工资处于什么的样子的水平


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

6.2.2 自连接,非自连接

非自连接我们上述的案例有2 张不同表的查询就是非自连接

自连接的意思就是在同一张表做查询互相连接

案例,查询员工表中,一个员工的id和姓名,并且查询对应上司的id和姓名。上司也是员工故他们是一张表的信息


我们在查询表的时候都是来源一个employees 一个取名emp,和manger这样就相当于2个表

让后根据连接条件吧这个查询到的表做连接,一定要取别名

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 6.2.3 内连接和外连接

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

内连接: 合并具有同一列的两个以上的表的行, 结果集中不包含一个表与另一个表不匹配的行(图中黄色部分)

外连接: 两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的 行 ,这种连接称为左(或右) 外连接。没有匹配的行时, 结果表中相应的列为空(NULL)。

如果是左外连接,则连接条件中左边的表也称为 主表 ,右边的表称为 从表 。(黄色+黑色部分)

如果是右外连接,则连接条件中右边的表也称为 主表 ,左边的表称为 从表 。(黄+红色部分)

  • 左外连接

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 这样就会查询到d表为空的记录。

  • 右外连接
  • 
    

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

案例dome

显示所有员工的姓名,部门号,部门名称。

因为出现了所有的提示所以员工表需要查询所有的员工因此要引入外连接


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

案例:选择所有有奖金的员工,查询名称,部门名称,城市id,和城市


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

7.单行函数

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 7.1日期函数的的运用

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 7.2日期与时间戳的转换

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

7.3获取月份、星期、星期数、天数等函数

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 7.4 日期格式化和解析

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

  •  格式化

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 7.4流程控制函数

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 练习2
查询部门号为 10,20, 30 的员工信息, 
若部门号为 10, 则打印其工资的 1.1 倍, 
20 号部门, 则打印其工资的 1.2 倍, 
30 号部门打印其工资的 1.3 倍数、


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 练习:查询员工工作的天数,按照年数排序


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 8.聚合函数

8.1 AVG和SUM函数


 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

8.2 MIN和MAX函数


 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

8.3 COUNT函数


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

8.3 GROUP BY

 得出每个部门的平均工作


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

  得出每个部门的每个工种的平均工作


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 注意!如果有多个查询字段做分组 group by要详细指明做分组的所有字段。

案例:查询给个工种的人数


8.4HAVING

1. 行已经被分组。

2. 使用了聚合函数。

3. 满足HAVING 子句中条件的分组将被显示。

4. HAVING 不能单独使用,必须要跟 GROUP BY 一起使用。

案例:查询各个部门中最高工资比10000高的部门信息


要求:如果过滤条件中使用到聚合函数,则必须使用having替代where

               having声明在group by后面 

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 案例, 查询部门id为 10 20 30 40的这几个部门工资比10000高的部门信息


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 我们发现2种方式都是可以的

WHERE和HAVING的对比

区别1:WHERE 可以直接使用表中的字段作为筛选条件,但不能使用分组中的计算函数作为筛选条件; HAVING 必须要与 GROUP BY 配合使用,可以把分组计算的函数和分组字段作为筛选条件。 这决定了,在需要对数据进行分组统计的时候,HAVING 可以完成 WHERE 不能完成的任务。这是因为, 在查询语法结构中,WHERE 在 GROUP BY 之前,所以无法对分组结果进行筛选。HAVING 在 GROUP BY 之 后,可以使用分组字段和分组中的计算函数,对分组的结果集进行筛选,这个功能是 WHERE 无法完成 的。另外,WHERE排除的记录不再包括在分组中。

区别2:如果需要通过连接从关联表中获取需要的数据,WHERE 是先筛选后连接,而 HAVING 是先连接 后筛选。 这一点,就决定了在关联查询中,WHERE 比 HAVING 更高效。因为 WHERE 可以先筛选,用一 个筛选后的较小数据集和关联表进行连接,这样占用的资源比较少,执行效率也比较高。HAVING 则需要 先把结果集准备好,也就是用未被筛选的数据集进行关联,然后对这个大的数据集进行筛选,这样占用 的资源就比较多,执行效率也较低。

9.子查询

9.1单行子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询

案例:查询工资大于149号的员工工资的信息


我们在里面的查询中先查询149号员工的工资

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

案例:返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 案例:查询最低工资大于110号部门最低工资的部门id和其最低工资


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 案例:

显式员工的employee_id,last_name和location。
其中,若员工department_id与location_id为1800的department_id相同,
则location为’Canada’,其余则为’USA’。


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

9.2多行子查询

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

案例  查询 每个部门最低工资的员工号和员工姓名(in)


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

案例:(any)

返回其它job_id中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 
题目:(all)

返回其它job_id中比job_id为‘IT_PROG’部门所有工资低的员工的员工号、姓名、job_id 以及salary


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 9.3子查询的其他应用场景

由于我们的聚合函数是不可以嵌套的,所以我们得要用到子查询

案例:查询平均工资最低的部门id

错误示范


正确


9.4相关子查询

如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件 关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为 关联子查询 。 相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。

案例:查询员工中工资大于本部门平均工资的员工的last_name,salary和其department_id


 我们把外部查询的表e1嵌入到子查询

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 方式2


#题目:查询员工的id,salary,按照department_name 排序


我们发现子查询可以嵌套在很多关键字和函数中我们总结一下

结论:在SELECT中,除了GROUP BY 和 LIMIT之外,其他位置都可以声明子查询!
/*
SELECT ….,….,….(存在聚合函数)
FROM … (LEFT / RIGHT)JOIN ….ON 多表的连接条件 
(LEFT / RIGHT)JOIN … ON ….
WHERE 不包含聚合函数的过滤条件
GROUP BY …,….
HAVING 包含聚合函数的过滤条件
ORDER BY ….,…(ASC / DESC )
LIMIT …,….
*/

案例:查询平均工资最低的部门信息


10.EXISTS 与 NOT EXISTS关键字

关联子查询通常也会和 EXISTS操作符一起来使用,用来检查在子查询中是否存在满足条件的行。 如果在子查询中不存在满足条件的行: 条件返回 FALSE 继续在子查询中查找 如果在子查询中存在满足条件的行: 不在子查询中继续查找 条件返回 TRUE NOT EXISTS关键字表示如果不存在某种条件,则返回TRUE,否则返回FALSE。

案例:

查询公司管理者的employee_id,last_name,job_id,department_id信息


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 案例

查询departments表中,不存在于employees表中的部门的department_id和department_name


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

11.创建数据库


11.1数据库管理


11.2删除数据库


12 创建数据表

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

12.1创建表


12.2基于现有的表,同时导入数据


12.3 新创建的表的字段的名称基于别名。


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 12.4表的复制

  •         基于上面的12.2只要我们对于原表查询他的所有字段等同于复制结构+数据
  • 仅仅复制结构

我们只需要在查询的条件中设置原表不存在where条件但是查询所以的字段


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

12.5修改表


#7. DCL 中 COMMIT 和 ROLLBACK
# COMMIT:提交数据。一旦执行COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚。
# ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。

#8. 对比 TRUNCATE TABLE 和 DELETE FROM 
# 相同点:都可以实现对表中所有数据的删除,同时保留表结构。
# 不同点:
#    TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
#    DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚的。

/*
9. DDL 和 DML 的说明
  ① DDL的操作一旦执行,就不可回滚。指令SET autocommit = FALSE对DDL操作失效。(因为在执行完DDL
    操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影响的。)
  
  ② DML的操作默认情况,一旦执行,也是不可回滚的。但是,如果在执行DML之前,执行了 
    SET autocommit = FALSE,则执行的DML操作就可以实现回滚。

*/

演示


13.数据处理之增删改

新建一个数据表

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 13.1 单行插入数据

方式1

注意我们的插入的值的对应属性顺序要和表的顺序一致


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

方式2

不用安装表的顺序,只需要按照我们()里面规定的顺序即可并且可以缺省非主键属性


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 13. 2 多行插入数据


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 基于现有的表复制到新表


Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 说明:domo1表中要添加数据的字段的长度不能低于employees表中查询的字段的长度。
如果domo1表中要添加数据的字段的长度低于employees表中查询的字段的长度的话,就有添加不成功的风险。

简而言之,就是接收数据的表的属性长度要大于等下数据源的表的字段shu

 13. 3 修改数据

指定修改id=8的时间


批量修改


 13. 4删除数据


13.5mysql8新特性计算

声明一个新的表


插入数据


查看结果

Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)

 虽然我们只添加了a,b字段但是会自动帮我合成c字段

数据库材料sql语句


14.数据库的约束

      数据库的约束分为2大类:表级约束 和 列级约束。

主要有以下的6种:

NOT NULL
非空约束,规定某个字段不能为空
UNIQUE
唯一约束

规定某个字段在整个表中是唯一的
PRIMARY KEY
主键
(
非空且唯一
)
约束
FOREIGN KEY
外键约束
CHECK
检查约束
DEFAULT
默认值约束

14.1 非空约束

        限定某个字段不能为空。

  • 特点:
  1. 空字符串不等于null,0也不等null.
  2. 一个表可以很多列都分限定了非空。
  3. 非空约束只能出现在表的对象的列上,只能某个单列单独限定非空。
关键字:NOT NULL
  • 添加方式:

建表的时候添加


建表后添加


删除非空约束


14.2 唯一性约束

        允许出现多个空置,但是不允许重复。

关键字:UNIQUE

  • 特点:
  1. 同一个表可以有多个唯一约束。
  2. 唯一约束可以是某一列的值唯一,也可以多个列祝贺的唯一值。
  3. 唯一性约束允许列值为空。
  4. 创建唯一约束的时候,不命名唯一约束默认和列名相同。
  5. Mysql会给唯一约束的列上默认创建一个唯一索引。

创建表的时候添加唯一性约束


建表后


删除唯一约束


14.3 主键约束

        用来唯一标识表中一条记录。

关键字:primary key

  • 特点:
主键约束相当于
唯一约束
+
非空约束的组合
,主键约束列不允许重复,也不允许出现空值。
一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别上创建。
主键约束对应着表中的一列或者多列(复合主键)
如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
MySQL
的主键名总是
PRIMARY
,就算自己命名了主键约束名也没用。
建表的时候:

14.4 复合主键


14.5 FOREIGN KEY 约束

限定某个表的某个字段的引用完整性。
比如:员工表的员工所在部门的选择,必须在部门表能找到对应的部分。

关键字:FOREIGN key
  • 主表和从表/父表和子表
主表(父表):被引用的表,被参考的表
从表(子表):引用别人的表,参考别人的表
例如:员工表的员工所在部门这个字段的值要参考部门表:部门表是主表,员工表是从表。
例如:学生表、课程表、选课表:选课表的学生和课程要分别参考学生表和课程表,学生表和课程表是 主表,选课表是从表。

  • 特点
从表的外键列,必须引用
/
参考主表的主键或唯一约束的列
创建
(CREATE)
表时就指定外键约束的话,先创建主表,再创建从表
删表时,先删从表(或先Navicat Premium 8.1.12激活删除外键约束),再删除主表
  • 添加外键约束

今天的文章
Navicat Premium 8.1.12激活(mysql 8.0.26学习笔记超详细入门到精通)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/114883.html

(0)
编程小号编程小号
上一篇 2024-07-21
下一篇 2024-07-21

相关推荐