11.MYSQL高级(一)

1.账户管理

在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然后连接进行操作,主要的操作就是数据的crud

MySQL账户体系:根据账户所具有的权限的不同,MySQL的账户可以分为以下几种

服务实例级账号:,启动了一个mysqld,即为一个数据库实例;如果某用户如root,拥有服务实例级分配的权限,那么该账号就可以删除所有的数据库、连同这些库中的表

数据库级别账号:对特定数据库执行增删改查的所有操作

数据表级别账号:对特定表执行增删改查等所有操作

字段级别的权限:对某些表的特定字段进行操作

存储程序级别的账号:对存储程序进行增删改查的操作

账户的操作主要包括创建账户、删除账户、修改密码、授权权限等

注意:进行账户操作时,需要使用root账户登录,这个账户拥有最高的实例级权限

 

查看所有用户

查看user表的结构desc user\G;

主要字段说明:

host表示允许访问的主机

user表示用户名

authentication_string表示密码,为加密后的值

 

查看所有用户

selecthost,user,authentication_string from user;

创建账户并授予权限

需要使用实例级账户登录后操作,以root为例

常用权限主要包括:create、alter、drop、insert、update、delete、select

如果分配所有权限,可以使用all privileges

 

创建账户并授权

语法如下:grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码';

授权

语法如下:grant 权限名称 on 数据库 to 账户1,账户2,... with grant option;

示例

step1:使用root登录

mysql -uroot-p
回车后写密码,然后回车

step2:创建账户并授予所有权限,说明如下用户名为py,密码为123

操作python数据库的所有对象python.*

访问主机通常使用百分号%表示此账户可以使用任何ip的主机登录访问此数据库

访问主机可以设置成localhost或具体的ip,表示只允许本机或特定主机访问

grant all privileges onpython.* to 'py'@'%' identified by '123';

查看用户有哪些权限

show grants for py;

step3:退出root的登录

quit

step4:使用py账户登录

mysql -upy -p
回车后写密码,然后回车

 

回收权限

需要使用实例级账户登录后操作,以root为例

如果不希望某用户拥有此权限,可以将此权限从用户上撤销

语法如下:revoke 权限列表 on 数据库名.* from  '用户名'@'主机';

 

修改密码

语法1:不需登录mysqladmin-u py -p password '新密码'
例:mysqladmin -u py -p password '123456'
回车后写密码,然后回车

 

语法2:使用root登录,修改mysql数据库的user表

使用password()函数进行密码加密

注意修改完成后需要刷新权限

update userset authentication_string=password('新密码') where user='用户名';
例:update user set authentication_string=password('123') where user='py';

刷新权限:flushprivileges

语法1用于账户自己修改密码

语法2用于修改自己或其它账户的密码,一般是dba或经理修改员工的密码

 

删除账户

语法1:使用root登录dropuser '用户名'@'主机';
例:drop user 'py'@'%';

语法2:使用root登录,删除mysql数据库的user表中数据

deletefrom user where user='用户名';
例:delete from user where user='py';

--操作结束之后需要刷新权限flushprivileges

推荐使用语法1删除用户

如果主机的字母大写时,使用语法1删除失败,采用语法2方式

 

2.函数创建

语法如下

delimiter$$
create function 函数名称(参数列表) returns返回类型
begin
sql语句
end
$$
delimiter ;

  • 说明:delimiter用于设置分割符,默认为分号
  • 在“sql语句”部分编写的语句需要以分号结尾,此时回车会直接执行,所以要创建存储过程前需要指定其它符号作为分割符,此处使用//,也可以使用其它字符

 

查看python数据库中的函数

select name,type from mysql.procwhere db='python';

 

调用语法如下:select 函数名称(参数列表);

删除函数语法如下:dropfunction 函数名称;

 

临时变量声明临时变量,只能在 begin ... end 体重语法如下

declare变量名 类型 default 默认值;
例:declare x varchar(100);

设置变量值,语法如下

set 变量名=;
例:set x='abc';

 

用户变量/会话变量

只有在当前连接用户有效,其他连接用户无法访问

使用@标识声明用户变量

使用 select 来查看用户变量

 

 

系统变量

任何一个用户都可以访问

使用 @@来标识系统变量

使用 select 来查看系统变量

 

函数判断

语法如下

if 条件1 then
语句1;
elseif 条件2 then
语句2;
else
语句
end if;

 

循环

语法如下

while 条件do
语句;
end while;

退出循环:leave,相当于break

退出本次循环:iterate,相当于continue

 

3.存储过程创建

语法如下

delimiter//
create procedure存储过程名称(参数列表)
begin
sql语句
end
//
delimiter ;

说明:delimiter用于设置分割符,默认为分号

在“sql语句”部分编写的语句需要以分号结尾,此时回车会直接执行,所以要创建存储过程前需要指定其它符号作为分割符,此处使用//,也可以使用其它字符

 

查看表结构descmysql.proc\G;

查看python数据库的所有存储过程

select name,type,body from mysql.procwhere db='python';

 

调用语法如下:call 存储过程(参数列表);

删除语法如下:drop procedure 存储过程名称;

 

存储过程和函数的区别

相同点

1.存储过程和函数都是为了可重复的执行操作数据库的 sql 语句的集合.

2.存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中缓存中已经编译好的sql, 不需要重复编译

3.减少网络交互,减少网络访问流量

不同点

1.标识符不同,函数的标识符是 function, 过程:procedure

2.函数中有返回值,且必须有返回值,而过程没有返回值,但是可以通过设置参数类型(in,out)来实现多个参数或者返回值

3.函数使用 select 调用,存储过程需要使用 call 调用

4.select 语句可以在存储过中调用,但是除了 select ... into 之外的 select 语句都不能再函数中调用

5.通过 in out 参数,过程相关函数更加灵活,可以返回多个结果

6.在实际开发中根据个人喜好选择使用函数或者存储过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL2008中Merge的用法

SQL2008中Merge的用法 在SQL2008中,新增了一个关键字:Merge,这个和Oracle的Merge的用法差不多,只是新增了一个delete方法而已。下面就是具体的使用说明: 首先是对merge的使用说明: merge [into][目标表]usi…

LeetCode 1146. 快照数组(哈希map + 有序map)

文章目录1. 题目2. 解题1. 题目 实现支持下列接口的「快照数组」- SnapshotArray: SnapshotArray(int length) - 初始化一个与指定长度相等的 类数组 的数据结构。初始时,每个元素都等于 0。void set(index, val) - 会将指定索引 index 处的元素设置为…

12.MYSQL高级(二)

1.视图(重点 视图本质就是对查询的封装,定义视图,建议以v_开头 create view 视图名称 as select语句; 例:创建视图,查询学生对应的成绩信息 create view v_stu_sco as select students.*,scores.score from scores in…

1.NoSQL与MongoDB简介

NoSQL:非关系型数据库 使用范围:论坛、博客、sns、微博 NoSQL优势: 1.易扩展 2.数据量大,高性能 3.灵活的数据模型 4.高可用 MongoDB特点 模式自由 :可以把不同结构的文档存储在同一个数据库里 面向集合的存储:…

LeetCode 825. 适龄的朋友(计数排序+前缀和)

文章目录1. 题目2. 解题1. 题目 人们会互相发送好友请求&#xff0c;现在给定一个包含有他们年龄的数组&#xff0c;ages[i] 表示第 i 个人的年龄。 当满足以下任一条件时&#xff0c;A 不能给 B&#xff08;A、B不为同一人&#xff09;发送好友请求&#xff1a; age[B] <…

[转]java 组播

1. 组播知识介绍&#xff1a; http://blog.csdn.net/happy_david/article/details/1569209 2. java 组播实现&#xff1a;来自&#xff1a; http://blog.csdn.net/a352193394/article/details/7395600 下面来演示一下使用Java Socket的组播类实现一个组播的小案例 首先是接收端…

2.MongoDB基本操作

数据库命令 连接成功后&#xff0c;默认使用test数据库 查看当前数据库名称&#xff1a;db 查看所有数据库名称&#xff1a;show dbs 切换数据库&#xff0c;如果数据库不存在也并不创建&#xff0c;直到插入数据或创建集合时数据库才被创建&#xff1a;use 数据库名称 删除当…

LeetCode 954. 二倍数对数组(map计数)

文章目录1. 题目2. 解题1. 题目 给定一个长度为偶数的整数数组 A&#xff0c;只有对 A 进行重组后可以满足 对于每个 0 < i < len(A) / 2&#xff0c;都有 A[2 * i 1] 2 * A[2 * i] 时&#xff0c;返回 true&#xff1b;否则&#xff0c;返回 false。 示例 1&#xf…

jsp用tags传递参数

<computer:trangleTag sideA"12" sideB"12" sideC"12"/>表示以字符串传递sideABC <computer:trangleTag sideA“uname” sideB“ustudentcode” sideC“upassword” />表示传递的字符串是uname&#xff0c;ustudentcode&#xff0c;…

3.MongoDB数据查询

数据查询 基本查询 方法find()&#xff1a;查询&#xff1a;db.集合名称.find({条件文档}) 方法findOne()&#xff1a;查询&#xff0c;只返回第一个&#xff1a;db.集合名称.findOne({条件文档}) 方法pretty()&#xff1a;将结果格式化&#xff1a;db.集合名称.find({条件文档…

Java增强之并发编程

Java增强之并发编程 1 多线程 1.1 进程及线程 程序启动的时候&#xff0c;电脑会把这个程序加载到内存&#xff0c;在内存中需要给当前的程序分配一段的独立运行的空间&#xff0c;这个空间就专门负责这个程序的运行。每个应用程序运行都需要在内存中有自己独立的运行空间&a…

LeetCode 732. 我的日程安排表 III(差分思想)

文章目录1. 题目2. 解题1. 题目 实现一个 MyCalendar 类来存放你的日程安排&#xff0c;你可以一直添加新的日程安排。 MyCalendar 有一个 book(int start, int end)方法。它意味着在start到end时间内增加一个日程安排&#xff0c;注意&#xff0c;这里的时间是半开区间&…

4.聚合aggregate

聚合(aggregate)主要用于计算数据&#xff0c;类似sql中的sum()、avg() 语法&#xff1a;db.集合名称.aggregate({管道:{表达式}}) 管道 管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的输入 ps ajx | grep mongo 常用管道 $group&#xff1a;将集合中的…

WebView退出时停止视频播放

网上比较流行的方法: 在activity的onPause函数中调用webview的onPause函数。 弊端:视频虽然停止播放但是还是在从网上加载数据(观察流量统计); 比较好的方法: 在activity的onPause函数中调用webview的onPause函数。 在activity的onDestroy函数中webview.loadUrl("file:///…

5.MongoDB索引

mongodb支持索引&#xff0c;以提升查询速度 步骤一&#xff1a;创建大量数据 在命令行中执行如下代码&#xff0c;向集合中插入10万条文档 注意&#xff1a;不要在图形界面中执行&#xff0c;因为软件原因无法插入10万条数据就会中断执行 for(i0;i<100000;i){ db.t1.in…

Hadoop学习之整体介绍及环境搭建

Hadoop学习之整体介绍及环境搭建 1 大数据概述 1.1 什么是大数据 数据(data)是事实或观察的结果&#xff0c;是对客观事物的逻辑归纳&#xff0c;是用于表示客观事物的未经加 工的的原始素材。 大数据&#xff1a;传统处理方式无法解决的不仅大而且复杂的数据集的存储和计算…

05.序列模型 W2.自然语言处理与词嵌入

文章目录1. 词汇表征2. 使用词嵌入3. 词嵌入的特性4. 嵌入矩阵5. 学习词嵌入6. Word2Vec7. 负采样8. GloVe 词向量9. 情感分类10. 词嵌入除偏作业参考&#xff1a;吴恩达视频课深度学习笔记自然语言处理与词嵌入 Natural Language Processing and Word Embeddings 1. 词汇表征…

sql获取总列数

Select count(*) from syscolumns where object_name(id)表名可以获取表的列数转载于:https://www.cnblogs.com/haoqi/p/3388171.html

6.MongoDB备份与恢复

备份 语法 mongodump -h dbhost -d dbname -o dbdirectory -h&#xff1a;服务器地址&#xff0c;也可以指定端口号 -d&#xff1a;需要备份的数据库名称 -o&#xff1a;备份的数据存放位置&#xff0c;此目录中存放着备份出来的数据 例1 sudo mkdir test1bak sudo mongodump…

Hadoop学习之HDFS

Hadoop学习之HDFS 1 HDFS相关概念 1.1 设计思路 分散存储&#xff0c;冗余备份。 分散存储&#xff1a;大文件被切割成小文件&#xff0c;使用分而治之的思想让多个服务器对同一个文件进行联合管理&#xff1b; 冗余备份&#xff1a;每个小文件做冗余备份&#xff0c;并且…