索引和视图

索引
索引类别
  1. 普通索引
  2. 唯一性索引
  3. 主键索引
  4. 全文索引
  5. 空间索引
创建索引

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'

变量

  1. 系统变量

​ @@

show [global|session] variables [like %]#查找变量
set 变量名 = 5;#修改变量
set global 变量名 = 5;#修改全局变量
  1. 会话变量

    也叫用户变量,用户自定义的变量,用@开头

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;
  1. 局部变量

    只在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 ;

触发器

概述
  1. 特殊类型的存储过程–预先设定的条件发生触发

  2. 优缺点

    1. 优点:隐式操作
    2. 缺点:不知道的情况下会有意外情况
触发器的基本操作
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,更新权限
  • 客户锁定字段

用户管理

  1. 创建用户

    create user[if not exists]
    用户名[用户身份验证选项][,账户名[用户身份验证选项]]
    
    • 可以一次创建多个用户,用,间隔

    • 账户名由用户名@主机地址组成

    • 修改加密方式

  2. 设置密码

    • USER()函数可以获取客户端提供的用户和主机地址
  3. 12

  4. 删除用户

    1. 省略主机地址,

权限管理

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、分表技术

  1. 水平分表

  1. 垂直分表

11.5分区技术

课设报告链接

Mysql数据库笔记分享系列--下(内附免费课设报告)相关推荐

  1. mysql数据库j电子课件,MYSQL数据库技术分享PPT演示课件

    <MYSQL数据库技术分享PPT演示课件>由会员分享,可在线阅读,更多相关<MYSQL数据库技术分享PPT演示课件(29页珍藏版)>请在人人文库网上搜索. 1.数据库技术分享, ...

  2. 历史上的今天mysql数据库包含详情分类以及图片(免费分享)

    历史上的今天mysql数据库包含详情分类以及图片(免费分享) 附下载地址:https://www.wjcms.net/archives/%E5%8E%86%E5%8F%B2%E4%B8%8A%E7%9 ...

  3. 【013】基于Vue的酒店客房管理系统(含管理员、普通用户两种身份(附源码数据库、课设报告)

    这里写目录标题 一.系统详细介绍 二.系统部分设计思路 三.项目获取 一.系统详细介绍 前言: 这次带来的是基于Nodejs+Vue+Mysql的酒店客房管理系统,含非常非常详细的课设报告,觉得物超所 ...

  4. 数据库课程设计——某煤气公司送气管理系统(附课设报告)

    下面都是我在CSDN发的文章,这算广告???审核你有毛病? 数据库课程设计--某工厂的物料管理系统(附Java源码与课程设计报告) 数据库课程设计--某商店进销存管理系统(附Java源码与课程设计报告 ...

  5. Android 小应用之一个activity实现简易手电筒(内附免费源码)

    Android小应用之一个activity实现简易手电筒(内附免费源码) 1.activity代码 2.xml代码 3.资源文件代码 4.源码压缩包(免费) 今天爷爷说他手机更新之后找不到手电筒了,我 ...

  6. MySQL数据库-笔记05【查询练习题*25道(附解析)】

    学习地址:一天学会 MySQL 数据库      MySQL安装教程      MySQL专栏

  7. MySQL数据库-笔记04【查询练习题*8道(附解析)】

    学习地址:一天学会 MySQL 数据库      MySQL安装教程      MySQL专栏

  8. MySQL数据库-笔记03【范式(1NF、2NF、3NF)、查询练习题*10道(附解析)】

    学习地址:一天学会 MySQL 数据库      MySQL安装教程      MySQL专栏

  9. JAVA MySQL数据库 笔记

    MySQL数据库 1. 初始MySQL 1.1 为什么学习数据库 岗位技能需求 现在的世界,得数据者得天下 网站中数据存储的地方 数据库是几乎软件体系中最核心的一个存在. 1.2 什么是数据库 数据库 ...

最新文章

  1. 高通Android平台硬件调试之Camera篇
  2. mysql 自动停止_MySQL数据库之mysql自动停止的完美解决方法
  3. 部署GitLab时, 问题
  4. leetcode1721. 交换链表中的节点
  5. 面试题,你什么时候可以入职?回答不好,容易被压薪资
  6. RSA2013系列(1):中国成为热点
  7. android秋招面试题及答案,阿里巴巴2019秋招客户端开发工程师在线笔试题和面试题答案...
  8. 世上可有后悔药?服务器里建快照
  9. Xcode不出错误提示,Indexing | Processing files
  10. MFC Date Time Picker的使用
  11. 1. C语言---输出格式大全
  12. word文档保护密码忘 了,怎么取消格式和编辑保护
  13. Qt:Exception at 0xeefde9, code:0x0000005: read access violation at: 0x0, flags = 0x0(first chance)
  14. Modern Effective C++
  15. java生成条码_Java生成商品条形码
  16. 吉他大横按的学习技巧总结
  17. 2018年最后一个工作日
  18. css:css样式背景图片设置透明度,css如何设置背景图片的透明度
  19. 【Vue】Vue 判断插槽内容是否加载完成
  20. 百度网盘不限速(小白亲测)

热门文章

  1. TFN新推出便携式高性能无线电综合测试仪
  2. 自学Java半年多,我掌握了这些技术!!!
  3. tomcat开机自启动
  4. 王者荣耀助手服务器繁忙请稍后重试,王者荣耀微信提示网络繁忙/登录失败如何解决...
  5. lua 学习笔记---游戏开发第一步
  6. Lyapunov-Krasovskii泛函中Jensen不等式和倒凸组合引理的运用
  7. 计算机仍遵循着一位科学家,电子计算机技术在半个世纪中虽有很大的进步,但至今其运行仍遵循着一位科学家提出的基本原理。他...
  8. 面试--80% 以上简历都是不合格的
  9. 色弱不能学计算机的哪些专业,高考体检色弱色盲不能报哪些专业?
  10. java过滤器 配置路径_Filter过滤器拦截路径配置