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;
事件处理
事务无法嵌套,下一个事务开始之后上一个会隐式提交
自动提交事务
SET autocommit = 0|1|ON|OFF;
事物的保存点
保存事务的某个节点状态
savepoint 保存点名;
#指定回滚保存点-回滚到保存点,保存点之后的操作都会被撤回
rollback savepoint 保存点名;
#释放保存点
release savepoint 保存点名;
查看隔离级别
事务隔离级别
多用户共享资源,mysql允许多线程并发访问,用户可以通过不同的线程执行事务 |
---|
select @@
解决了更新丢失,但还是可能会出现脏读
解决了更新丢失和脏读问题
解决了更新丢失、脏读、不可重复读、但是还会出现幻读
解决了更新丢失、脏读、不可重复读、幻读(虚读)
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_ARRAY()#创建JSOn数组
JSON_OBJECT("id","1","name","wu")#创建键值对
JSON_SET('{"id":1}','$.emile',"[email protected]")#可以当replace用--替换原有的值,$代表当前字典
JSON_REMOVE("['1','2','3']",'$[0]')
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_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 b
join 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 ;
begin
if(score=5,score,0)
if a>b than a
[else if x than][else than]
end if;
end
$$
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>40
THEN SET blevel='主流价格';
ELSEIF empsal<=40
THEN SET blevel='平民价格';
END IF;
RETURN blevel;
end $$
DELIMITER ;
特殊类型的存储过程–预先设定的条件发生触发
优缺点
create trigger 触发器名字
特定时间自动完成的时间
时间基本操作
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是密文
安全连接字段
资源限制字段
权限字段
客户锁定字段
创建用户
create user[if not exists]
用户名[用户身份验证选项][,账户名[用户身份验证选项]]
设置密码
12
删除用户
默认使用InnoDB
查看引擎
show engines
引擎选择
aechive:存储海量数据
blackhole:黑洞引擎
performance_schema:性能架构
federated:
InnoDB是默认存储引擎
InnoDB使用最多
查看是否独立空间文件,on为独立
my.ini是mysql配置文件
数据库数据默认存放地址
表级锁
读锁—读操作
写锁–写操作
隐式表·
优先级顺序–优先处理写锁
lock table 数据表名 read [local] |write,...
create table mydb.table_lock (id int)engine=MyISAM
授权给a,b
给a加一个读锁(只能读,不能改,其他表甚至不能读)
锁分类
锁等待
写锁
读锁
隐式读
#排他锁
for update
课设报告链接