MySQL进阶(MySQL学习笔记)

2023-12-13 04:07:51
接上回MySQL基础篇

数据完整性约束

定义完整性约束

实体完整性

主键约束

(1)作为列的完整性约束

(2)作为表的完整性约束

2.候选键约束

将id字段和user字段设置为候选键

参照完整性

将classid字段设置为外键

用户定义完整性

非空约束

将name字段添加非空约束

CHECK约束

列约束,限制age字段的值

表约束,限制classid字段

命名完整约束

添加命名外键完整约束

更新完整性约束

删除完整性约束

删除fk-classid

修改完整性约束

更新fk-classid的外键约束为级联删除和级联更新

存储过程与存储函数

创建存储过程和存储函数

创建存储过程

创建一个存储过程

创建存储函数

创建存储函数

变量的应用

局部变量

全局变量

为变量赋值

declare var_name[...] type [default value]

set var_name=expr[,var_name=expr]..

光标应用

声明光标

declare cursor_name cursor for select_statement

打开光标

open info_of_student

使用光标

fetch info_of_student into tmp_name,temp_tel;

关闭光标

close info_of_student

调用存储过程和存储函数

调用从存储过程

调用存储函数

查看存储过程和存储函数

SHOW STATUS语句

显示所有db_database14的存储过程

show procedure status where db='db_database14';

SHOW CREATE语句

修改存储过程和存储函数

删除存储过程和存储函数

触发器

MySQL触发器

创建MySQL触发器

创建具有多条执行语句的触发器

模拟一个删除日志数据表和一个删除时间表

查看触发器

SHOW TRIGGERS语句

查看triggers表中触发器信息

select * from information_schema.triggers;

使用触发器

触发器的执行顺序

使用触发器维护冗余数据

使用触发器维护库存数量

删除触发器

事务

事务机制

事务的概念

原子性,一致性,隔离性,持久性

事务机制的必要性

实现从借记卡账户A向B转账700元,成功后再从A向B转账500元

关闭MySQL自动提交

事务回滚

实现A向B转账500,出错时进行事务回滚

事务提交

显示提交

commit

隐式提交

set autocommit=1

MySQL中的事务

在存储过程中创建事务

回退点

创建一个事务,当出现错误时,回滚到提前定义的回退点

锁机制

锁机制的基本知识

1.锁的类型

读锁(共享锁)

写锁(排他锁)

2.锁粒度
3.锁策略

(1)表级锁

(2)行级锁

4.锁的生命周期

MySAM表的表级锁

以读方式锁定数据表

以读方式锁定数据库中用户的数据表

以写方式锁定数据表

在新的窗口查询则显示失败,关闭后则显示成功

InnoDB表的行级锁

窗口二

事件

事件概述

查看事件是否开启

开启事件

1.设置全局参数

set clobal event_scheduler=ON;

更改配置文件

event_scheduler=on

创建事件

创建一个事件,用于每隔5秒向数据表tb_eventtest中插入一条数据

修改事件

修改事件,让其每隔30秒向数据表插入数据

删除事件

备份与恢复

数据备份

使用mysqldump命令备份

备份一个数据库

mysqldump -u root -p test student >E:\ student.sql

备份多个数据库

mysqldump -u root -p --database test mysql? >E:\backup.sql

备份所有数据库

mysqldump -u root -p --all -database? >E:\all.sql

直接复制整个数据库目录

show variables like '%datadir%';

数据恢复

使用mysql命令还原

mysql -u root -p <E:\all.sql

数据库迁移

mysqldump -h name1 -u root -password=password1 --all-databases |

mysql -h host2 -u root -password=password2

表的导出和导入

用select...into outfile 语句导出文本文件

实现导出信息表记录

select*from tb_bookinfo into outfile 'D:/bookinfo.txt'
? ? -> fields terminated by ?'\,' optionally enclosed by '\"'
? ? -> lines starting by '\>' terminated by '\r\n';

用mysqldump命令导出文本文件

mysqldump -u root -p -T "D:\" db_database18 tb_library "--lines-terminated-by=\r\n"

"--fields_terminated_by=," "--fields_optionally_enclosed-by="";

用mysql命令导出文本文件

mysql -u root -p --html? -e "select*from tb_bookinfo" db_database18>E:\bookinfo.html

用load data infile命令将文本文件导入数据表

将文本文件中的数据导入表中

load data infile 'E:\bookinfo.txt' into table tb_bookinfo

fields terminated by '\t'

lines terminated by '\r\n'

ignore 1 lines;

用mysqlimport命令导入文本文件

mysqlimport -u root -p? db_database18 "E:\tb_bookinfo.txt"

"--lines-terminated-by=\r\n" "--fields-terminated-by=\t" "--fields-optionally-enclosed-by=\"

MySQL性能优化

分析MySQL数据库的性能

connections:服务器连接次数

uptime:服务器上线时间

slow_queries:慢查询次数

com_select:查询操作次数

con_insert:插入操作的次数

com_delete:删除操作次数

查看服务器的连接和查询次数

通过profile工具分析语句消耗性能

优化查询

分析查询语句

索引对查询速度的影响

使用索引查询

应用关键字like优化索引查询

查询语句中使用多列索引

?create index index_book_info on tb_bookinfo(bookname,price);

查询语句中使用关键字or

select*from tb_bookinfo where bookname='MySQL从入门到精通' or price=89;

优化数据库结构

将字段很多的表分解成多个表

?desc tb_student_extra;

增加中间表

?insert into temp_student select s.id,s.name,c.name
? ? -> from tb__student s,tb_class1 c where s.classid=c.id;

优化插入记录的速度

禁用索引

alter table 表名 disable keys;

禁用唯一性检查

set unique_checks=0;

set unique_checks=1;

优化insert语句

insert into tn_food values

(null,'果冻','CC果冻',1.8,'2011','北京'),

...;

分析表、检查表和优化表

分析表

检查表

check table 表名1[,表名2...];

优化表

optimize table 表名1[,表名2...];

优化多表查询

优化学生姓名和班级名称

SELECT s.name FROM tb_student s,tb_classes c WHERE s.classid=c.id AND c.name='一年三班';

SELECT name FROM tb_student WHERE class_id=(SELECT id FROM tb_classes c WHERE name='一年三班');

权限管理及安全控制

用户和权限管理

使用CREATE USER命令创建用户

使用DROP USER命令删除用户

drop user mrsoft

使用RENAME USER命令重命名用户

使用GRANT和REVOKE命令管理访问权限

查看用户权限

设置用户权限

grant all on *.* to 'super'@'localhost'with grant option

注:本章源代码来自《MySQL从入门到精通》

文章来源:https://blog.csdn.net/m0_74016429/article/details/134769151
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。