Mysql 手册

这篇博客介绍了MySQL的基本操作,包括登录、创建数据库和设置用户权限。重点讲解了SQL语句中的LIMIT和GROUP_CONCAT()函数,解释了GROUP_CONCAT如何结合GROUP BY用于聚合同一组的列,并通过示例展示了其用法和配置影响。最后分享了一个查看数据库IP连接数的小技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本操作

1.登录到MySQl

mysql -h hostname -u username -p (hostname默认是localhost, username默认是当前用户名)

例如:以root用户的话 输入如下命令

# mysql -p

2.创建数据库 

>mysql create database dbname;

3.设置用户与权限

3.1 创建用户: GRANT

GRANT privileges [columns]

ON item

TO user_name [IDENTIFIED BY 'password']

[REQUIRE ssl_options]

[WITH [GRANT OPTION | limit_options] ]


grant select, insert, update, delete

on dbname.*

to username identified by 'password';


SQL语句语法

show

desc 表名;                                  // 表信息 
describe 表名;                            // 表信息 
show create table 表名 ;           // 表创建语句
show columns from 表名;        // 表字段 
show create table table_name;       // 显示create table 语句是否能够创建指定的数据表 
show columns from database_name.table_name;        // 显示表中列名称 
show columns from table_name from database_name;        // 显示表中列名称 


show databases;                     // 显示mysql中所有数据库的名称
show table status;                                // 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间 
show table status from 数据库名;         // 数据库状态 
show create database database_name ;        // 显示create database 语句是否能够创建指定的数据库 
show tables 或 show tables from database_name;       // 显示当前数据库中所有表的名称 


show processlist;        // 显示系统中正在运行的所有进程,也就是当前正在执行的查询。
                                   //大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。 
show grants for user_name@localhost;         // 显示一个用户的权限,显示结果类似于grant 命令 
show index from table_name;         // 显示表的索引 show status;解释:显示一些系统特定资源的信息,例如,正在运行的线程数量 
show variables;         // 显示系统变量的名称和值 show privileges;解释:显示服务器所支持的不同权限 

show engies;         // 显示安装以后可用的存储引擎和默认引擎。 
show innodb status ;         // 显示innoDB存储引擎的状态 
show logs;         // 显示BDB存储引擎的日志 
show warnings;        //显示最后一个执行的语句所产生的错误、警告和通知 
show errors;        // 只显示最后一个执行语句所产生的错误

limit

1、查询第一行记录:

select * from table limit 1

2、查询第n行到第m行记录

select * from table1 limit n-1,m-n;
SELECT * FROM table LIMIT 5,10;返回第6行到第15行的记录
select * from employee limit 3,1; // 返回第4行
3、查询前n行记录
select * from table1 limit 0,n;

select * from table1 limit n;
4、查询后n行记录
 --> 需要提前设置自增主键 id
select * from table1 order by id desc limit n;//倒序排序,取前n行 id为自增形式
5、查询最后一条记录:
 --> 需要提前设置自增主键 id
select max(id) from table;
6、查询一条记录($id)的下一条记录
select * from table1 where id>$id order by id asc limit 1
7、查询一条记录($id)的上一条记录
select * from table1 where id<$id order by id desc limit 1 

INFORMATION_SCHEMA信息数据库


information_schema数据库是在mysql的版本5.0之后产生的,一个虚拟数据库,物理上并不存在。
information_schema数据库类似与“数据字典”,提供了访问数据库元数据的方式,即数据的数据。比如数据库名或表名,列类型,访问权限(更加细化的访问方式)。


SCHEMATA表
---SCHEMATA表提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表
---TABLES表提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间,等等信息。是show tables from schemaname的结果取之此表。
COLUMNS表
---COLUMNS表提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
STATISTICS表
---STATISTICS表提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。
USER_PRIVILEGES表
---USER_PRIVILEGES(用户权限)表给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。
SCHEMA_PRIVILEGES表
---SCHEMA_PRIVILEGES(方案权限)表给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。
TABLE_PRIVILEGES表
---TABLE_PRIVILEGES(表权限)表给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。
COLUMN_PRIVILEGES表
---COLUMN_PRIVILEGES(列权限)表给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。
CHARACTER_SETS表
---CHARACTER_SETS(字符集)表提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。
COLLATIONS表
---COLLATIONS表提供了关于各字符集的对照信息。
COLLATION_CHARACTER_SET_APPLICABILITY表
---COLLATION_CHARACTER_SET_APPLICABILITY表指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。
TABLE_CONSTRAINTS表
---TABLE_CONSTRAINTS表描述了存在约束的表。以及表的约束类型。
KEY_COLUMN_USAGE表
---KEY_COLUMN_USAGE表描述了具有约束的键列。
ROUTINES表
---ROUTINES表提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
VIEWS表
---VIEWS表给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。
TRIGGERS表
---TRIGGERS表提供了关于触发程序的信息。必须有super权限才能查看该表。
另外,在未来的版本中会有新的表添加。

【注】information_schema是一个由数据库的元数据组成的数据库。里面存储的是mysql的数据库基本信息。并随时改变。用于查看信息以及系统决策时作为重要的信息提供
者。 

performance_schema数据库部分表说明

  PERFORMANCE_SCHEMA这个功能默认是关闭的。需要设置参数: performance_schema 才可以启动该功能,这个参数是静态参数,只能写在my.cnf 中 不能动态修改。 
setup_table : 设置表,配置监控选项。 
current_events_table : 记录当前那些thread 正在发生什么事情。 
history_table : 发生的各种事件的历史记录表 
summary_table : 对各种事件的统计表 
setup_consumers\ Setup_instruments : 描述各种事件, 设置哪些事件能够被收集 
setup_instruments : 描述这个数据库下的表名以及是否开启监控。 
setup_timers : 描述 监控选项已经采样频率的时间间隔 
Threads : 监控服务器所有连接 
Performance_timers : 设置一些监控信息, 指定mysql服务可用的监控周期,CYCLE表示按每秒检测2603393034次, 目前 performance-schema 只支持 ‘wait’ 时间的监控,代码树上 wait/ 下的函数都可以监控到。

 mysql数据库部分表说明 

在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表有: 
1、user表: 用户列、权限列、安全列、资源控制列 
2、db表 : 用户列、权限列 
3、host表 
4、table_priv表 
5、columns_priv表 
6、proc_priv表

函数

mysql group_concat()

group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。比较抽象,难以理解。

通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

group_concat函数应该是在内部执行了group by语句,这是我的猜测。

1.测试语句:

?
1
SELECT group_concat(town) FROM `players` group by town

结果去查找town中去查找哪些值是一样的,如果相等,就全部列出来,以逗号分割进行列出,如下:

group_concat(town)

北京,北京
长沙

2.测试:

?
1
2
SELECT group_concat( town )
FROM players

结果:

group_concat(town)

长沙,北京,北京,

上面是否可以证明,group_concat只有与group by语句同时使用才能产生效果? 下面进行了实际测验

3.测试常量对group_concat()的配置影响:

?
1
SET @@GROUP_CONCAT_MAX_LEN=4

手册中提到设置的语法是这样的:

?
1
SET [SESSION | GLOBAL ] group_concat_max_len = val;

两种有什么区别?

?
1
SET @@ global .GROUP_CONCAT_MAX_LEN=4;

global可以省略,那么就变成了:SET @@GROUP_CONCAT_MAX_LEN=4;

4.使用语句

?
1
SELECT group_concat(town) FROM `players`

结果得到:
group_concat(town)

长沙,北京,长沙,北京

结论:group_concat()函数需要与group by语句在一起使用,才能得到需要的效果。

原因可以这样理解:group_concat()得到是属于x组的所有成员(函数里面列参数指定需要显示哪些字段)。x组从哪里来?如果没有group by进行指定,那么根本不知道group_concat()根据哪个分组进行显示出成员。 所以,像上面没有group by子句的时候,就显示了长沙和北京。

实际中什么时候需要用到这个函数?

假如需要查询的结果是这样:左边显示组名,右边想显示该组别下的所有成员信息。用这个函数,就可以省去很多事情了。

另外,假如我这样使用:SELECT group_concat( name, sex ) FROM `players` town。意义不大。group_concat()指定一个列是最好的情况。如果指定了多个列。那么显示结果类似这样:

?
1
group_concat( name ,sex)

王滔,王小明男,刘惠女,舒明女


小技巧

使用如下语句可以查看当前数据库的各IP连接数

select SUBSTRING_INDEX(host,':',1) as ip , count(*)
from information_schema.processlist group by ip



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值