当前位置:网站首页>mysql高级(索引,视图,存储过程,函数,修改密码)
mysql高级(索引,视图,存储过程,函数,修改密码)
2022-07-06 09:34:00 【唐僧骑白马】
索引
mysql的索引就如同字典的目录页(索引)一样,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。
创建索引时,你需要确保该索引是应用在SQL 查询语句的条件(一般作为 WHERE 子句的条件)。实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
虽然建立索引可以加快数据检索的速度,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。
普通索引
- 查看索引
show index from 表名;
- 创建索引
方式一:建表时创建索引
CREATE TABLE create_index(
id INT PRIMARY KEY,
NAME VARCHAR(10) UNIQUE,
age INT,
INDEX age_index(age)
);
方式二:对于已经存在的表,添加索引
//如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
//字段类型如果不是字符串,可以不填写长度部分
create index 索引名称 on 表名(字段名称(长度))
例:
create index age_index on create_index(age);
create index name_index on create_index(name(10));
- 删除索引
drop index 索引名称 on 表名;
- 开启运行时间监测
set profiling=1;
- 查看执行的时间
show profiles;
- 修改表结构(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
ALTER TABLE create_index ADD INDEX name_index(NAME(10))
唯一索引
与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
- 创建唯一索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
CREATE UNIQUE INDEX name_index2 ON create_index(name(10))
- 修改表结构创建唯一索引
ALTER table mytable ADD UNIQUE [indexName] (username(length));
ALTER TABLE create_index ADD UNIQUE name_index3(name(10));
- 创建表的时候直接指定
CREATE TABLE create_index(
ID INT NOT NULL,
name VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length))
);
- 使用ALTER 命令添加索引
//有四种方式来添加数据表的索引:
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。
视图
对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦。
解决:定义视图
视图本质就是对查询的封装,定义视图,建议以v_开头
语法:
create view 视图名称 as select语句;
- 例:创建视图,查询学生对应的成绩信息
create view v_stu_score_course as
select
stu.*,cs.courseNo,cs.name courseName,sc.score
from
students stu
inner join scores sc on stu.studentNo = sc.studentNo
inner join courses cs on cs.courseNo = sc.courseNo
CREATE VIEW v_stu AS
SELECT
name,sex
FROM
students
//使用视图
SELECT * FROM v_stu
- 查看视图:查看表会将所有的视图也列出来
show tables;
- 删除视图
drop view 视图名称;
例:
drop view v_stu_score_course;
- 使用视图:视图的用途就是查询
select * from v_stu_score_course;
SELECT * FROM v_stu
存储过程
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
优点
- 存储过程可封装,并隐藏复杂的商业逻辑。
- 存储过程可以回传值,并可以接受参数。
- 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
- 存储过程可以用在数据检验,强制实行商业逻辑等。
缺点
- 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
- 存储过程的性能调校与撰写,受限于各种数据库系统。
- 语法:
delimiter $$
create procedure 存储过程名称(参数列表)
begin
sql语句
end$$
delimiter ;
- 说明: delimiter用于设置分割符,默认为分号
- 解析:默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀。在定义过程时,使用 DELIMITER
$$
命令将语句的结束符号从分号 ; 临时改为两个$$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。 - 例子:
要求:创建查询过程,查询学生信息 - step1:设置分割符
delimiter $$
- step2:创建存储过程
create procedure proc_stu()
begin
select * from students;
end$$
- step3:还原分割符
delimiter ;
- 调用语法:
call 存储过程(参数列表);
调用存储过程proc_stu
call proc_stu();
函数
- 创建函数语法
delimiter $$
create function 函数名称(参数列表) returns 返回类型
begin
sql语句
end
$$
delimiter ;
- 函数示例
要求:创建函数my_trim,用于删除字符串左右两侧的空格 - step1:设置分割符
delimiter $$
- step2:创建函数
create function my_trim(str varchar(100)) returns varchar(100)
begin
return ltrim(rtrim(str));
end
$$
- step3:还原分割符
delimiter ;
- 使用自定义函数
select ' abc ',my_trim(' abc ')
- 总结:
- 存储过程和函数都是为了可重复的执行操作数据库的 sql 语句的集合.
- 存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的 sql,不需要重复编译
- 减少网络交互,减少网络访问流量
修改密码
说明:修改user表的密码就是修改数据库的密码
- 使用root登录,修改mysql数据库的user表
- 使用password()函数进行密码加密
- 注意修改完成后需要刷新权限
use mysql;
update user set password=password('新密码') where user='用户名';
例:
update user set password=password('123') where user='root';
刷新权限: flush privileges;
忘记 root 账户密码
1、配置mysql登录时不需要密码,修改配置文件
- Centos中:配置文件位置为/data/server/mysql/my.cnf
- Windows中:配置文件位置为C:\Program Files (x86)\MySQL\MySQL Server 5.1\my.ini修改,找到mysqld,在它的下一行,添加skip-grant-tables
[mysqld]
skip-grant-tables
2、重启mysql,免密码登录,修改mysql数据库的user表
use mysql;
update user set password=password('新密码') where user='用户名';
例:
update user set password=password('123') where user='root';
刷新权限: flush privileges;
3、还原配置文件,把刚才添加的skip-grant-tables删除,重启
边栏推荐
- List set data removal (list.sublist.clear)
- Activiti directory (III) deployment process and initiation process
- Prototype chain inheritance
- Flink 解析(六):Savepoints
- JVM之垃圾回收器上篇
- 关于Selenium启动Chrome浏览器闪退问题
- [ciscn 2021 South China]rsa writeup
- Wu Jun's trilogy insight (V) refusing fake workers
- Final review of information and network security (based on the key points given by the teacher)
- 吴军三部曲见识(四) 大家智慧
猜你喜欢
Set up the flutter environment pit collection
MySQL digital function
Flink源码解读(二):JobGraph源码解读
Case: check the empty field [annotation + reflection + custom exception]
肖申克的救赎有感
JVM之垃圾回收器上篇
Final review of information and network security (full version)
Take you hand-in-hand to do intensive learning experiments -- knock the level in detail
Flink 解析(一):基础概念解析
信息与网络安全期末复习(基于老师给的重点)
随机推荐
Program counter of JVM runtime data area
Flink源码解读(三):ExecutionGraph源码解读
Alibaba cloud server docker installation mysql5.5
Flink 解析(五):State与State Backend
Programmer orientation problem solving methodology
JS garbage collection mechanism and memory leakage
8086 内存
Coursera cannot play video
Only learning C can live up to expectations TOP4 S1E6: data type
Description of project structure configuration of idea
汇编语言基础知识
Control transfer instruction
唯有学C不负众望 TOP4 S1E6:数据类型
Interview collection library
基于Infragistics.Document.Excel导出表格的类
信息与网络安全期末复习(基于老师给的重点)
[VNCTF 2022]ezmath wp
一个数10年工作经验的微服务架构老师的简历
Jetpack compose 1.1 release, based on kotlin's Android UI Toolkit
唯有学C不负众望 TOP1环境配置