表生成Excel
SELECT
COLUMN_NAME 列名,
COLUMN_TYPE 数据类型,
DATA_TYPE 字段类型,
CHARACTER_MAXIMUM_LENGTH 长度,
IS_NULLABLE 是否为空,
COLUMN_DEFAULT 默认值,
COLUMN_COMMENT 备注
FROM
INFORMATION_SCHEMA. COLUMNS
WHERE
table_schema = 'sxepp' AND table_name = 'sx_jc_car'
- sxepp为数据库名称,到时候只需要修改成你要导出表结构的数据库即可
- sx_jc_car为表名,到时候换成你要导出的表的名称
- table_name 如果不写的话,默认会查询出所有表中的数据,这样可能就分不清到底哪些字段是哪张表中的了,所以还是建议写上要导出的名名称
插入大量数据
创建随机生成字符串函数
delimiter $$
CREATE FUNCTION rand_string(n int) RETURNS varchar(255)
begin
declare chars_str varchar(100)
default "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
declare return_str varchar(255) default "";
declare i int default 0;
while i < n do
set return_str=concat(return_str,substring(chars_str,floor(1+rand()*62),1));
set i= i+1;
end while;
return return_str;
end $$
delimiter ;
创建循环插入函数
delimiter $$
CREATE PROCEDURE `insert_data`(IN n int)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE (i <= n ) DO
INSERT into system_inventory (i_on,related_units,opening_date ) VALUEs (rand_string(20),FLOOR(RAND() * 100) ,now() );
set i=i+1;
END WHILE;
END $$
delimiter ;
执行插入函数
call insert_data(10000);
递归查询
查询子节点的函数 查询时 包含自身(示例)
create function getChildrenByFolder(folderId INT)
returns varchar(4000)
BEGIN
DECLARE temp VARCHAR(4000);
DECLARE tempChild VARCHAR(4000);
SET temp = '';
SET tempChild = CAST(folderId AS CHAR);
WHILE tempChild IS NOT NULL
DO
SET temp = CONCAT(temp,',',tempChild);
SELECT GROUP_CONCAT(folder_id) INTO tempChild FROM system_base_folder WHERE FIND_IN_SET(parent_id,tempChild) > 0;
END WHILE;
RETURN temp;
END
使用函数 进行递归查询
SELECT * FROM system_base_folder
WHERE FIND_IN_SET(folder_id,getChildrenByFolder(4));
查询父节点 查询的时候 包含自身(示例)
CREATE FUNCTION `getParentByOrganizationr`(organizationId longtext) RETURNS longtext CHARSET utf8
BEGIN
DECLARE temp longtext default '';
DECLARE tempParent longtext default organizationId;
WHILE organizationId is not null do
SET temp =(SELECT DISTINCT parent_id FROM sys_organization WHERE organization_id = organizationId);
IF temp is not null THEN
SET tempParent = concat(tempParent, ',', temp);
SET organizationId = temp;
ELSE
SET organizationId = temp;
END IF;
END WHILE;
return tempParent;
END
使用函数 进行递归查询
SELECT * FROM sys_organization
WHERE FIND_IN_SET(organization_id ,getParentByOrganizationr(4))
Tips:如果创建函数失败出现并为以下错误,请参考SQL常见问题
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
MYSQL8.0及其版本以上 可以使用 WITH RECURSIVE 实现递归
写法比较简单,也比较灵活,但是只适用于MySQL8.0及以上版本,这种写法其实和 PostgreSQL 的写法是一样的。
局域网数据库共享
追加用户/派发权限
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES
局域网用户访问缓存清空
flush hosts
也可以使用Navicat工具添加用户并分配指定库和权限
修改最大连接数
查看最大连接数
SHOW VARIABLES LIKE '%max_connections%';
修改最大连接数
SET GLOBAL max_connections = 2000;
修改GROUP_CONCAT最大长度的限制
GROUP_CONCAT有个最大长度的限制,超过最大长度就会被截断掉
查看目前最大获得长度
SELECT @@global.group_concat_max_len;
修改最大长度
SET GLOBAL group_concat_max_len=18446744073709551615 ;
mysql版本号 | 最小值 | 最大值 | 备注 |
---|---|---|---|
32 位 | 4 | 4294967295 | 2^32 |
64 位 | 4 | 18446744073709551615 | 2^64) |
有效最大长度受max_allowed_packet的值约束,默认值为4M
查看目前配置
show VARIABLES like '%max_allowed_packet%';
修改MySQL配置文件中my.conf或my.ini中添加或修改:
#[mysqld]
max_allowed_packet = 500M
group_concat_max_len=18446744073709551615
修改wait_timeout
interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项,说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。
查看非交互式超时时间
SHOW GLOBAL VARIABLES LIKE 'wait_timeout';
修改非交互式超时时间,单位为毫秒
SET GLOBAL wait_timeout = 604800;
修改interactive_timeout
interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项,说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。
查看交互式超时时间
SHOW GLOBAL VARIABLES LIKE 'interactive_timeout';
修改交互式超时时间(毫秒)
SET GLOBAL interactive_timeout = 604800;
查看所有用户的当前连接
SHOW FULL PROCESSLIST;
查看MySQL服务器所有状态
SHOW STATUS;
属性 | 说明 |
---|---|
Aborted_clients | 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。 |
Aborted_connects | 尝试已经失败的MySQL服务器的连接的次数。 |
Connections | 试图连接MySQL服务器的次数。 |
Created_tmp_tables | 当执行语句时,已经被创造了的隐含临时表的数量。 |
Delayed_insert_threads | 正在使用的延迟插入处理器线程的数量。 |
Delayed_writes | 用INSERT DELAYED写入的行数。 |
Delayed_errors | 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。 |
Flush_commands | 执行FLUSH命令的次数。 |
Handler_delete | 请求从一张表中删除行的次数。 |
Handler_read_first | 请求读入表中第一行的次数。 |
Handler_read_key | 请求数字基于键读行。 |
Handler_read_next | 请求读入基于一个键的一行的次数。 |
Handler_read_rnd | 请求读入基于一个固定位置的一行的次数。 |
Handler_update | 请求更新表中一行的次数。 |
Handler_write | 请求向表中插入一行的次数。 |
Key_blocks_used | 用于关键字缓存的块的数量。 |
Key_read_requests | 请求从缓存读入一个键值的次数。 |
Key_reads | 从磁盘物理读入一个键值的次数。 |
Key_write_requests | 请求将一个关键字块写入缓存次数。 |
Key_writes | 将一个键值块物理写入磁盘的次数。 |
Max_used_connections | 同时使用的连接的最大数目。 |
Not_flushed_key_blocks | 在键缓存中已经改变但是还没被清空到磁盘上的键块。 |
Not_flushed_delayed_rows | 在INSERT DELAY队列中等待写入的行的数量。 |
Open_tables | 打开表的数量。 |
Open_files | 打开文件的数量。 |
Open_streams | 打开流的数量(主要用于日志记载) |
Opened_tables | 已经打开的表的数量。 |
Questions | 发往服务器的查询的数量。 |
Slow_queries | 要花超过long_query_time时间的查询数量。 |
Threads_connected | 当前打开的连接的数量。 |
Threads_running | 不在睡眠的线程数量。 |
Uptime | 服务器工作了多少秒。 |