「深度学习福利」大神带你进阶工程师,立即查看>>> 在8版本以后的MySql默认的加密方式都改为了caching_sha2_password 因此进入mysql的命令行更改加密方式即可 ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #更改加密方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; #更新用户密码
「深度学习福利」大神带你进阶工程师,立即查看>>> 5月21日,阿里云PolarDB发布重大更新,提供传统数据库一键迁移上云能力,可以帮助企业将线下的MySQL、PostgreSQL和Oracle等数据库轻松上云,最快数小时内迁移完成。据估算,云上成本不到传统数据库的1/6。目前,已有约40万个数据库迁移到阿里云上。 阿里云方面表示,该产品实现了两大技术突破:通过自研超低延迟文件系统PolarFS大幅降低数据跨网络的延迟,并且开发了一种全新的共识协议ParallelRaft,提升系统吞吐量。在此之前,PolarFS的研究成果已发表在数据库顶级会议 VLDB 2018 《PolarFS: An Ultra-low Latency and Failure Resilient Distributed File System for Shared Storage Cloud Database》。
「深度学习福利」大神带你进阶工程师,立即查看>>> Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl ' the current model ' get the current active model Set mdl = ActiveModel If (mdl Is Nothing) Then MsgBox "There is no current Model " ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then MsgBox "The current model is not an Physical Data model. " Else ProcessFolder mdl End If ' This routine copy name into comment for each table, each column and each view ' of the current folder Private sub ProcessFolder(folder) Dim Tab 'running table for each Tab in folder.tables if not tab.isShortcut then tab.comment = tab.name Dim col ' running column for each col in tab.columns col.comment= col.name next end if next Dim view 'running view for each view in folder.Views if not view.isShortcut then view.comment = view.name end if next ' go into the sub-packages Dim f ' running folder For Each f In folder.Packages if not f.IsShortcut then ProcessFolder f end if Next end sub
「深度学习福利」大神带你进阶工程师,立即查看>>> mysql [Err] 1118 - Row size too large (> 8126). 问题 mysql5.7 在执行创建表或者增加字段时,发现row size长度过长,导致出现以下错误。 [Err] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. 解决方案 row size 其实就是所有字段的长度的总和。 在不进行拆表的前提下解决(我们不讨论是否设计的合理性) : 知识贴: https://dev.mysql.com/doc/refman/8.0/en/column-count-limit.html You may want to take a look at this article which explains a lot about MySQL row sizes. It's important to note that even if you use TEXT or BLOB fields, your row size could still be over 8K (limit for InnoDB) because it stores the first 768 bytes for each field inline in the page. The simplest way to fix this is to use the Barracuda file format with InnoDB. This basically gets rid of the problem altogether by only storing the 20 byte pointer to the text data instead of storing the first 768 bytes. 方法一:改变一些字段varchar为TEXT or BLOB。 无效,不能解决问题。 最终解决方案 https://stackoverflow.com/questions/22637733/mysql-error-code-1118-row-size-too-large-8126-changing-some-columns-to-te 查询系统参数: show variables like '%innodb_strict_mode%'; show variables like '%innodb_log_file_size%'; 修改前: innodb_strict_mode ON innodb_log_file_size 536870912 修改mysql的配置文件, vi /etc/my.cnf innodb_log_file_size=1024M innodb_strict_mode=0 innodb_strict_mode=0 这个一定不能漏,否则不能生效。 重启后: innodb_strict_mode OFF innodb_log_file_size 1073741824 it work 。 卡了很久,最终靠这个方案解决了。
「深度学习福利」大神带你进阶工程师,立即查看>>> Base Enviroment:CentOS release 6.5 +10.1.40-MariaDB MariaDB Server 安装完后,经过Navicat客户端工具,java web项目,linux操作系统myql客户端,三个维度(客户端)的实测。 实测结果是:此工程只能做到,命令行发起的对数据库的操作。 1.安装mysql-sniffer: #yum install glib2-devel libpcap-devel libnet-devel # cd /usr/local/src/ #git clone https://github.com/Qihoo360/mysql-sniffer #此步较慢,耐心等待…… #cd mysql-sniffer #mkdir proj #cd proj #cmake ../ #make #cd bin/ 2.参数查看 ./mysql-sniffer -h Usage ./bin/mysql-sniffer [-d] -i eth0 -p 3306,3307,3308 -l /var/log/mysql-sniffer/ -e stderr [-d] -i eth0 -r 3000-4000 -d daemon mode. -s how often to split the log file(minute, eg. 1440). if less than 0, split log everyday -i interface. Default to eth0 -p port, default to 3306. Multiple ports should be splited by ','. eg. 3306,3307 this option has no effect when -f is set. -r port range, Don't use -r and -p at the same time -l query log DIRECTORY. Make sure that the directory is accessible. Default to stdout. -e error log FILENAME or 'stderr'. if set to /dev/null, runtime error will not be recorded -f filename. use pcap file instead capturing the network interface -w white list. dont capture the port. Multiple ports should be splited by ','. -t truncation length. truncate long query if it's longer than specified length. Less than 0 means no truncation -n keeping tcp stream count, if not set, default is 65536. if active tcp count is larger than the specified count, mysql-sniffer will remove the oldest one 3.执行命令,将mysql3306端口流量打到某网卡上(如 eth0 ) 实时查看>>>>> # ./bin/mysql-sniffer -i eth0 -p 3306 打到某日志文件>> # ./bin/mysql-sniffer -i eth0 -p 3306 -l /tmp/mysql-sniffer/ 查看网卡 4.查看效果: mysql服务器启动mysql-sniffer开启实时监控 【方式一:windows电脑使用mysql客户端navicat访问mysql服务器的审计情况】
「深度学习福利」大神带你进阶工程师,立即查看>>> 报错信息如下: java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963) ~[mysql-connector-java-5.1.39.jar:5.1.39] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) ~[mysql-connector-java-5.1.39.jar:5.1.39] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) ~[mysql-connector-java-5.1.39.jar:5.1.39] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) ~[mysql-connector-java-5.1.39.jar:5.1.39] at com.mysql.jdbc.ResultSetRow.getTimestampFast(ResultSetRow.java:937) ~[mysql-connector-java-5.1.39.jar:5.1.39] at com.mysql.jdbc.ByteArrayRow.getTimestampFast(ByteArrayRow.java:130) ~[mysql-connector-java-5.1.39.jar:5.1.39] at com.mysql.jdbc.ResultSetImpl.getTimestampInternal(ResultSetImpl.java:5946) ~[mysql-connector-java-5.1.39.jar:5.1.39] at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:5616) ~[mysql-connector-java-5.1.39.jar:5.1.39] at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:5645) ~[mysql-connector-java-5.1.39.jar:5.1.39] at com.zaxxer.hikari.pool.HikariProxyResultSet.getTimestamp(HikariProxyResultSet.java) ~[HikariCP-2.7.8.jar:na] at org.hibernate.type.descriptor.sql.TimestampTypeDescriptor$2.doExtract(TimestampTypeDescriptor.java:84) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:261) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.custom.ScalarResultColumnProcessor.extract(ScalarResultColumnProcessor.java:54) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.custom.ResultRowProcessor.buildResultRow(ResultRowProcessor.java:83) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.custom.ResultRowProcessor.buildResultRow(ResultRowProcessor.java:60) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:409) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:761) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.Loader.processResultSet(Loader.java:991) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.Loader.doQuery(Loader.java:949) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.Loader.doList(Loader.java:2692) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.Loader.doList(Loader.java:2675) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.Loader.list(Loader.java:2502) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2161) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1016) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:152) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at org.hibernate.query.Query.getResultList(Query.java:146) ~[hibernate-core-5.2.16.Final.jar:5.2.16.Final] at com.jingxuan.dao.AllDaoImpl.getCommodity(AllDaoImpl.java:111) ~[classes/:na] at com.jingxuan.dao.AllDaoImpl$$FastClassBySpringCGLIB$$bb7fcecc.invoke() ~[classes/:na] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:747) ~[spring-aop-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185) ~[spring-aop-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689) ~[spring-aop-5.0.5.RELEASE.jar:5.0.5.RELEASE] at com.jingxuan.dao.AllDaoImpl$$EnhancerBySpringCGLIB$$c8de7df4.getCommodity() ~[classes/:na] at com.jingxuan.service.impl.AllServiceImpl.getAllCommodity(AllServiceImpl.java:56) ~[classes/:na] at com.jingxuan.controller.AllController.getAllCommodity(AllController.java:41) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851) ~[spring-webmvc-5.0.5.RELEASE.jar:5.0.5.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.29.jar:8.5.29] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.0.5.RELEASE.jar:5.0.5.RELEASE] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) ~[tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.29.jar:8.5.29] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.29.jar:8.5.29] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_191] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_191] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.29.jar:8.5.29] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_191] 原因 因为“0000-00-00 00:00:00”在mysql中是作为一个特殊值存在的但 java.sql.Date 将其视为 不合法的值 格式不正确,这才是报错的原因 解决办法 spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: XXXXX password: XXXXX url: jdbc:mysql://localhost:3306/XXXXX?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull 在url后面加上 zeroDateTimeBehavior=convertToNull
「深度学习福利」大神带你进阶工程师,立即查看>>> 1. 查询所有字段 select * from 表名; 2. 查询自定字段 select 字段名 from 表名; 3. 查询指定数据 select * from 表名 where 条件; 4. 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素1,元素2); 5. 带关键词BETWEEN...AND... select * from 表名 where 条件 [not] between 取值1 and 取值2; 6. 带like的字符匹配查询 like属于常用的比较运算符,实现模糊查询。它有通配符"%"和"_"。 select * from 表名 where 条件 like "%取值%"; 在工作中的我们也常用 concat()函数来拼接字段和通配符 select * from 表名 where 条件 like concat('%',取值,'%'); 7. 用关键字IS NULL查询空值 select * from 表名 where 条件 is [not] null; 8. 带AND的多条件查询 select * from 表名 where 条件1 and 条件2; 这里的条件可以是上面的任何一种,相当于逻辑运算的&& 9. 带关键词OR的多条件查询 select * from 表名 where 条件1 or 条件2; 相当于逻辑运算的|| 10. 用关键词DISTINCT去除结果中的重复行 seelct distinct 字段名 from 表名; 11. 用关键词ORDER BY对查询结果进行排序 select * from 表名 order by 字段 [ASC|DESC]; 12. 用关键词GROUP BY分组查询 select * from 表名 group by 字段; 可以多字段分组,但是会对后面的字段分组,再对前面的字段细微分组 13. 用关键词LIMIT限制查询结果的数量 看前面n条数据 select * from 表名 limit n; 看从m开始的n条数据(下标从0开始) select * from 表名 limit m,n; 14. 聚合函数 count() 统计个数 sum() 某个字段的总数(null值除外) avg() 某个字段的平均值 max() 某个字段最大值 min() 某个字段最小值 15. 链接查询 内连接查询 内连接查询其实就是我们平常的多表查询 外连接查询 外连接包含左外连接(left join)和右外连接(right join)。 左外连接:将坐标的所有数据分别与右表中的每条数据进行连接组合,返回结果除内连接数据外还有左表不符合条件的数据,并在右表的相应列添加null值。 ps:内连接和外连接最大的区别就是内链接查询将会把两张表条件为null或者另一张表不存在的不显示,而外连接是会将左表或者右表都显示。 16. 子查询 子查询就是select查询的是另一个查询的附属。 带关键字IN的子查询 带比较运算符的子查询 带关键字EXISTS的子查询 关键字EXISTS时,内层查询语句不返回查询记录。而是返回一个真假值。 例如:select * from tb_row where exists (select * from tb_book where id=27); 这里是查询tb_book表中存在id值为27是否存在,存在则查询tb_row的所有行。 带关键字ANY的子查询 关键字ANY表示满足其中任意一个查询条件。 例如:select * from tb_book where row < ANY(select row from tb_row); 表示查询tb_book表中row比tb_row中任何row都小的行数据。 带关键字ALL的子查询 关键字ALL表示满足所有的条件。使用关键字ALL时,只满足 内层查询语句返回的所有结果才能执行外层查询语句。 例如:select * from tb_book where row>=ALL(select row from tb_row); 表示查询tb_book表中row字段的值大于tb_row表中的row字段的最大值的记录。 17. 合并查询结果 union union all ps:union和union all的差别就是union会去除相同的记录,而union all会知识简单的把结果合并到一起。 18. 定义表和字段的别名 为表取别名 可以使用 直接在真表名和别名之间加一个空格。 为字段取别名 可以使用空格或者 as 关键字。 19. 使用正则表达式查询 字段名 regexp '匹配方式' 模式字符 含义 应用举例
^
匹配以特定字符或者字符串开头的记录
查询以java开头的记录 select * from tb_book where books regexp '^java'
$
匹配以特定字符或字符串结尾的记录
查询以模块结尾的记录select * from tb_book where books regexp '模块$'
.
匹配字符串的任意一个字符,包括回车和换行符
查询包含P字符的记录select * from tb_book where books regexp 'P.'
[字符集合]
匹配“字符集合”中的任意一个字符
查询包含PCA字符的记录select * from tb_book where books regexp '[PCA]'
[^字符集合]
匹配除“字符集合”以外的任意一个字符
查询包含c~z字母以外的记录select * from tb_book where books regexp '[^c-z]'
s1竖线s2竖线s3
匹配S1、S2、S3中任意一个字符串
查询包含php、c、java中任意一个的记录select * from tb_book where books regexp 'php竖线c竖线java'
*
匹配多个该符号之前的字符,包括0和1个
查询A字符前出现过J的记录select * from tb_book where books regexp 'J*A'
+
匹配多个该符号之前的字符,包括1个
查询在A字符前至少出现过一个J的记录select * from tb_book where books regexp 'J+A' 字符串{N}
字符串{M,N} 匹配字符串出现多次
匹配字符串出现至少M次,最多N次 查询a字符出项3次的记录select * from tb_book where books regexp 'a{3}'
「深度学习福利」大神带你进阶工程师,立即查看>>> 点开题目是不是有点懵X,因为你只知道insert...values这一种,重来没有听说过三种,现在来介绍一下。 插入数据三种方式: insert into 表名(字段名) values(插入值); 最常用的插入语句 insert into 表名 set 字段名=插入值; 根据字段一个一个插入 insert into 表名(字段名) select 字段名 from 另一张表;从另一张表获取值插入表 修改数据一种方式: update 表名 set 字段名=修改值 where 条件; 删除数据的两种方式 delete from 表名 where 条件;删除的条件应该具有unique的属性,避免删错 在真实项目中我们通常是使用逻辑删除,如给表增加字段is_del,当删除时就给is_del修改为0; 但是有时我们想要删除表中的所有数据,但是又想保留表结构,所以可以使用 truncate table 表名;
「深度学习福利」大神带你进阶工程师,立即查看>>> multi后不能执行get,没有结果返回的 也不能redirected,否则exec不行 132.120.2.134:26000> MULTI OK 132.120.2.134:26000> get abc QUEUED 132.120.2.134:26000> GET ABC -> Redirected to slot [14740] located at 132.120.2.135:26001 (nil) 132.120.2.135:26001> SET ABC 2 OK 132.120.2.135:26001> GETSET (error) ERR wrong number of arguments for 'getset' command 132.120.2.135:26001> EXEC (error) ERR EXEC without MULTI set如果redirected同样不行 132.120.2.135:26001> multi OK 132.120.2.135:26001> set abc 1 -> Redirected to slot [7638] located at 132.120.2.134:26000 OK multi可以小写,命令不区分大小写。 但是key区分。abc和ABC不同。 如果先set,再expire,可用set EX代替事务 132.120.2.134:26000> set abc 212 EX 30 OK
「深度学习福利」大神带你进阶工程师,立即查看>>> 在MySQL中,常见的过程式SQL语句可以用在存储体中。其中包括IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句和LEAVE语句,它们可以进行流程控制。 IF语句相当于Java中的if()...else if()...else... CASE语句相当于Java中的switch()...case A:...break;default... LOOP语句相当于Java中的while(true){...} while语句相当于Java中的while(条件){...} REPEAT语句相当于Java中的do{...}while(条件) LEAVE语句相当于Java中的 break; 配合LOOP使用 当REPEAT出现在LOOP、REPEAT、WHILE语句中的时,相当于Java中的continue; 1. IF语句 列一: DELIMITER// CREATE PROCEDURE example_if(IN X INT) BEGIN IF X=1 THEN SELECT 1; ELSEIF X=2 THEN SELECT 2; ELSE SELECT 3; END IF; END // 注意这里的selimiter//后面的 “//”和最后的 “//” 这样在当前数据库中究生成了过程控制函数example_if(x) 使用流程为 CALL example_if(6); 2. CASE语句 列二: DELIMITER// CREATE PROCEDURE example_case(IN X INT) BEGIN CASE X WHEN 1 THEN SELECT 1; WHEN 2 THEN SELECT 2; ELSE SELECT 3; END CASE; END // 这样在当前数据库中究生成了过程控制函数example_case(x) 使用: CALL example_case(7); 3. WHILE语句 列三: DELIMITER// CREATE PROCEDURE example_while(OUT SUM INT) BEGIN DECLARE i INT DEFAULT 1; DECLARE s INT DEFAULT 0; WHILE i<=100 DO SET s=s+i; SET i=i+1; END WHILE; SET SUM=s; END // 这样在当前数据库中究生成了过程控制函数example_while(x) 调用: CALL example_while(@a); SELECT @s; 4. LOOP语句 列四: DELIMITER// CREATE PROCEDURE example_loop(OUT SUM INT) BEGIN DECLARE i INT DEFAULT 1; DECLARE s INT DEFAULT 0; loop_label:LOOP SET s=s+i; SET i=i+1; IF i>100 THEN LEAVE loop_label; END IF; END LOOP; SET SUM=s; END // 这里的leave label相当于java中的break; 调用: CALL example_loop(@s); SELECT @s; 5. REPEAT语句 列五: DELIMITER// CREATE PROCEDURE example_repeat(OUT SUM INT) BEGIN DECLARE i INT DEFAULT 1; DECLARE s INT DEFAULT 0; REPEAT SET s=s+i; SET i=i+1; UNTIL i>100 END REPEAT; SET SUM=s; END // 调用: CALL example_repeat(@s); SELECT @s;
「深度学习福利」大神带你进阶工程师,立即查看>>> (8)SELECT (9) DISTINCT (1) FROM (3)JOIN (2) ON (4) WHERE (5) GROUP BY (6) WITH {CUBE|ROLLUP} (7) HAVING (10)ORDER BY (11)LIMIT 注意:每个操作都会产生一张虚表,该虚表作为一个处理得输入。这些虚表对用户事透明得
「深度学习福利」大神带你进阶工程师,立即查看>>> SELECT t.building,t.unit,t.room,t.ashcan ,(SELECT COUNT(a.resident_id) from t_address_book a where a.village_id = t.village_id AND a.building = t.building and a.room = t.unit and a.house = t.room and a.`status` = 1 ) AS regisNum from t_village_standard t where t.village_id = 317 and t.`status` = 1
「深度学习福利」大神带你进阶工程师,立即查看>>> 用途: GROUP BY 语句用于 对一个或多个列对结果集进行分组。 例子: 原表: 现在,我们希望根据USER_ID 字段进行分组,那么,可使用 GROUP BY 语句。 我们使用下列 SQL 语句: SELECT ID,USER_ID,problems,last_updated_date from t_iov_help_feedback GROUP BY USER_ID; 结果集类似这样: 可以看到上面的,结果的确是根据 USER_ID 进行分组了,但是返回的记录是 USER_ID 对应的每组 中最小的那条记录。也就是ID最小的那条。 现在我想分组后得到,last_updated_date 最大的那条记录。这怎么实现呢? 很简单,直接查询的表默认是以 ID 进行顺序排序的,因为分组的时候取的是每组中的第一条。所以只需要 使查询的表 按照 last_updated_date 倒叙排序就行了。 实现的SQL如下,这里使用了嵌套查询。 SELECT ID,USER_ID,problems,last_updated_date FROM (select * from t_iov_help_feedback order by USER_ID, LAST_UPDATED_DATE DESC) b GROUP BY b.USER_ID; 其中:select * from t_iov_help_feedback order by USER_ID, LAST_UPDATED_DATE DESC 就相当于一个按照USER_ID升序, last_updated_date 倒叙排序的表了。 查询结果如下: 现在取的就是每组中时间最大的那条记录了。 当遇到两个不同的表时,可以使用以下SQL: select a.title, t.name, t.price from a inner join (select * from b order by id, price ) t on t.id = a.b_id group by a.b_id; --------------------- 作者:zhang_wt 来源:CSDN 原文:https://blog.csdn.net/u012660464/article/details/78605078 版权声明:本文为博主原创文章,转载请附上博文链接!
「深度学习福利」大神带你进阶工程师,立即查看>>> MySQL 的 case when 的语法有两种: 1.简单函数 (比较col_name和when后面的值是否相等) CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
2.搜索函数 (判断when后面的表达式expr是否为true,如果为true,则返回result1) CASE WHEN [expr] THEN [result1]…ELSE [default] END 两种语法的区别 简单函数 CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END: 枚举这个字段所有可能的值 SELECT NAME '树名', CASE NAME WHEN '桃树' THEN '桃花' WHEN '梨树' THEN '梨花' WHEN '芙蓉' THEN '莲花' ELSE '无名花' END '花名' FROM tree_info; 查询结果: 搜索函数 CASE WHEN [expr] THEN [result1]…ELSE [default] END :搜索函数可以写判断,并且搜索函数只会返回第一个符合条件的值,其他 case 被忽略 SELECT age '年龄段', CASE WHEN age <= 10 THEN '不愁' WHEN age <= 20 THEN '不悔' WHEN age <= 30 THEN '而立' WHEN age <= 40 THEN '不惑' WHEN age <= 50 THEN '知天命' WHEN age <= 60 THEN '耳顺' ELSE '年级大了' END '状态' FROM age_info; 查询结果: 特殊用法 1.聚合函数 sum 配合 case when 的简单函数实现行转列 表1:courses 表2:score 表3:student: 测试: SELECT st.stu_id '学号', st.stu_name '姓名', SUM( CASE co.course_name WHEN '语文' THEN sc.scores ELSE 0 END ) '语文', SUM( CASE co.course_name WHEN '数学' THEN sc.scores ELSE 0 END ) '数学', SUM( CASE co.course_name WHEN '物理' THEN sc.scores ELSE 0 END ) '物理', SUM( CASE co.course_name WHEN '化学' THEN sc.scores ELSE 0 END ) '化学', SUM( CASE co.course_name WHEN '生物' THEN sc.scores ELSE 0 END ) '生物', SUM( CASE co.course_name WHEN '历史' THEN sc.scores ELSE 0 END ) '历史' FROM student st LEFT JOIN score sc ON st.stu_id = sc.stu_id LEFT JOIN courses co ON co.course_no = sc.course_no GROUP BY st.stu_id ORDER BY NULL; 测试结果: 一般我们查找的时候,根据stu_id分组,例如: SELECT st.stu_id '学号', st.stu_name '姓名', GROUP_CONCAT(sc.scores),GROUP_CONCAT(sc.`course_no`),GROUP_CONCAT(co.`course_name`) FROM student st LEFT JOIN score sc ON st.stu_id = sc.stu_id LEFT JOIN courses co ON co.course_no = sc.course_no GROUP BY st.stu_id ORDER BY NULL; 查询结果: 这样的查询结果并不如例如case when 的行转列数据清晰 2.把一行拆分为多了的示例 SELECT SipAccount, COUNT(1) AS number,IsCheck FROM cdr GROUP BY SipAccount,IsCheck 针对这个统计结果进行拆分(0表示未打分,1代表优秀,2代表合格,3代表不合格) 想要的最终结果如下: 所以最终要用到行拆分成三列,语句如下 SELECT SipAccount, (CASE IsCheck WHEN 1 THEN number END) youxiu, (CASE IsCheck WHEN 2 THEN number END) hege, (CASE IsCheck WHEN 3 THEN number END) buhege FROM (SELECT SipAccount, COUNT(1) AS number,IsCheck FROM cdr GROUP BY SipAccount,IsCheck) AS a 现在结果是这样的,你会发现虽然拆成了三列,但是最终结果还不是自己需要的,接下来就需要根据sipaccount来分组的同时对结果进行处理了。语句如下: SELECT sipaccount, IF(MAX(youxiu) IS NULL,0, MAX(youxiu)) youxiu, IF(MAX(hege) IS NULL,0, MAX(hege)) hege, IF(MAX(buhege) IS NULL,0, MAX(buhege)) buhege FROM (SELECT SipAccount, (CASE IsCheck WHEN 1 THEN number END) youxiu, (CASE IsCheck WHEN 2 THEN number END) hege, (CASE IsCheck WHEN 3 THEN number END) buhege FROM (SELECT SipAccount, COUNT(1) AS number,IsCheck FROM cdr GROUP BY SipAccount,IsCheck) AS a) AS b GROUP BY sipaccount 最终得到了这个结果。正式我们需要的格式 MySQL的IF函数(返回两个不同结果的时候用IF,如果返回多个不同的结果,用case when) 格式:IF(Condition,A,B) 意义:当Condition为TRUE时,返回A;当Condition为FALSE时,返回B。 3.mysql 使用Case When 达到排序的效果 SELECT DISTINCT dev.deviceId, dev.deviceTypeCode, dev.mcuID, dev.workState, dtf.dcTypeCode from devicebase dev ORDER BY CASE dev.workstate WHEN '3' THEN 0 WHEN '2' THEN 1 WHEN 'x' THEN 2 WHEN 'y' THEN 3 WHEN '1' THEN 4 ELSE 5 END, dev.workstate 或者 SELECT DISTINCT dev.deviceId, dev.deviceTypeCode, dev.mcuID, dev.workState, dtf.dcTypeCode, CASE dev.workstate WHEN '3' THEN 0 WHEN '2' THEN 1 WHEN 'x' THEN 2 WHEN 'y' THEN 3 WHEN '1' THEN 4 ELSE 5 END AS state from devicebase dev ORDER BY state 4.利用case when实现分组(在网上搜索case when的时候找到的其他示例) 1-4级为一组,5,6级为一组 ,5-6级的优先处理,之后在处理1-4级 SELECT * FROM t_automatic_assign t ORDER BY t.RETRIEVE_STATUS DESC, CASE WHEN DECISION_LEVEL = 5 OR DECISION_LEVEL = 6 THEN 1 ELSE 2 END t.CREATE_DATE ASC 5.利用case when实现细化分组 用户查询两个状态的列表,进行排序, 然后在第一个状态和第二个状态时按照lastLoginDate降序在第三个状态按照tokencreatetime升序 SELECT * FROM yun_user WHERE type IN(2,1,99) ORDER BY type ASC, CASE WHEN type = 2 OR type=1 THEN lastLoginDate END DESC, CASE WHEN type=99 THEN tokencreatetime END ASC; 6.摘自其他博客的一个实例 条件:某字段代表该数据的状态取值为非负整数,0表示无状态。 需求:以该字段升序排序,同时需要将值为0的数据放在最后。 首先我们看一下,表的结构:
正常的使用升序查询结果是这样的:
要让“小赤”排在最后,可以这样写:
也可以这样:(mysql的除数为0,则值为null,不会报错)
还可以使用 CASE WHEN 再不影响查询结果的前提下,改变排序的依据:
7.case when 返回的应该是一个字符串类型的,而不是实际的那个变量的值的类型,例如有表结构 score表中,scores的属性类型为float,数值如下: 按照分数scores排序: SELECT * FROM `score` ORDER BY `scores` 利用case when排序,以为case when的条件为false,所以实际上也是按照scores排序,但是和order by scores排序的结果集顺序不一致,如下图: 如果想使用case when 并且按照数字大小排序可以这么做,在case when 的返回值后面+0,即主动把case when的返回值变为数字类型: case when的用法就总结到这里,如果有不对的地方,欢迎指正
「深度学习福利」大神带你进阶工程师,立即查看>>> 在很多情况下,例如windows系统下,并不想将mysql数据库以服务的形式安装,因为可能会用到多种版本的数据库,我们想下载多种版本数据库放在不同的目录下,在需要哪个版本的数据库的时候,启动相应的mysql服务即可,可以灵活切换。 1.在mysql官网下载压缩包 https://downloads.mysql.com/archives/community/ 在这里可以根据系统要求下载相应的版本,我这里以Mysql5.7.17为例,系统选择采用的是Windows 64位的,然后点击现在ZIP Archive 2.加压下载好的文件并添加配置文件my.ini 将下载好的文件加压到某个目录下,这里假设解压到了 D://mysql-5.7.17目录下。然后在改文件夹中找是否包含默认的配置文件my-default.ini,如果有的话只需要将改文件进行重命名,修改为my.ini即可 3.进行数据库的初始化 对于采用下载ZIP Archive文件来安装mysql,需要手动进行mysql的初始化。这是因为对于采用这种形式下载的mysql包中是没有data文件的,即数据库中没有任何数据,连登陆mysql的root用户都没有,所以我们首先要进行数据库数据的初始化。 方法很简单,只需要在命令行执行mysql解压目录下bin文件夹中的mysqld.exe即可,具体如下: D:\mysql-5.7.17\bin\mysqld.exe --initialize --user=root --console 这里使用了--initialize 表示在初始化的时候会给指定的root用户随机生成一个密码,命令中加上--console就是为了让在执行命令的时候打印出来这个密码,如下例子: 然后启动mysql服务之后就可以修改默认的密码: alter user root@'localhost' identified by 'root'; 当然也可以使用如下命令: D:\mysql-5.7.17\bin\mysqld.exe --initialize-insecure --user=root --console 这里使用了--initialize-insecure 表示在初始化的时候不会给root用户生成密码,即在登录的时候是不需要密码就可以登录。最终对root用户密码的设置需要我们自己手动去设置,如: set password for root@localhost=password('root'); 官方说明: Use --initialize for “secure by default” installation (that is, including generation of a random initial root password). In this case, the password is marked as expired and you will need to choose a new one. With --initialize-insecure, no root password is generated. This is insecure; it is assumed that you will assign a password to the account in timely fashion before putting the server into production use. 4.启动数据库 在windows系统中,只需要双击mysqld.exe文件,即可启动mysql。该启动方式启动之后会在后台运行,可以通过任务管理器来查看mysql是否启动成功。 5.使用客户端连接数据库 执行命令: D:\mysql-5.7.17\bin\mysql.exe -uroot -proot 即可连接数据库。 可以参考官方文档: https://dev.mysql.com/doc/refman/5.7/en/windows-install-archive.html
「深度学习福利」大神带你进阶工程师,立即查看>>> 如何使用Oracle分区功能? 1.个别场景不能从根本上提高查询速度 在Oracle10g时不支持自动生成分区,技术人员都是手动创建一年或者半年的分区或者当超过限制时把数据都load到最大值分区,但是一年半年过后要么出现数据无法插入或者某个分区数据剧增,这个时候出现了Oracle11g的自动分区功能,但是自动分区名称不能人为设置。如果说数据量过大或者出现跨分区查询会出现性能问题。 举个栗子:线上有一个日志储存系统,每天大概存储1000W左右的数据,支持分页排序并且按照日期查询功能(如果不排序,这个数据量对于Oracle是小ks)于是我们采用了分区+覆盖索引(如果想进一步了解.....)查询的的功能,性能稍微提升。但是一段时间后发现还是拖死系统。(因为这就是CAP问题,想从根本上解决问题,请建议公司采用nosql(habase、ELK)实现)。 如果有这样一种这样场景,工资小于等于5000,大于5000并且小于等于12000,大于12000并且小于25000,大于等于25000分别按照这些工资级别创建分区则非常高效,因为可以指定分区进行查询( select * from TBL_OPR_CNT partition(5000_part); ),因为指定分区查询,效率直接提升。 由此得知,关系数据库效率高低,在于我们如何发挥它的长处。 2. 手动对表进行move操作,或者删除表分区会导致索引失效 在实际线上环境,常常当发现性能出现问题时,这个时候才采取分区的解决方案,但是分区表一般都是全局索引,然后直接在原表采取分区功能,用了一段时间产生了历史分区数据,然后删除了其中一部分历史分区,发现数据无法插入了。如下错误: jdbc.exception.UncategorizedSQLException: uncategorized SQLException for SQL [insert into AUDITS(C_ID,N_PERSON_ID,C_NAME,C_CODE,C_DEPT,N_LOG_TIME,C_LOG_TYPE,C_CONTENT,C_RESULT,C_SN,N_DEPT_ID) values(?,?,?,?,?,?,?,?,?,?,?)]; SQL state [72000]; error code [1502]; ORA-01502: index 'AUDITS_PK' or partition of such index is in unusable state ; caused by: ORA-01502: index 'AUDITS_PK' or partition of such index is in unusable state 采取如下方法重建索引解决处理。 select index_name,index_type,tablespace_name,table_type,status from user_indexes where index_name='AUDITS_PK'; alter session set skip_unusable_indexes=false; alter index AUDITS_PK rebuild; commit; 3.其出现这个问题的根本原因和解决方法是什么呢? 移动或者删除表空间或者分区后,基于该table的索引会自动失效UNUSABLE;此时访问或操作该table时,会报ORA-01502异常;无论唯一还是普通索引都要通过重建解决。 解决方法:在使用表分区时尽量创建本地索引.( 例如: create index AUDITS_PK on AUDITS(id) local; --因为id是分区键,所以这样就创建了一个有前缀的本地索引) 这样在删除分区后则索引不会出现失效问题。
「深度学习福利」大神带你进阶工程师,立即查看>>> 一个很全的API链接文档 以下是使用Spring data Jpa操作ES的一些记录
在ElasticsearchRepository中我们可以使用 Not Add Like Or Between 等关键词自动创建查询语句。 记住上面这句话,代码示例: public interface EmployeeRepository extends ElasticsearchRepository { /** * 通过ID字段查询 */ Employee queryEmployeeById(String id); }