Navicat导出表结构到Excel或Word

Navicat导出表结构到Excel或Word

sql语句

language-sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
cols.COLUMN_NAME AS 字段,
cols.COLUMN_TYPE AS 数据类型,
IF(pks.CONSTRAINT_TYPE = 'PRIMARY KEY', 'YES', 'NO') AS 是否为主键,
IF(idxs.INDEX_NAME IS NOT NULL, 'YES', 'NO') AS 是否为索引,
cols.IS_NULLABLE AS 是否为空,
cols.COLUMN_DEFAULT AS 默认值,
cols.COLUMN_COMMENT AS 备注
FROM
INFORMATION_SCHEMA.COLUMNS AS cols
LEFT JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS kc ON kc.TABLE_SCHEMA = cols.TABLE_SCHEMA AND kc.TABLE_NAME = cols.TABLE_NAME AND kc.COLUMN_NAME = cols.COLUMN_NAME
LEFT JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS pks ON pks.TABLE_SCHEMA = kc.TABLE_SCHEMA AND pks.TABLE_NAME = kc.TABLE_NAME AND pks.CONSTRAINT_TYPE = 'PRIMARY KEY' AND kc.CONSTRAINT_NAME = pks.CONSTRAINT_NAME
LEFT JOIN
INFORMATION_SCHEMA.STATISTICS AS idxs ON idxs.TABLE_SCHEMA = cols.TABLE_SCHEMA AND idxs.TABLE_NAME = cols.TABLE_NAME AND idxs.COLUMN_NAME = cols.COLUMN_NAME
WHERE
cols.TABLE_SCHEMA = 'db' -- 替换为您的数据库名称
AND cols.TABLE_NAME = 'table' -- 替换为您的表名称
ORDER BY
cols.ORDINAL_POSITION ASC; -- 按列在表中的顺序排列

复制到excel

在查询结果中,Ctrl+A全选,然后复制。
到Excel中,自己写好表头,然后粘贴,就复制到Excel了。

复制到Word

从Excel全选数据,就可以直接复制到Word。

AutoHotKey(V2)控制Windows扩展屏视频并开机自启

AutoHotKey(V2)控制Windows扩展屏视频并开机自启

起因是因为买了一块扩展屏幕,经常用来播放教学视频,而主屏幕用于实战操作,但是每次对视频进行控制时都要把鼠标移动过去,点击,再回来找到原来的代码位置,很难受。所以用AutoHotKey写了一个快捷键脚本。

一、参考资料

官方AutoHotKey V2 Docs

Windows设置开机自启

二、脚本功能介绍

language-python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
CoordMode "Mouse", "Screen"  ; 将鼠标坐标模式设置为整个屏幕
SendMode "Event" ; 设置发送模式为事件模式

ExtendBilibili(key, count)
{

xpos := 0
ypos := 0
originalWinHwnd := WinExist("A") ; 获取当前活动窗口的HWND
MouseGetPos &xpos, &ypos
; MsgBox Format("1- {1} {2}", xpos, ypos)
MouseMove 2300, 1050, 0 ; 移动到视频范围
MouseClick "left", , , , 5 ; 点击一处无关紧要的地方,使视频应用聚焦
Loop count ; 根据提供的次数重复发送键
{

Send key
}
; MsgBox Format("2- {1} {2}", xpos, ypos)
Sleep 50
MouseMove xpos, ypos, 0 ; 鼠标移回原处
WinActivate("ahk_id " . originalWinHwnd) ; 激活原始窗口
}

#!Space:: ; Win + Alt + Space
{

ExtendBilibili("{Space}", 1)
}

#!Left:: ; Win + Alt + Left
{

ExtendBilibili("{Left}", 3)
}

#!Right:: ; Win + Alt + Right
{

ExtendBilibili("{Right}", 2)
}

#!Up:: ; Win + Alt + Up
{

xpos := 0
ypos := 0
originalWinHwnd := WinExist("A") ; 获取当前活动窗口的HWND
MouseGetPos &xpos, &ypos
MouseMove 2300, 1050, 1
MouseClick "left", , , , 0
Sleep 2000
MouseMove xpos, ypos, 0
WinActivate("ahk_id " . originalWinHwnd) ; 激活原始窗口
}

Idea连接Docker在本地(Windows)开发SpringBoot

Idea连接Docker在本地(Windows)开发SpringBoot

当一些需要的服务在docker容器中运行时,因为docker网络等种种原因,不得不把在idea开发的springboot项目放到docker容器中才能做测试或者运行。

1. 新建运行配置

2. 修改运行目标

3. 设置新目标Docker

推荐使用openjdk镜像即可,运行选项就是平时运行Docker的形参,--rm是指当容器停止时自动删除,-p暴露端口,一般都需要。包括--network指定网络有需要也可以加上。

等待idea自动执行完成,下一步

保持默认即可,创建。

4. 选择运行主类

根据自己的情况选择一个。

5. 运行

成功。

安装Cygwin的包管理器apt-cyg并安装tree命令

安装Cygwin的包管理器apt-cyg并安装tree命令

一、从官网添加必要软件包

1. 安装

因为第一次安装cygwin时走的都是默认选项,所以这里是二次添加额外包。
打开官网,下载安装程序。

下载好后运行

一路确定直到软件包选择页面
添加以下包,双击对应行的新增列即可添加包。

  • dos2unix
  • wget 下一步会展示包的更改,在里面检查有没有上述两个包。
    然后一路确认。

2. 检查

回到cygwin命令行看看确认一下

language-txt
1
2
3
4
5
6
7
8
9
$ wget -V
GNU Wget 1.21.4 在 cygwin 上编译。


$ dos2unix -V
dos2unix 7.5.1 (2023-08-29)
Cygwin版本。
有Unicode UTF-16 支持。

二、安装apt-cyg

1. 下载安装

这里是apt-cyg的官方仓库
cygwin命令行中用git去下载它,或者浏览器下载复制到cygwin当中。

language-bash
1
2
3
4
5
6
7
8
#使用以下命令从GitHub克隆apt-cyg
git clone https://github.com/transcode-open/apt-cyg
#进入apt-cyg目录
cd apt-cyg
#将apt-cyg安装到/bin目录下
install apt-cyg /bin
#使用apt-cyg安装tree命令
apt-cyg install tree

你可能会遇到以下报错

language-txt
1
2
3
4
$ apt-cyg install tree
/usr/bin/apt-cyg: 行 25: $'\r': 未找到命令
/usr/bin/apt-cyg: 行 121: 未预期的记号 "$'{\r'" 附近有语法错误
'usr/bin/apt-cyg: 行 121: `function wget {

如果遇到就看下面修复章节

2.修复

受windows文件系统影响,apt-cyg一些特殊符号不被linux认识。具体可以参考以下帖子:

使用dos2unixapt-cyg从windows系统版本转为linux系统版本。

language-txt
1
2
$ dos2unix /usr/bin/apt-cyg 
dos2unix: 正在转换文件 /usr/bin/apt-cyg 为Unix格式...

三、安装tree命令

1. 安装

修复好后,再次执行apt-cyg install tree安装即可。

language-bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mumu@DESKTOP-DPT8S0M ~/Software/apt-cyg
$ apt-cyg install tree
Installing tree
tree-1.7.0-1.tar.xz: 失败
sha512sum: 警告:1 个校验和不匹配
--2024-01-05 17:41:48-- https://mirrors.163.com/cygwin//x86_64/release/tree/tree-1.7.0-1.tar.xz
正在解析主机 mirrors.163.com (mirrors.163.com)... 60.191.80.11
正在连接 mirrors.163.com (mirrors.163.com)|60.191.80.11|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:46456 (45K) [application/octet-stream]
正在保存至: "tree-1.7.0-1.tar.xz"

tree-1.7.0-1.tar.xz 100%[==================================================================================================================================>] 45.37K 88.5KB/s 用时 0.5s

2024-01-05 17:41:50 (88.5 KB/s) - 已保存 "tree-1.7.0-1.tar.xz" [46456/46456])

tree-1.7.0-1.tar.xz: 成功
Unpacking...
Package tree installed

2.检验

language-bash
1
2
3
4
5
6
7
8
9
10
11
$ tree -L 3
.
└── Software
└── apt-cyg
├── apt-cyg
├── changelog.md
├── LICENSE
├── readme.md
└── status.md

2 directories, 5 files
基数排序和快速排序谁快(随机数测试)?

基数排序和快速排序谁快(随机数测试)?


前言

什么?你说归并???
开了个1百万的数据量,差点以为是鲁大师点烟。

一、测试结果对比

使用的是win10的子系统ubuntu编译运行

计算时间使用的是< cstdlib>里的clock()函数,因为数量很小,所以最后结果没除CLOCKS_PER_SEC

基数排序会快一些,但是消耗空间接近2倍更多。
2倍,才2倍?
我参考了这个优化—链接

二、附上代码,大家可以自己手动测试测试

language-cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include<iostream>
#include<cstdio>
#include<ctime>
#include<algorithm>
#include<cstdlib>
using namespace std;

int getMax(int* p,int len)
{

int m=p[0];
for(int i=1;i<len;++i)
{
if(p[i]>m){
m=p[i];}}
return m;
}

void count_sort(int* p,int len,int cot)
{

int temp[len];//不报错???
int buckets[10]={
0};
for(int i=0;i<len;++i)
{
buckets[(p[i]/cot)%10]++;}
for(int i=1;i<10;++i)
{
buckets[i]+=buckets[i-1];}
for(int i=len-1;i>=0;--i)
{

temp[buckets[(p[i]/cot)%10]-1]=p[i];
buckets[(p[i]/cot)%10]--;
}
for(int i=0;i<len;++i)
{
p[i]=temp[i];}
}


int main()
{

srand((unsigned)time(NULL));
clock_t start,end;
int arr[100];
int len=100;
for(int i=0;i<len;++i)
{
arr[i]=rand()%len;}

start=clock();

//count_sort
int maxA=getMax(arr,len);
for(int cot=1;maxA/cot>0;cot*=10)
{
count_sort(arr,len,cot);}

//sort(arr,arr+len);

end=clock();
printf("\ntime=%.6lf\n",(double)(end-start));//CLOCKS_PER_SEC
// for(int i=0;i<len;++i)
// {printf("%d ",arr[i]);}

return 0;
}