mysql如何查看和删除用户

Posted N!CE波

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql如何查看和删除用户相关的知识,希望对你有一定的参考价值。

一、mysql如何查看存在多少用户

SELECT COUNT(*) FROM mysql.user;

这将返回一个整数值,表示当前系统中存在多少用户。

另外,你也可以使用以下命令查看当前系统中的所有用户:

SELECT User FROM mysql.user;

这将返回一个包含所有用户名称的列表。如果你想获取更多有关 MySQL 用户的详细信息,可以查看 mysql.user 表的结构,使用以下命令:

DESC mysql.user;

这将显示 mysql.user 表的列和数据类型。

 

二、如何查看用户是否设置密码  

在 MySQL 中,用户密码是被加密的,不可以直接查看用户密码。但是,可以使用以下方法来重置用户密码或者查看用户是否设置了密码:

  1. 重置用户密码:可以使用以下命令来重置用户的密码:
ALTER USER \'username\'@\'hostname\' IDENTIFIED BY \'new_password\';

其中,username 是要重置密码的用户的用户名,hostname 是要重置密码的用户所在的主机名,new_password 是要设置的新密码。

  1. 查看用户是否设置了密码:可以使用以下命令来查看用户是否设置了密码:
SELECT User, Password FROM mysql.user WHERE User=\'username\';

SELECT User, password_expired FROM mysql.user WHERE User=\'test\';

其中,username 是要查询的用户的用户名。如果密码列(Password)显示为 NULL,则说明该用户没有设置密码。

请注意,MySQL 用户密码是经过加密处理的,不可逆转。因此,除非您已经记录了原始密码或者使用了某种密码恢复工具,否则无法查看用户的明文密码。

 

三、如何删除用户

在 MySQL 中,可以使用以下命令来删除用户:

DROP USER \'username\'@\'hostname\';

其中,username 是要删除的用户的用户名,hostname 是要删除的用户所在的主机名。

请注意,在执行此命令之前,请确保该用户没有任何重要的权限或对象(如数据库或表),否则将会对数据库系统造成损坏。此外,请注意删除用户时,也会删除该用户的密码和所有与其关联的权限。因此,建议在删除用户之前,先备份所有相关数据和信息,以免不必要的损失。

 

 

 

  

mysql索引的查看创建和删除

先用个Demo说明下索引的作用

Question:如何根据用户名和密码查询该用户的购物纪录?
这个时候数据库中有2个表;
一个用户信息表; 另一个是购物纪录表;

在购物纪录表创建外键关联用户的ID;(创建索引)
数据库中的查询处理过程:

  1. 首先根据用户名和密码查询到该用户的ID;
  2. 之后再根据此ID检索购物纪录表的纪录!
  3. 这样就能快速的定位到该用户的购物纪录了!

索引的创建

在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。

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)

其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。

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)

table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名不可选。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。

索引的类型

在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。

PRIMARY KEY索引和UNIQUE索引非常类似。事实上,PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引。

下面的SQL语句对students表在sid上添加PRIMARY KEY索引。

ALTER TABLE students ADD PRIMARY KEY (sid)

索引的删除

可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。

DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY

其中,前两条语句是等价的,删除掉table_name中的索引index_name。
第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。
如果从表中删除了某列,则索引会受到影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

索引的查看

mysql> show index from tblname;
mysql> show keys from tblname;
字段名称字段含义
Table表的名称
Non_unique如果索引不能包括重复词,则为0;如果可以,则为1
Key_name索引的名称
Seq_in_index索引中的列序列号,从1开始
Column_name列名称
Collation列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)
Cardinality索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大
Sub_part如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL
Packed指示关键字如何被压缩。如果没有被压缩,则为NULL
Null如果列含有NULL,则含有YES。如果没有,则该列含有NO
Index_type用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)

什么情况下使用索引

  • 表的主关键字

自动建立唯一索引
如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)

  • 表的字段唯一约束

ORACLE利用索引来保证数据的完整性
如lc_hj(流程环节)中的lc_bh+hj_sx(流程编号+环节顺序)

  • 直接条件查询的字段

在SQL中用于条件约束的字段
如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)
select * from zl_yhjbqk where qc_bh=’7001’

  • 查询中与其它表关联的字段

字段常常建立了外键关系
如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)
select * from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=’540100214511’

  • 查询中排序的字段

排序的字段如果通过索引去访问那将大大提高排序速度
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字段)

  • 查询中统计或分组统计的字段

select max(hbs_bh) from zl_yhjbqk
select qc_bh,count(*) from zl_yhjbqk group by qc_bh


什么情况下应不建或少见索引

  • 表记录太少

如果一个表只有5条记录,采用索引去访问记录的话,那首先需访问索引表,再通过索引表访问数据表,一般索引表与数据表不在同一个数据块,这种情况下ORACLE至少要往返读取数据块两次。而不用索引的情况下ORACLE会将所有的数据一次读出,处理速度显然会比用索引快。
如表zl_sybm(使用部门)一般只有几条记录,除了主关键字外对任何一个字段建索引都不会产生性能优化,实际上如果对这个表进行了统计分析后ORACLE也不会用你建的索引,而是自动执行全表访问。如:
select * from zl_sybm where sydw_bh=’5401’(对sydw_bh建立索引不会产生性能优化)

  • 经常插入、删除、修改的表

对一些经常处理的业务表应在查询允许的情况下尽量减少索引,如zl_yhbm,gc_dfss,gc_dfys,gc_fpdy等业务表。

  • 数据重复且分布平均的表字段

假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。

  • 经常和主字段一块查询但主字段索引值比较多的表字段

如gc_dfss(电费实收)表经常按收费序号、户标识编号、抄表日期、电费发生年月、操作 标志来具体查询某一笔收款的情况,如果将所有的字段都建在一个索引里那将会增加数据的修改、插入、删除时间,从实际上分析一笔收款如果按收费序号索引就已 经将记录减少到只有几条,如果再按后面的几个字段索引查询将对性能不产生太大的影响。

对千万级MySQL数据库建立索引的事项及提高性能的手段

  • 注意事项:

首先,应当考虑表空间和磁盘空间是否足够。我们知道索引也是一种数据,在建立索引的时候势必也会占用大量表空间。因此在对一大表建立索引的时候首先应当考虑的是空间容量问题。
其次,在对建立索引的时候要对表进行加锁,因此应当注意操作在业务空闲的时候进行。

  • 性能调整方面:

首当其冲的考虑因素便是磁盘I/O。物理上,应当尽量把索引与数据分散到不同的磁盘上(不考虑阵列的情况)。逻辑上,数据表空间与索引表空间分开。这是在建索引时应当遵守的基本准则。

以上是关于mysql如何查看和删除用户的主要内容,如果未能解决你的问题,请参考以下文章

mysql索引的查看创建和删除

如何取消mysql授权并删除用户

如何取消mysql授权并删除用户

如何给mysql用户分配权限

MySQL - 用户权限的查看以及用户删除

mysql查看用户列表,查看用户授权,创建用户授权,删除用户