mysql核心知识点总结3

在上篇文章中,我们介绍了DQL语言,接下来我们学习DML语言(数据操纵语言)

插入语句

方式一:语法

insert into 表名称(字段名) values(和字段名相对应的值);

特点

插入的值的类型要和列的类型一致或者兼容.
列的顺序在插入的时候也是可以调换的
列的个数和值的个数必须是保持一致的.
如果表的列数过多,我们在插入数据的时候怕麻烦,是可以对列名进行省略的,默认使用所有列名,所以我们插入的数据也应该包含所有列的值.而且数据的顺序应该和列的顺序是相对应的
如何在设计表的时候,列属性是可以为null的,那么我们在插入数据的时候,该列就可以不写.
总结出一句话就是,不可以为null的列时必须要插入数据的,可以为null的列,我们可以插入空值,也可以列和数据都不写,默认插入的也是null.

方式二:语法

insert into 表名 set 列名=值,.......;

两种方式大PK

方式一支持一次插入多行,而方拾二是不支持的
方式一支持子查询,方拾二也是不支持的.相当于把查询语句的结果集插入

在这里插入图片描述
总结:方式一支持的功能更多,所以方式一使用的也是比较多的

修改语句

如果更新的列时字符或日期类型,值一定要用单引号括起来.多个列之间是用逗号进行分隔.

1,修改单表的记录

语法:update 表名 set 列名=值,列名=值,… where 筛选条件
在这里插入图片描述

2.修改多表的记录(也称为是级联更新)

在这里插入图片描述

删除语句

单表的删除:
方式一语法:delete from 表名 where 筛选条件 如果不加筛选条件的话,会把整张表删除.
方拾二语法:truncate table 表名它不能添加where和筛选条件,所以是删除整张表
注意:

如果要删除的表中含有自增的字段,如果使用delete删除之后,那么继续插入数据,自增字段的值会从**断电**开始,而使用truncate删除后,则会从1开始.
truncate删除是没有返回值的,但是delete是有的
truncate删除是不能回滚的,而delete是可以的.

多表的删除:
在这里插入图片描述
在这里插入图片描述
注意:truncate语句后面是不能添加where的,所以如果使用truncate删除就会把一张表进行全部的删除,也被称为是清空,

数据定义语言(DDL : data define language)

该语言只要包含了两个部分,分别是对库和表的管理(创建,修改,删除).
创建:create
修改:alter
删除:drop
语法如下:

create table if not exits 库名称:创建一个数据库(if not exits主要是增减容错率)
alter database 库名称 character set 字符集 :修改制定库的字符编码
drop database  if exits 库名称: 删除指定库
库的修改一般使用的比较少.

在这里插入图片描述
在这里插入图片描述

mysql的数据类型

总的来说,mysql中常用的数据类型总共包含3大类

数值型:
		整数
		小数:
				定点数
				浮点数
字符型:
		较短的文本:char  varchar
		较长的文本:  text    blob(常用来存储较长的二进制数据,例如图片等)
日期型:

在这里插入图片描述
有符号和无符号的区别就是,

无符号的下线是从零开始的,而有符号的包含负数,默认的整形字段都是有符号的,我们可以使用关键字**unsigned**来改成无符号的.
如果插入的值超过了整型的范围,那么会出现out of  range 异常,然后默认插入的就是临界值.
如果我们在创建表的时候,没有给整型字段设置长度,也是可以的,因为有默认长度,无符号的默认长度是10,有符号的是11.
长度代表了显示的最大宽度,如果不够会在左侧使用填充,但是必须要搭配zerofill使用

在这里插入图片描述
特点:

M:代表的是 整数 + 小数  的总位数
D 代表的是 小数点之后的位数.如果插入的值查过范围,则默认插入的是临界值.
M和D都是可以省略的在创建字段的时候,其中double和flout都是没有值的,会根据插入 数值的精度来决定精度,但是decimal默认值分别是10和0.
定点型的数据的精度较高,如果要求插入的数据精度比较高,例如货币的运算等则考虑使用 .

这么多的数据类型,我们 应该如何进行使用呢,选取的原则有一个,就是越简单越好,能保存数值的类型越小越好.

在这里插入图片描述
枚举类型:

在这里插入图片描述
set(集合类型):它和枚举类型的唯一的区别就是枚举一次只能匹配一个值,而set可以匹配多个值.二者的相似之处就是不区分大小写.
在这里插入图片描述

常见的约束

约束:是一种限制,主要是用来限制表中的数据.例如修饰在字段上的约束,就是为了保证我们表中数据的准确和可靠性.

分类:常见的约束主要可以分为6大类:

非空约束:not null 用来保证该字段的值不能为空
默认约束:default 用来保证该字段有默认值
主键约束:primary key 用于保证该字段的值具有唯一性 ,并且是非空
唯一约束:unique 用于保证该字段的唯一性,但是是可以为空的
检查约束:check 注意,mysql中是不支持check的.
外键约束:foreign key 用于限制两个表的关系,用来保证该字段的值,必须来源于主表中关联列的值.

添加约束的实际:在创建表或者是修改表时.
约束的添加分类:

列级约束:6大约束在语法上都支持,但是外键约束是没有效果的.
表级约束:除了非空和默认约束,其他的都支持.
如何添加约束

列级约束:
注意:show index from 表名称 :是用来查看表的索引的.( 傲寒主键外键和唯一,以及后来我们自己创建的索引)
列级约束总结:

列级约束在创建表的时候,直接在字段的后面添加就行,但是不支持check 支持primary key,但是是没有效果的.

表级约束:

主键和唯一的大对比.

在这里插入图片描述
在这里插入图片描述
auto_increment:可以用来设置一个列为自增长列,也称为是标识列.
show variables like ‘%auto_increment%’:该命令可以用来设置我们系统的增增长的属性(包含起始值,还有偏移量),但是在mysql中不支持设置起始值,只可以设置步长offset.例如:set auto_increment_increment= 2.
在这里插入图片描述
特点:

标识列比一定非要和主键一起搭配着使用,但是硬顶要和key搭配
一个表中之多有一个标识列
标识列的 类型只能是数值型.,一般是int
表示列可以通过 set auto_increment_increment
TCL语言(transaction control language 事务控制语言)

事务:一个或者是一组SQL语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行.
在mysql 中使用各种不同的技术来将数据存储到文件(内存)中.可以通过 show engines,来查看支持的存储引擎.在mysql中使用最多的存储引擎有,innodb,myisam,memory等.其中innodb是支持事务的,其他两个则不支持.
在这里插入图片描述
事务的创建:

隐式事务:事务没有明显的开始和结束的标记..比如我们的insert update 和delete的执行其实就是相当于执行了隐式事务
隐式事务只能对于单条的SQL语句,但是如果我们的事务中含有多条语句呢,此时隐式事务已经不能满足我们的需求了我们需要显式事务.
显式事务:事务具有明显的开始和结束的标记..使用显式事务的前提就是把自动提交功能禁用.set autocommit = 0

为了方便理解,我们可以这样认为,在事务结束之前,即将被修改的数据都是保存在内存当中的,只有执行了提交或者是回滚操作之后,才会把数据写入数据库或者是撤销.

注意:

当我们如果同时运行多个事务时,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会产生各种并发问题.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

savepoint 名称:可以用来设置保存点.该语句只能搭配rollback使用.例如:savepoint a. rollback a.

视图(难点)

在这里插入图片描述
关于视图的使用:其实就是 create view 视图名称 select 查询列表 from 表名 join类型 表名 on 连接条件 ,然后我们使用的时候就是 select * from 视图名称 where 筛选条件,当然也可以在视图的基础上继续添加连接条件
视图的优点:

实现了SQL语句的重用.
简化了复杂的SQL操作,不必知道它的查询细节.
保护数据,挺高了安全性.(和我们原始的表相分离, 保护了原始表的信息不回泄露)

视图的修改:
方式一:
create or replace view 视图名称 as 查询语句.:它的作用如果不存在视图就进行创建,如果存在就进行覆盖视图.
方拾二:
alter view 视图名称 as 查询语句查询语句
drop view 视图名 :删除视图
desc view 视图名:查看视图的结构
show create view 视图名:查看视图的结构(该命令在dos窗口下,查看的信息更加的全面,可以查看出视图的创建的过程)
show create view 视图名\G:显示的太全面不方便查看,该命令相当于是格式了一下.
注意:

对表的增删改语法同样适用于视图,并且对视图的增删改同样会影响原始表的中的数据.所以往往我们会对视图增加权限,这样我们队视图只有读的权限,增删改没有.

在这里插入图片描述
在这里插入图片描述
注意:delete是支持回滚操作的,也就是还可以恢复数据的,但是truncate是不支持回滚的,只要执行就会提交然后把表中的数据删除.

变量
系统变量:
			全局变量:
			会话变量:
自定义变量:
			用户变量:
			局部变量:

系统变量:该变量是有系统提供的,不是用户定义,属于服务器层面.语法如下:
show session variables :查看回话变量
show global variables :查看全局变量.
show global (session) variables like (’%char%’):产看满足条件的部分系统变量
select @@global(session) 系统变量名:查看指定名称的系统变量.

为系统变量赋值:
set global(session) 系统变量名 = 值
set @@global(session) 系统变量名= 值.
小结:
以上查看系统或者是会话变量的语句,默认查看的都是会话变量,如果想要查看全局变量,需要加global关键字.
全局变量的作用范围
其实就是一个会话的范围,服务器启动的时候会为所有的全局变量赋初始值,但是不能够夸重启.
会话变量:
作用于仅仅针对的是当前的会话(连接)有效,

存储过程和函数

优点:

提高代码的复用性
简化操作
减少了变一次输,并且减少了和数据库服务器的连接次数,提高了效率.

存储过程:是一组预先编译好的SQL语句的集合,(存储过程可以这样来理解,它里面存储了一组预先编译好的SQL语句,这样当我们的数据库服务器在执行它的时候,会先进行判断,如果是已经执行过一次的,就不用像其他的SQL语句一样,编译执行,而是直接就执行了.没有执行过的也是需要编译的,它可以减少我们队数据库服务器的连接次数,建琴服务器的压力)

创建语法:

create procedure 存储过程名(参数列表)
begin
	存储过程体(其实就是一组合法的SQL语句)
end

注意事项:
它的参数列表和其他的有点不太相似,包含三部分.(我们java中的参数只包含两个部分,类型和参数名称),它的参数李彪包含三个部分,分别是 参数模式,参数名称, 参数类型,其中,参数模式包括 in out inout 三种模式.

in:被修饰的参数可以作为输入,该参数需要调用方传入值.
out:被修饰的蚕食可以作为输出,也就是该参数可以作为返回值.
inout:该参数既可以作为输入,也可以作为输出.该参数急需要传入值,又可以返回值.

如果存储过程体中只有一句SQL,那么可以省略begin 和 and.,并且存储过程中的每条SQL语句末尾都要求添加分号.存储过程的末尾可以使用delimiter进行重新设置.
call 存储过程名(参数列表):调用过程.
在这里插入图片描述
在out模式下,需要定义出用来接收存储过程返回值的变量,一般是用户变量就行.然后我们可以创建存储过程,然后调用存储过程.,out支持多个返回值.
在inout模式下,需要提前定义出两个变量,用来输入和接受存储过程的返回值.
show create procedure 存储过程的名称 :查看存储过程

函数

函数和存储过程其实很像,二者内部都是椅子已经编译好的SQL语句,但是他和存储过程的区别就在于是,存储过程的返回值是没有个数限制的,可以没有,可以有一个,也可以有多个,但是函数有且只有一个返回值.二者还有一个不同之处就是,存储过程使用场景一般是适合做批量的插入,批量的更新,函数适合的是在批量执行完成之后返回一个结果,一般适合做查询一个值.

函数创建语法:

create function 函数名称(参数列表) returns 返回类型
begin
	函数体
end

注意:

参数列表包含两部分,分别是,参数名称 和参数类型.
函数体中肯定包含return 语句,如果没有回报错,如果return没有放在函数体的最后,也不会报错,但是不建议这样的,
当函数体中只有条SQL语句时,我们的begin和end是可以进行省略的,这一点和存储过程是一样的.
同样需要使用delimiter语句设置结束标记.

调用语法:它的作用就是执行函数中所有的语句.

select 函数名(参数列表) 

在这里插入图片描述
drop function 函数名:删除函数
mysql的核心知识点到此算告一段落.

猜你喜欢

转载自blog.csdn.net/dawiebazhanlang/article/details/87376305
今日推荐