<?xml version="1.0" encoding="utf-8"?>
<ul>
  <li>指定日志文件路径logging.file.path=指定日志文件的名1.只写名字,就生成到当前项目同位置的demo.log2.写名加路径,就生成到指定路径demo.loglogging.file.name=</li>
  <li>SpringMVC配置与开发模式总结ll三种配置方式配置类型实现代码注解要求最终效果全自动直接编写控制器逻辑无额外特殊要求全部使用自动配置默认效果手自一体@Configuration+配置WebMvcConfigurer+配置WebMvcRegistrations不要标注@EnableWebMvc自动配置效果，手动设置部分功能，自定义MVC底层组件全手动@Configuration+配置WebMvcConfigurer标注@EnableWebMvc禁用自动配置效果，全手动设置两种开发模式前后分离模式：@RestController响应JSON数据前后不分离模式：@Controller+Thymeleaf模板引擎</li>
  <li>级别排序（由低到高）ALL→TRACE→DEBUG→INFO→WARN→ERROR→FATAL→OFF日志输出规则：只会打印指定级别及比它优先级更高的日志。各级别说明级别说明ALL打印全部级别的所有日志TRACE追踪框架运行的超详细流程，日常开发几乎不用DEBUG开发调试阶段的细节日志，打印中间变量、方法入参等INFO记录关键业务节点、核心运行状态WARN警告，不影响运行但存在潜在风险ERROR业务错误，程序异常、接口调用失败FATAL致命错误，直接导致程序崩溃OFF完全关闭所有日志记录默认配置没有单独指定级别的类，使用root根配置指定的级别作为默认SpringBoot日志的默认初始级别是INFO</li>
  <li>配置方式#定义分组logging.group.组名=包1,包2,...#设置分组的日志级别logging.level.组名=级别</li>
  <li>Ubuntu24使用netplan，yaml格式严格缩进，不能用Tab，只能空格！Linux设置静态IP，就是让机器重启后地址不变。方便SSH远程连接，不用每次查IP。搭建网站、数据库、集群服务时，其他设备能稳定访问。防火墙规则、端口映射、内网同步任务也不会因IP变动失效。缺点是要规划地址，容易出现IP冲突。第一步：设置VMware的虚拟网络打开VMware，进入编辑-&gt;虚拟网络编辑器：按照下图进行配置，其中子网IP192.168.100.0决定了以后的网段：配置完上述设置后，进行NAT设置，主要配置网关地址：完整的配置参考：第二步：修改Ubuntu网卡信息主要是查看网卡的名称，修改对应的Ubuntu的网卡配置信息，最后重启网卡。查看网卡ipaddr运行该命令后会输出网卡的基本信息，找到你的网卡名称，如我的输出如下：zjc@ubuntu-24-dev:~$ipaddr1:lo:&lt;LOOPBACK,UP,LOWER_UP&gt;mtu65536qdiscnoqueuestateUNKNOWNgroupdefaultqlen1000link/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8scopehostlovalid_lftforeverpreferred_lftforeverinet6::1/128scopehostnoprefixroutevalid_lftforeverpreferred_lftforever2:ens32:&lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt;mtu1500qdiscfq_codelstateUPgroupdefaultqlen1000link/ether00:0c:29:a2:18:d1brdff:ff:ff:ff:ff:ffaltnameenp2s0inet192.168.100.128/24brd192.168.100.255scopeglobalens32valid_lftforeverpreferred_lftforeverinet6fe80::20c:29ff:fea2:18d1/64scopelinkvalid_lftforeverpreferred_lftforever那么我的网卡名称就是ens32，接下来修改配置时候要看准这个网卡，不要修改错误。查看并修改网卡配置文件首先进入网卡的配置目录/etc/netplan/，然后拷贝一份保存起来，防止修改出错后以后上不了网，再进行编辑：zjc@ubuntu-24-dev:/etc/netplan$cd/etc/netplan/zjc@ubuntu-24-dev:/etc/netplan$pwd/etc/netplanzjc@ubuntu-24-dev:/etc/netplan$ls50-cloud-init.yamlzjc@ubuntu-24-dev:/etc/netplan$cp50-cloud-init.yaml50-cloud-init.yaml.bakzjc@ubuntu-24-dev:/etc/netplan$ls50-cloud-init.yaml50-cloud-init.yaml.bak备份完成后，使用vim编辑配置并保存，修改后的配置示例如下：network:version:2ethernets:ens32:dhcp4:falsedhcp6:falseaddresses:[192.168.100.128/24]optional:trueroutes:-to:defaultvia:192.168.100.2nameservers:addresses:[114.114.114.114,8.8.8.8]注意：Ubuntu进来默认不是root用户，如果执行命令遇到没有权限Permissiondenied则需要使用sudo进行授权。配置项说明：ens32：你的网卡名192.168.100.128/24：自选静态IP（和VMnet8同网段）via:192.168.100.2：VMwareNAT网关重启网卡一般是先测试网卡，没有问题再正式执行重启命令生效：#测试配置，出错30秒自动回滚sudonetplantry网络正常就回车确认永久生效。测试没问题也可以直接执行：sudonetplanapply验证网络ipaddr#查看IP是否生效ping192.168.100.2#测试通网关pingwww.baidu.com#测试外网ipaddr能正常显示网卡的IP为192.168.100.128则正常，ping网关和外网返回如下则正常：zjc@ubuntu-24-dev:~$ping192.168.100.2PING192.168.100.2(192.168.100.2)56(84)bytesofdata.64bytesfrom192.168.100.2:icmp_seq=1ttl=128time=0.132ms64bytesfrom192.168.100.2:icmp_seq=2ttl=128time=0.185ms64bytesfrom192.168.100.2:icmp_seq=3ttl=128time=0.205ms64bytesfrom192.168.100.2:icmp_seq=4ttl=128time=0.225ms64bytesfrom192.168.100.2:icmp_seq=5ttl=128time=0.237ms64bytesfrom192.168.100.2:icmp_seq=6ttl=128time=0.208ms^C---192.168.100.2pingstatistics---6packetstransmitted,6received,0%packetloss,time5157msrttmin/avg/max/mdev=0.132/0.198/0.237/0.033mszjc@ubuntu-24-dev:~$pingwww.baidu.comPINGwww.a.shifen.com(183.2.172.177)56(84)bytesofdata.64bytesfrom183.2.172.177:icmp_seq=1ttl=128time=11.7ms64bytesfrom183.2.172.177:icmp_seq=2ttl=128time=7.23ms64bytesfrom183.2.172.177:icmp_seq=3ttl=128time=10.5ms64bytesfrom183.2.172.177:icmp_seq=4ttl=128time=8.14ms64bytesfrom183.2.172.177:icmp_seq=5ttl=128time=8.70ms^C---www.a.shifen.compingstatistics---5packetstransmitted,5received,0%packetloss,time4007msrttmin/avg/max/mdev=7.228/9.260/11.710/1.631ms踩坑点yaml缩进必须空格，禁止Tab，格式错直接断网IP、网关必须和VMnet8网段一致，否则不通静态IP不要落在VMwareDHCP地址池范围内，防止IP冲突想宿主机SSH连接虚拟机：确保VMnet8网卡启用</li>
  <li>IntelliJIDEA常用快捷键大全Windows系统默认快捷键，Mac用户将Ctrl替换为Command即可通用。一、全局搜索与定位快捷键功能说明双击Shift全局任意内容搜索，可搜类、文件、配置、操作命令Ctrl+N快速搜索指定Java类，支持模糊匹配Ctrl+Shift+N搜索任意文件，包括配置文件、XML、资源文件Ctrl+F当前文件内文本查找Ctrl+R当前文件内文本替换Ctrl+Shift+F全局项目范围内搜索指定文本内容Ctrl+Shift+R全局项目范围内批量替换指定文本二、代码编辑与生成快捷键功能说明Alt+Insert自动生成代码，快速生成构造方法、Getter/Setter、toString、重写方法Ctrl+/单行注释/取消注释，自动适配当前文件语言Ctrl+Shift+/多行块注释/取消块注释Ctrl+D快速复制当前选中行，无需手动粘贴Ctrl+X剪切当前行，不用选中整行直接按就生效Ctrl+Y删除当前整行代码Shift+Enter在当前行下方新开一行，光标自动跳到新行开头Ctrl+Alt+L一键格式化当前文件所有代码，自动对齐缩进Ctrl+Alt+O自动优化导入，清理没用的冗余import语句三、代码跳转与查看源码快捷键功能说明Ctrl+左键点击直接跳转到方法、类、变量的定义位置Ctrl+B跳转到定义处，和左键点击效果一致Ctrl+Alt+左箭头回到上一个光标停留的位置，看源码返回上一步超实用Ctrl+Alt+右箭头前进到下一个光标停留的位置Ctrl+H查看当前类的完整继承层级树，显示所有父类和实现的接口Ctrl+Shift+B跳转到接口方法的具体实现类，不用手动查找实现Alt+F7全局查找当前方法/变量被哪些地方调用过四、调试与运行快捷键功能说明Shift+F10直接运行当前启动类/项目Shift+F9以调试模式启动项目F7调试时步入方法内部，进入方法逐行执行F8调试时步过，执行完当前行直接跳到下一行，不进入方法内部Shift+F8调试时步出，直接从当前方法里跳出，回到调用这个方法的上一行Ctrl+F2直接停止当前正在运行的程序/调试进程Ctrl+F8在当前行快速添加/取消断点五、项目与工具操作快捷键功能说明Ctrl+Shift+F9一键重新编译当前修改的文件Ctrl+Shift+Alt+S快速打开项目结构配置面板Ctrl+Shift+A全局搜索任意操作命令，忘记快捷键时直接搜功能名就能找到六、窗口与视图操作快捷键功能说明Alt+1快速打开/隐藏左侧项目文件树面板Alt+4快速打开/隐藏下方调试运行控制台面板Ctrl+E弹出最近打开过的文件列表，快速切换文件Ctrl+Shift+E查看最近修改过的所有文件</li>
  <li>书写规范属性名推荐用短横线命名：birth-day（而非birthDay）引号区别：单引号：不会转义（\n保持原样）双引号：会转义（\n变成换行）大文本|开头：保留文本格式（保留换行）&gt;开头：折叠换行分割文档---可以把多个YAML文档合并为一个文件，每个文档相互独立</li>
  <li>git克隆代码gitclonehttps://github.com/zhongruntao/zhongruntao.github.io.gitgitclone+要克隆的仓库地址git拉取代码拉取代码,即更新代码,把代码从远程仓库(gitee/github)同步到本地(windows)gitpullgit提交代码到本地暂存区#添加代码#gitadd需要提交的文件,(.)代表所有被修改的文件,例如提交本次修改的所有文件gitadd.#填写本次提交的代码修改注释说明gitcommit-m"注释"git推送代码推送代码之前必须拉取代码gitpushgit查看修改的状态gitstatusgit查看提交历史gitlog代码示例packagecom.example.demo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublicclassDemo1Application{publicstaticvoidmain(String[]args){SpringApplication.run(Demo1Application.class,args);}}展示图片展示数学公式\[\sqrt{x^2+y^2}\quad\sum_{i=1}^{n}i=\frac{n(n+1)}{2}\]行内公式写法：$a^2+b^2=c^2$\[\sqrt{x^2+y^2}\quad\sum_{i=1}^{n}i=\frac{n(n+1)}{2}\]\[\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_i\]\[f(x)=\begin{cases}x^2&amp;x\ge0\\-x&amp;x&lt;0\end{cases}\]</li>
  <li>SpringBootStarter核心运行流程引入自定义/官方starter依赖后，会自动传递导入对应的autoconfigure自动配置包。在autoconfigure包的资源目录下，存在固定路径文件：META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports该文件内预先定义了所有需要在项目启动时加载的自动配置类全限定名。SpringBoot核心注解@EnableAutoConfiguration会自动扫描并导入上述文件中声明的全部自动配置类，这些类本身标注了条件注解，会根据项目当前环境按需加载。命名格式为XxxAutoConfiguration的自动配置类，会向SpringIOC容器中批量注册所需的功能组件，组件的属性值全部从对应的XxxProperties配置属性类中读取。XxxProperties类通过@ConfigurationProperties注解和项目的application.yml/application.properties配置文件完成绑定，直接读取用户自定义的参数。</li>
  <li>核心注解注解说明@ConfigurationProperties声明组件与配置文件的绑定关系@EnableConfigurationProperties用于导入第三方写好的组件绑定步骤将容器中任意组件（Bean）的属性值和配置文件的值进行绑定：给容器注册组件：使用@Component或@Bean声明绑定关系：使用@ConfigurationProperties指定组件和配置文件中哪些配置项进行绑定</li>
  <li>SpringBoot摒弃XML配置方式，改为全注解驱动。注册组件的方式@Configuration编写一个配置类在配置类中，自定义方法给容器注册组件，配合@Bean使用@Import导入第三方组件示例对比XML方式（旧）：&lt;beanid="user"class="com.example.boot.bean.User"&gt;&lt;propertyname="id"value="1"/&gt;&lt;propertyname="name"value="zhangsan"/&gt;&lt;/bean&gt;注解方式（新）：@ConfigurationpublicclassAppConfig{@BeanpublicUseruser(){Useruser=newUser();user.setId(1L);user.setName("zhangsan");returnuser;}}</li>
  <li>常用条件注解注解触发条件@ConditionalOnClass类路径中存在这个类时触发@ConditionalOnMissingClass类路径中不存在这个类时触发@ConditionalOnBean容器中存在这个Bean时触发@ConditionalOnMissingBean容器中不存在这个Bean时触发@ConditionalOnProperty配置文件中存在指定属性时触发</li>
  <li>为什么导入starter-web后所有相关依赖都自动导入？按场景导入：开发什么场景，就导入什么场景启动器Maven依赖传递：A→B→C，A就拥有B和C的所有依赖导入场景启动器后，自动把这个场景的所有核心依赖全部引入为什么版本号都不用写？每个Boot项目都有一个父项目spring-boot-starter-parent它的父项目是spring-boot-dependencies父项目作为版本仲裁中心，把所有常见jar的依赖版本都声明好了例如：mysql-connector-j自定义版本号利用Maven的就近原则：在当前项目properties标签中声明父项目用的版本属性key直接在导入依赖时声明版本第三方jar包Boot父项目没有管理的需要自行声明版本：&lt;dependency&gt;&lt;groupId&gt;com.alibaba&lt;/groupId&gt;&lt;artifactId&gt;druid&lt;/artifactId&gt;&lt;version&gt;1.2.16&lt;/version&gt;&lt;/dependency&gt;</li>
  <li>阿里巴巴MySQL规范【强制】命名规范表名、字段名必须使用小写字母或数字，禁止数字开头，禁止两个下划线中间只出现数字。正例：aliyun_admin,rdc_config,level3_name反例：AliyunAdmin,rdcConfig,level_3_name【强制】禁用保留字如DESC、RANGE、MATCH、DELAYED等，参考MySQL官方保留字。【强制】表必备三字段id：主键，类型为BIGINTUNSIGNED，单表自增，步长为1gmt_create：创建时间，DATETIME类型gmt_modified：更新时间，DATETIME类型【推荐】表命名遵循“业务名称_表的作用”，如alipay_task、force_project、trade_config【推荐】库名与应用名称尽量一致。【参考】合适的存储长度场景推荐类型字节范围人（150岁以内）TINYINTUNSIGNED10~255龟（数百岁）SMALLINTUNSIGNED20~65,535恐龙化石（数千万年）INTUNSIGNED40~~43亿太阳（约50亿年）BIGINTUNSIGNED80~~10的19次方其他注意事项尽量不要使用TRUNCATE清空表，不可以回滚。</li>
  <li>修改表结构--增加字段ALTERTABLE表名ADD列名DOUBLE(总位数,小数位);--修改字段类型ALTERTABLE表名MODIFY列名VARCHAR(50);--重命名字段（可同时改类型）ALTERTABLE表名CHANGE旧列名新列名VARCHAR(50);--删除字段ALTERTABLE表名DROPCOLUMN列名;重命名表RENAMETABLE旧表名TO新表名;删除与清空DROPTABLEIFEXISTS表名;--删除表TRUNCATETABLE表名;--清空表数据操作--插入多条数据INSERTINTO表名(a,b,c)VALUES(1,2,3),(4,5,6);--更新数据UPDATE表名SET列名1=新值,列名2=新值WHEREid=5;--定位</li>
  <li>浮点类型对照表类型字节数FLOAT(M,D)4DOUBLE(M,D)8REAL(M,D)默认同DOUBLE参数说明M：整数位数+小数位数（总位数）D：小数位数范围：-M.D到+M.D如果设置了长度，会自动四舍五入</li>
  <li>整数类型对照表类型字节数无符号范围TINYINT10~255SMALLINT20~65,535MEDIUMINT30~16,777,215INT40~4,294,967,295BIGINT80~18,446,744,073,709,551,615补充说明INT(n)中的n表示显示宽度，后面可接ZEROFILL补零UNSIGNED表示无符号，即只有正数和零</li>
  <li>事务控制COMMIT;--提交数据ROLLBACK;--回滚数据删除数据的区别操作说明是否可回滚TRUNCATETABLE删除全部数据不可以DELETEFROM删除部分或全部数据可以注意：DDL语句不可以回滚；DML语句默认不可以回滚，需要提前设置SETautocommit=false。</li>
  <li>数据库操作CREATEDATABASE库名;--使用默认字符集SHOWDATABASES;--查看所有数据库CREATEDATABASE库名CHARACTERSET'utf8mb4';--指定字符集USE库名;--切换数据库SHOWTABLES;--查看当前库的表ALTERDATABASE库名CHARACTERSET'utf8mb4';--修改字符集DROPDATABASEIFEXISTS库名;--删除数据库尽量不要修改数据库名。创建表CREATETABLEIFNOTEXISTS表名(idINT,nameVARCHAR(50),hire_dateDATE);基于查询结果创建表CREATETABLE新表名ASSELECTdepartment_idAS别名,nameAS别名FROMemployees;--别名会成为新表的列名</li>
  <li>常用聚合函数函数说明AVG(列)平均值SUM(列)求和MAX(列)最大值MIN(列)最小值COUNT(列)计数（不计算NULL值）分组查询GROUPBY(列名)--按列分组GROUPBY(列名)WITHROLLUP--最后计算总数（不能与ORDERBY同时使用）示例查询部门ID为10/20/30/40中最高工资超过10000的部门：--方式一（推荐，效率更高）SELECTdepartment_id,MAX(salary)FROMemployeesWHEREdepartment_idIN(10,20,30,40)GROUPBYdepartment_idHAVINGMAX(salary)&gt;10000;--方式二SELECTdepartment_id,MAX(salary)FROMemployeesGROUPBYdepartment_idHAVINGMAX(salary)&gt;10000ANDdepartment_idIN(10,20,30,40);注意：出现聚合函数时要用HAVING代替WHEREHAVING不能单独出现，必须和GROUPBY一起使用</li>
  <li>关键字关键字说明IN在集合中ANY满足任意一个ALL满足全部SOME同ANY示例：查询平均工资最低的部门方式一：子查询嵌套SELECTdepartment_idFROMemployeesGROUPBYdepartment_idHAVINGAVG(salary)=(SELECTMIN(avg_sal)FROM(SELECTAVG(salary)avg_salFROMemployeesGROUPBYdepartment_id)t_dept_avg_sal--子查询结果需取别名);方式二：使用ALL简化SELECTdepartment_idFROMemployeesGROUPBYdepartment_idHAVINGAVG(salary)&lt;=ALL(SELECTAVG(salary)FROMemployeesGROUPBYdepartment_id);注意事项空值问题：注意除以NULL的场景(NOT)EXISTS：相关子查询判断是否存在相关更新/相关删除：子查询引用外部表</li>
  <li>IF函数IF(条件,a,b)--条件成立返回a，否则返回bCASEWHENCASEWHEN条件1THEN结果1WHEN条件2THEN结果2ELSE结果END</li>
  <li>获取当前时间函数说明CURDATE()返回年月日CURTIME()返回时分秒NOW()返回系统日期和时间时间戳转换UNIX_TIMESTAMP()/UNIX_TIMESTAMP(date)FROM_UNIXTIME()提取日期信息函数说明YEAR(date)/MONTH(date)/DAY(date)提取年月日HOUR(time)/MINUTE(time)/SECOND(time)提取时分秒MONTHNAME(date)返回月份名称（January…）DAYNAME(date)返回星期名称WEEKDAY(date)返回周几QUARTER(date)返回季度WEEK(date)/WEEKOFYEAR(date)一年中的第几周DAYOFYEAR(date)一年中的第几天DAYOFMONTH(date)一个月中的第几天DAYOFWEEK(date)一周中的第几天日期运算--加减指定间隔DATE_ADD(date,INTERVALnumtype)DATE_SUB(date,INTERVALnumtype)--时间差DATEDIFF(a,b)--a和b间隔多少天TIMEDIFF(a,b)--a和b间隔的时间函数说明ADDTIME(t1,t2)时间相加SUBTIME(t1,t2)时间相减FROM_DAYS(n)从0000-01-01算n天后的日期TO_DAYS(date)日期到0000-01-01的天数LAST_DAY(date)所在月份最后一天MAKEDATE(year,day)某年第day天的日期MAKETIME(h,m,s)构造时间格式化--日期转字符串DATE_FORMAT(date,format)--字符串转日期STR_TO_DATE(str,format)format占位符占位符说明%Y/%y4位/2位年份%M/%m/%c月名/2位月数/月数%d/%e2位天数/天数%H/%h24小时制/12小时制%i分钟%S/%s秒%W/%a星期名/星期缩写%j一年中的第几天%U/%u第几周（Sunday/Monday为首日）</li>
  <li>长度与编码函数说明ASCII()返回第一个字母的ASCII值CHAR_LENGTH()字符数（中文算1个字符）LENGTH()字节数（UTF-8中文算3个字节）拼接与替换函数说明CONCAT(a,b,...)连接字符串CONCAT_WS(分隔符,a,b,...)用指定分隔符连接INSERT(str,pos,len,newstr)在指定位置插入REPLACE(str,old,new)替换大小写转换UPPER()/UCASE()：转大写LOWER()/LCASE()：转小写截取与填充函数说明LEFT(str,n)从左侧取n个字符RIGHT(str,n)从右侧取n个字符SUBSTR(str,pos,len)从第pos个开始取len个字符LPAD(str,len,pad)左侧填充，实现右对齐RPAD(str,len,pad)右侧填充，实现左对齐去空格TRIM()：去除首尾空格LTRIM()：去除左侧空格RTRIM()：去除右侧空格TRIM('o'FROM'hello')：去除指定字符其他函数说明REPEAT(str,n)重复n次SPACE(n)返回n个空格STRCMP(a,b)比较大小，返回1/0/-1LOCATE(substr,str)返回子串位置ELT(n,str1,str2,...)返回第n个字符串FIELD(str,str1,str2,...)返回字符串所在位置NULLIF(a,b)相等返回NULL，否则返回a</li>
  <li>加密函数函数说明MD5('密码')不可逆加密SHA('密码')不可逆加密信息函数函数说明VERSION()当前MySQL版本号CONNECTION_ID()当前服务器连接数DATABASE()/SCHEMA()当前所在数据库USER()/CURRENT_USER()/SYSTEM_USER()/SESSION_USER()当前连接用户名（格式：用户名@主机名）CHARSET(value)字符串的字符集COLLATION(value)字符串的比较规则其他函数函数说明FORMAT(value,n)数字格式化，四舍五入保留n位小数CONV(value,from,to)进制转换INET_ATON(ip)IP地址转数字INET_NTOA(value)数字转IP地址BENCHMARK(n,expr)表达式执行n次，测试耗时CONVERT(valueUSINGchar_code)修改字符编码</li>
  <li>基本函数函数说明ABS()绝对值SIGN()正数返回1，负数返回-1PI()圆周率CEIL()/CEILING()向上取整FLOOR()向下取整LEAST()返回最小值GREATEST()返回最大值MOD()取余RAND(seed)随机数ROUND(x,d)四舍五入，保留d位小数TRUNCATE(x,d)截断到d位小数SQRT()平方根弧度换算RADIANS()：角度转弧度DEGREES()：弧度转角度三角函数SIN(),COS(),TAN(),ASIN(),ACOS(),ATAN()等指数与对数POW(x,y)/POWER(x,y)：x的y次方EXP(x)：e的x次方LN()/LOG()：自然对数进制转换函数说明BIN()转二进制HEX()转十六进制OCT()转八进制CONV(a,b,c)将b进制的a转换为c进制</li>
  <li>见“所有”字眼时注意使用外连接。SQL92语法（旧）SELECTA,BFROMa,bWHEREa.C=b.C--靠共有列C连接SQL99语法（推荐）内连接SELECTA,BFROMa(INNER)JOINbONa.C=b.C外连接--左外连接：保留左表完整SELECTA,BFROMaLEFT(OUTER)JOINbONa.C=b.C--右外连接：保留右表完整SELECTA,BFROMaRIGHT(OUTER)JOINbONa.C=b.C满外连接--MySQL不支持FULLOUTERJOIN，用UNION替代SELECTA,BFROMaLEFTJOINbONa.C=b.CUNIONSELECTA,BFROMaRIGHTJOINbONa.C=b.C合并结果集UNION：去重，效率低UNIONALL：不去重，效率高其他连接方式自然连接：NATURALJOIN，自动匹配同名列指定连接列：USING(C)</li>
  <li>基础查询序号关键字说明1SELECT选择列2FROM选择表3DISTINCT去重4IFNULL(列,0)空值替换6DESCRIBE/DESC查看表结构条件筛选WHERE条件过滤BETWEENAANDB包含边界OR：名=AOR名=B（等价||）IN(A,B)（NOTIN取反）LIKE模糊查询，_表不确定字符，查_需转义\_排序与分页--升序ORDERBY列名ASC--降序ORDERBY列名DESC--分页：偏移量,每页个数LIMIT偏移量,每页个数--或使用OFFSET（参数顺序相反）LIMIT每页个数OFFSET偏移量</li>
  <li>功能设计搭建一个简单的学生管理系统，包含以下功能：增加学生add_student删除学生del_student修改数据mod_student查找学生rea_student</li>
  <li>这是一个图片点击下载上面这张图片</li>
  <li>本文涵盖了Markdown的全部常用语法，每个示例均包含渲染效果与源码。标题以下展示了各级标题的渲染效果：一级标题二级标题三级标题四级标题五级标题六级标题#一级标题##二级标题###三级标题####四级标题#####五级标题######六级标题段落与换行这是一段普通的文本。这是第二段，段与段之间空一行分隔。同一段落内可以用两个以上空格来手动换行。就像这样。这是一段普通的文本。这是第二段，段与段之间空一行分隔。同一段落内可以用两个以上空格来手动换行。就像这样。文字样式加粗文本斜体文本加粗且斜体删除线**加粗文本***斜体文本****加粗且斜体***~~删除线~~行内代码使用反引号包裹inlinecode即可。用双反引号包裹含反引号的内容：codewith`backtick。使用反引号包裹`inlinecode`即可。用双反引号包裹含反引号的内容：``codewith`backtick``。代码块支持多种语言的语法高亮：functiongreet(name){console.log('Hello,'+name+'!')}defgreet(name):print(f'Hello,{name}!')&lt;divclass="box"&gt;HelloWorld&lt;/div&gt;```javascriptfunctiongreet(name){console.log('Hello,'+name+'!')}``````pythondefgreet(name):print(f'Hello,{name}!')``````html&lt;divclass="box"&gt;HelloWorld&lt;/div&gt;```无序列表列表项一列表项二列表项三也可以用*或+：星号列表加号列表-列表项一-列表项二-列表项三*星号列表+加号列表有序列表第一项第二项第三项1.第一项2.第二项3.第三项嵌套列表水果苹果香蕉饮料咖啡茶-水果-苹果-香蕉-饮料1.咖啡2.茶任务列表已完成的任务未完成的任务另一个未完成的任务-[x]已完成的任务-[]未完成的任务-[]另一个未完成的任务引用这是一段引用文本。可以跨越多行。&gt;这是一段引用文本。&gt;可以跨越多行。嵌套引用外层引用内层引用&gt;外层引用&gt;&gt;&gt;内层引用引用中的列表引用中的列表项一引用中的列表项二&gt;-引用中的列表项一&gt;-引用中的列表项二链接普通链接：GitHub带标题的链接：Google自动链接：https://www.example.com普通链接：[GitHub](https://github.com)带标题的链接：[Google](https://google.com'点击跳转Google')自动链接：&lt;https://www.example.com&gt;图片带链接的图片（点击图片跳转）：![示例图片](yun.png)[![示例图片](yun.png)](https://github.com)表格姓名年龄城市张三25北京李四30上海王五28广州带对齐方式的表格：左对齐居中对齐右对齐LeftCenterRight左中右|姓名|年龄|城市||------|----|------||张三|25|北京||李四|30|上海||王五|28|广州|带对齐方式的表格：|左对齐|居中对齐|右对齐||:---|:---:|---:||Left|Center|Right||左|中|右|分隔线使用三个或更多的-、*或_：以上是一条分隔线。---转义字符使用反斜杠转义Markdown特殊字符：*这不是斜体*#这不是标题`这不是代码\*这不是斜体\*\#这不是标题\`这不是代码锚点链接可以创建指向页面内标题的锚点：跳转到标题跳转到[标题](#标题)</li>
</ul>