表生成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'
  1. sxepp为数据库名称,到时候只需要修改成你要导出表结构的数据库即可
  2. sx_jc_car为表名,到时候换成你要导出的表的名称
  3. 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 位442949672952^32
64 位4184467440737095516152^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

查看非交互式超时时间

SHOW GLOBAL VARIABLES LIKE 'wait_timeout';

修改非交互式超时时间,单位为毫秒

SET GLOBAL wait_timeout = 604800;

修改interactive_timeout

查看交互式超时时间

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服务器工作了多少秒。

Last modification:December 8, 2023
如果觉得我的文章对你有用,您可以给博主买一杯果汁,谢谢!