Mysql数据库笔记分享系列--下(内附免费课设报告)
索引和视图
索引
索引类别
- 普通索引
- 唯一性索引
- 主键索引
- 全文索引
- 空间索引
创建索引
1.ALTER TABLE创建索引
#ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。
ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)
2.CREATE INDEX
CREATE INDEX可对表增加普通索引或UNIQUE索引。
CREATE INDEX index_name ON table_name (column_list)
CREATE UNIQUE INDEX index_name ON table_name (column_list)
删除索引
DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY
查看索引
show index from tblname;
什么情况下使用索引
什么情况下使用索引
1.表的主关键字
自动建立唯一索引
如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)
2.表的字段唯一约束
ORACLE利用索引来保证数据的完整性
如lc_hj(流程环节)中的lc_bh+hj_sx(流程编号+环节顺序)
3.直接条件查询的字段
在SQL中用于条件约束的字段
如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)
select * from zl_yhjbqk where qc_bh=’7001’
4.查询中与其它表关联的字段
字段常常建立了外键关系
如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)
select * from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=’540100214511’5.查询中排序的字段
排序的字段如果通过索引去访问那将大大提高排序速度
select * from zl_yhjbqk order by qc_bh(建立qc_bh索引)
select * from zl_yhjbqk where qc_bh=’7001’ order by cb_sx(建立qc_bh+cb_sx索引,注:只是一个索引,其中包括qc_bh和cb_sx字段)6.查询中统计或分组统计的字段
select max(hbs_bh) from zl_yhjbqk
select qc_bh,count(*) from zl_yhjbqk group by qc_bh
视图
创建视图
结果为一个表,就可以对这个表格进行操作
基于表单
drop view view_book_borrower;
create view view_name as select ... from ...
#查看视图
select * from view_name
基于多表
//类似单表,只是变成多表的
create view view_name as select ... from
a join b on a.id=b.id
视图管理
修改视图
1/
create view
replace view
2/
alter view
3/删除视图
drop view
视图操作数据
事务
事务
一件事儿分为几个步骤,所有步骤完成,这个事儿才叫完成了
开启事务
start transaction;
rollback;#回滚
经典案例–转账
start transaction;
update sh_user set money=money-100 where name='alex';
update sh_user set money=money+100 where name='bill';
commit;
事务处理
事件处理
- 原子性:事务是一个不可分割的工作单位(要么成功,要么失败回到最开始)
- 一致性:事务前后数据的完整性必须保持一致
- 隔离性:一个事务的执行不能有其他事务的干扰
- 持久性:一个事务一旦提交,对数据库中数据的改变就是永久性的
事务无法嵌套,下一个事务开始之后上一个会隐式提交
自动提交事务
- 值为 0 和值为 OFF:关闭事务自动提交。如果关闭自动提交,用户将会一直处于某个事务中,只有提交或回滚后才会结束当前事务,重新开始一个新事务。
- 值为 1 和值为 ON:开启事务自动提交。如果开启自动提交,则每执行一条 SQL 语句,事务都会提交一次。
SET autocommit = 0|1|ON|OFF;
事物的保存点
保存事务的某个节点状态
savepoint 保存点名;
#指定回滚保存点-回滚到保存点,保存点之后的操作都会被撤回
rollback savepoint 保存点名;
#释放保存点
release savepoint 保存点名;
事务隔离级别
查看隔离级别
事务隔离级别
多用户共享资源,mysql允许多线程并发访问,用户可以通过不同的线程执行事务 |
---|
- 全局隔离级别
select @@
- 当前会话隔离级
- 下一个事物的隔离级
四种隔离级别
- Read uncommitted(读未提交)
解决了更新丢失,但还是可能会出现脏读
- Read committed(读提交)
解决了更新丢失和脏读问题
- Repeatable read(可重复读取)
解决了更新丢失、脏读、不可重复读、但是还会出现幻读
- Serializable(可序化)–上锁
解决了更新丢失、脏读、不可重复读、幻读(虚读)
数据库编程
函数
1.内置函数
数学–类似于math库
数据类型转换
convert(x,type)#y以type类型返回x
convert(x USING字符集)#已制定字符集返回x
cast(x as type)
unhex();
字符串
sub
concat()#连接多个字符
trim()#去除两边的空格
ltrim()#去除左边的空格
rtrim()#去除右边的空格
left('hello',3)#从左边取三个
right()#右边开始
lapd(0,6,"*")#0开始,截取6个,不足补*
rpad#右边开始insert("sdfdg",3,4,"ha")#3开始,提取4个,换成ha
replace("welcome","e","E")#把谁替换成谁
时间日期函数
TIMEDIFF#时间差值
data_sub()
data_add()
select now()#获取当前程序时间(),括号里面可以加一个数字:精度(秒后面的数字)
select sysdate()#获取当前语句时间
sleep()#休眠两秒#时间格式函数
from_unixtime(unix_timestamp(),'%w')#按周
from_unixtime(unix_timestamp(),'%y%m%d')#按日期
from_unixtime(unix_timestamp(),'%H:%i:%s')#按周#时间加减运算
'2022-10-20 12:10:03' + interval 1 day;#加一天 -同理
data_sub('2022-10-20 12:10:03' interval '1' 'day');
data_add()#同减法
加密函数
#MD5函数,sha加密函数
select MD5("123456"),SHA1("123456"),SHA1("123456",256)
系统信息函数
version()
JSON函数–JSON数据操作
- 创建json数组
JSON_ARRAY()#创建JSOn数组JSON_OBJECT("id","1","name","wu")#创建键值对
- 添加json数据
JSON_SET('{"id":1}','$.emile',"123@qq.com")#可以当replace用--替换原有的值,$代表当前字典
- 删除json数据
JSON_REMOVE("['1','2','3']",'$[0]')
- 合并json数据
select JSON_MERGE_PATCH('{"a":1,"b":2}','{"a":["one",1],"b":44}')#相同替换掉
select JSON_MERGE_PRESERVE('{"a":1,"b":2}','{"a":["one",1],"b":44}')#相同键合并为数组
- 搜索json值和路径
JSON_SEARCH("['cookie':12,'23']",'all',"cookie")#查询有所有的值
JSON_SEARCH("['cookie':12,'23']",'$[1]',"$[0]")#查询第一个和第0个
其他
INET_ATON('192.168.0.1')#转化ip地址
uuid()#每一行一个
自定义函数
delimiter $$#新结束符
CREATE FUNCTION(参数类型 参数 returns 返回值类型)
begin
return concat("")#这里是函数体
end
DELIMITER ;
create function 函数名([])returns 返回值类型
[begin]
函数体
retuen 返回值数据#数据必须和结构中定义的返回值类型一致
[end]
存储过程
创建存储过程
in表示传入数据,out表示传出数据,
delimiter $$#新结束符
create procedure 过程名([in|out|inout] [参数类型 参数])
[begin]
函数体
retuen 返回值数据#数据必须和结构中定义的返回值类型一致
[end]
$$
查看创建过程的条件语句
SHOW CREATE PROCEDURE 过程名;
#查看符合条件的过程语句
SHOW PROCEDURE STATUS [LIKE 匹配模式];
SHOW PROCEDURE STATUS LIKE 'proc'\G
执行创建过程
要想存储过程发挥作用,必须使用MySQL提供的CALL语句调用。
由于存储过程和数据库相关,如果要执行其他数据库中的存储过程,则调用时需要指定数据库名称
CALL 数据库名.存储过程名称([实参列表]);
SELECT * FROM information_schema.triggers WHERE trigger_name= 'trig_book';
存储过程的修改和删除
alter procedure 过程名([in|out|inout] [参数类型 参数])
#删除
DROP PROCEDURE [IF EXISTS] 存储过程名称
delimiter $$
create procedure proc_2()
begin
select distinct name_book,price_book,upload_time from book_2061105204 bjoin record_2061105204 r on b.id!=r.book_id join user_2061105204 u on u.id!=r.borrow_id;
end
$$
DELIMITER ;
call proc_2;
存储过程的错误处理
delimiter $$
create procedure 过程名()
begin
declare continue handler for sqltate '2300'
变量
- 系统变量
@@
show [global|session] variables [like %]#查找变量
set 变量名 = 5;#修改变量
set global 变量名 = 5;#修改全局变量
会话变量
也叫用户变量,用户自定义的变量,用@开头
set @name = 'sa';
select @name;
select id,name,price from sh_goods limit
select @price:=price from sh——goods limit2;#给一个变量赋值多个,默认赋值最后一个
select id,name,price
into @ids,@names,@prices;
select @ids,@names,@prices;
局部变量
只在begin和end之间,不用@
CREATE FUNCTION(参数类型 参数 returns 返回值类型)
begin
declare age int default 10;
return age
end
DELIMITER ;
流程控制
if
begin
if(score=5,score,0)
if a>b than a
[else if x than][else than]
end if;
end
$$
case when
case [条件] when 条件 than 结果
循环
游标
不需要交互直接存储过程结合游标一次性完成
delimiter $$
create FUNCTION func_2(bname char(20))
RETURNS char(20)
begin
DECLARE blevel VARCHAR(10);DECLARE bprice decimal(6, 2);#定义数据的格式,可以不要SELECT price_book INTO bprice FROM book_2061105204 WHERE name_book=bname;#选出来的数据IF bprice>60#if判断THEN SET blevel='高价格';#判断结果``ELSEIF bprice<=60 AND bprice>40THEN SET blevel='主流价格';ELSEIF empsal<=40THEN SET blevel='平民价格';END IF;RETURN blevel;
end $$
DELIMITER ;
触发器
概述
特殊类型的存储过程–预先设定的条件发生触发
优缺点
- 优点:隐式操作
- 缺点:不知道的情况下会有意外情况
触发器的基本操作
create trigger 触发器名字
- 触发时机
- before表中数据改变前
- after之后
- 触发事件
- 触发顺序
事件
概述
特定时间自动完成的时间
时间基本操作
create event [if not exists] 事件名称
on schedule at current_timestamp+ interval 1 minute
+interval 20 scecond
do insert into
数据预处理语句
数据库备份
备份指定数据库
mysqldump
备份全部数据库
指定文件目录
source还原数据
source filename.sql
用户与权限
概述
mysql通过用户的设置来控制数据库的操作人员的访问与操作范围
权限管理在mysql这个数据库里面,所有用户保存在mysql.user数据表
host是可以访问的主机域名,user是数据库
plugin是加密方式,authenticiation_string是密文
安全连接字段
- 查看ssl安全连接:
资源限制字段
- max_开头的是资源限制
- 避免浪费
权限字段
- _priv结尾,Select_priv查询权限,Insert_priv插入权限,Update_priv,更新权限
客户锁定字段
用户管理
创建用户
create user[if not exists] 用户名[用户身份验证选项][,账户名[用户身份验证选项]]
可以一次创建多个用户,用,间隔
账户名由用户名@主机地址组成
修改加密方式
设置密码
- USER()函数可以获取客户端提供的用户和主机地址
12
删除用户
- 省略主机地址,
权限管理
1,授予权限
引擎
1.1引擎
默认使用InnoDB
查看引擎
show engines
引擎选择
aechive:存储海量数据
blackhole:黑洞引擎
performance_schema:性能架构
federated:
InnoDB是默认存储引擎
InnoDB使用最多
查看是否独立空间文件,on为独立
my.ini是mysql配置文件
数据库数据默认存放地址
11.3锁机制
认识锁机制
表级锁
读锁—读操作
写锁–写操作
隐式表·
优先级顺序–优先处理写锁
lock table 数据表名 read [local] |write,...
create table mydb.table_lock (id int)engine=MyISAM
授权给a,b
给a加一个读锁(只能读,不能改,其他表甚至不能读)
锁分类
锁等待
2、表级锁
写锁
读锁
隐式读
3、行级锁
#排他锁
for update
4、分表技术
- 水平分表
- 垂直分表
11.5分区技术
课设报告链接
Mysql数据库笔记分享系列--下(内附免费课设报告)相关推荐
- mysql数据库j电子课件,MYSQL数据库技术分享PPT演示课件
<MYSQL数据库技术分享PPT演示课件>由会员分享,可在线阅读,更多相关<MYSQL数据库技术分享PPT演示课件(29页珍藏版)>请在人人文库网上搜索. 1.数据库技术分享, ...
- 历史上的今天mysql数据库包含详情分类以及图片(免费分享)
历史上的今天mysql数据库包含详情分类以及图片(免费分享) 附下载地址:https://www.wjcms.net/archives/%E5%8E%86%E5%8F%B2%E4%B8%8A%E7%9 ...
- 【013】基于Vue的酒店客房管理系统(含管理员、普通用户两种身份(附源码数据库、课设报告)
这里写目录标题 一.系统详细介绍 二.系统部分设计思路 三.项目获取 一.系统详细介绍 前言: 这次带来的是基于Nodejs+Vue+Mysql的酒店客房管理系统,含非常非常详细的课设报告,觉得物超所 ...
- 数据库课程设计——某煤气公司送气管理系统(附课设报告)
下面都是我在CSDN发的文章,这算广告???审核你有毛病? 数据库课程设计--某工厂的物料管理系统(附Java源码与课程设计报告) 数据库课程设计--某商店进销存管理系统(附Java源码与课程设计报告 ...
- Android 小应用之一个activity实现简易手电筒(内附免费源码)
Android小应用之一个activity实现简易手电筒(内附免费源码) 1.activity代码 2.xml代码 3.资源文件代码 4.源码压缩包(免费) 今天爷爷说他手机更新之后找不到手电筒了,我 ...
- MySQL数据库-笔记05【查询练习题*25道(附解析)】
学习地址:一天学会 MySQL 数据库 MySQL安装教程 MySQL专栏
- MySQL数据库-笔记04【查询练习题*8道(附解析)】
学习地址:一天学会 MySQL 数据库 MySQL安装教程 MySQL专栏
- MySQL数据库-笔记03【范式(1NF、2NF、3NF)、查询练习题*10道(附解析)】
学习地址:一天学会 MySQL 数据库 MySQL安装教程 MySQL专栏
- JAVA MySQL数据库 笔记
MySQL数据库 1. 初始MySQL 1.1 为什么学习数据库 岗位技能需求 现在的世界,得数据者得天下 网站中数据存储的地方 数据库是几乎软件体系中最核心的一个存在. 1.2 什么是数据库 数据库 ...
最新文章
- 高通Android平台硬件调试之Camera篇
- mysql 自动停止_MySQL数据库之mysql自动停止的完美解决方法
- 部署GitLab时, 问题
- leetcode1721. 交换链表中的节点
- 面试题,你什么时候可以入职?回答不好,容易被压薪资
- RSA2013系列(1):中国成为热点
- android秋招面试题及答案,阿里巴巴2019秋招客户端开发工程师在线笔试题和面试题答案...
- 世上可有后悔药?服务器里建快照
- Xcode不出错误提示,Indexing | Processing files
- MFC Date Time Picker的使用
- 1. C语言---输出格式大全
- word文档保护密码忘 了,怎么取消格式和编辑保护
- Qt:Exception at 0xeefde9, code:0x0000005: read access violation at: 0x0, flags = 0x0(first chance)
- Modern Effective C++
- java生成条码_Java生成商品条形码
- 吉他大横按的学习技巧总结
- 2018年最后一个工作日
- css:css样式背景图片设置透明度,css如何设置背景图片的透明度
- 【Vue】Vue 判断插槽内容是否加载完成
- 百度网盘不限速(小白亲测)
热门文章
- TFN新推出便携式高性能无线电综合测试仪
- 自学Java半年多,我掌握了这些技术!!!
- tomcat开机自启动
- 王者荣耀助手服务器繁忙请稍后重试,王者荣耀微信提示网络繁忙/登录失败如何解决...
- lua 学习笔记---游戏开发第一步
- Lyapunov-Krasovskii泛函中Jensen不等式和倒凸组合引理的运用
- 计算机仍遵循着一位科学家,电子计算机技术在半个世纪中虽有很大的进步,但至今其运行仍遵循着一位科学家提出的基本原理。他...
- 面试--80% 以上简历都是不合格的
- 色弱不能学计算机的哪些专业,高考体检色弱色盲不能报哪些专业?
- java过滤器 配置路径_Filter过滤器拦截路径配置