基本操作
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
describe 表名; // 表信息
show create table 表名 ; // 表创建语句
show processlist; // 显示系统中正在运行的所有进程,也就是当前正在执行的查询。
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 12、查询第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数据库类似与“数据字典”,提供了访问数据库元数据的方式,即数据的数据。比如数据库名或表名,列类型,访问权限(更加细化的访问方式)。
---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数据库部分表说明
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数据库部分表说明
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连接数