mysql数据库

MYSQL数据库--连接查询

最后都变了- 提交于 2020-02-27 18:23:23
连接查询 连接是把不同表的记录连到一起的最普遍的方法。一种错误的观念认为由于MySQL的简单性和源代码开放性,使它不擅长连接。这种观念是错误的。MySQL从一开始就能够很好地支持连接,现在还以支持标准的SQL2连接语句而自夸,这种连接语句可以以多种高级方法来组合表记录。 内连接查询 内连接是最普遍的连接类型,而且是最匀称的,因为它们要求构成连接的每一部分的每个表的匹配,不匹配的行将被排除。 例子: SELECT * FROM user_fuelcard WHERE user_id = (SELECT row_id FROM md_user WHERE phone = '13782843517') 查询结果: 外连接查询 与内连接不同,外连接是指使用OUTER JOIN关键字将两个表连接起来。外连接生成的结果集不仅包含符合连接条件的行数据,而且还包括左表(左外连接时的表)、右表(右外连接时的表)或两边连接表(全外连接时的表)中所有的数据行。 例子: SELECT phone 电话号码, ua.balance 账户余额 FROM md_user mu JOIN user_account ua ON ua.user_id = mu.row_id WHERE mu.row_id IN ( SELECT user_id FROM user_account WHERE ua.balance >

MySQL MSI Installer与MySQL ZIP Archive的区别

廉价感情. 提交于 2020-02-27 14:52:34
以下是官网上提供的的两种版本(其实是两种安装方式): 一、MySQL MSI Installer 这是安装版本,在安装过程中,通过将用户的各项选择自动写入ini(配置文件),即自动配置。适合初学者使用。 二、MySQL ZIP Archive 这是压缩版本,需要自己打开ini文件写入配置信息。适合高级用户。 MySQL MSI Installer与MySQL ZIP Archive的区别 配置方法:参考《MySQL入门很简单》第二章;或者 http://jingyan.baidu.com/article/597035521d5de28fc00740e6.html 其实,观察这两个文件,大小差的不是很多;但是,压缩版的经过解压后会达到1G以上,这是因为mysql是开源的数据库,里面的源文件和说明文档都没有删掉。 mysql官网下载慢,可以使用搜索引擎搜索关键字“开源镜像”,来下载相关软件。 来源: CSDN 作者: beyond6562 链接: https://blog.csdn.net/beyond6562/article/details/104535142

mysql 分页 limit 优化

二次信任 提交于 2020-02-27 14:31:11
1.语法: *** limit [offset,] rows 一般是用于select语句中用以从结果集中拿出特定的一部分数据。 offset是偏移量,表示需要的数据是跳过多少行数据之后的,可以忽略;rows表示要拿多少行数据。 2,场景: 前台要展示数据库中数据,需要后台实现分页,传入数据要有“页码page”跟“每页数据条数nums”。 select * from t_table order by id limit (page-1)*nums,nums 3.问题: 当一个数据库表过于庞大,LIMIT offset, length中的offset值过大,则SQL查询语句会非常缓慢 select * from t_table order by id limit 10000000,10 上边SQL语句表示从表t_table 中拿数据,跳过10000000行之后,拿10行 4.优化思路: 1.能不能跳过10000000条数据然后读取10条,而不是读取10000010条数据然后返回10条数据。 2.order by字段需要建立索引 改进后的SQL语句如下: select * from t_table where id >= ( select id from t_table order by id limit 10000000,1 ) limit 10 注:假设id是主键索引

mysql保留字(关键字)

↘锁芯ラ 提交于 2020-02-27 13:24:45
在做SSM的订单查询功能时总是报出SQL语法错误的信息,我寻思我这是不是用的MyBatis给我生成的Mapper吗?怎么会有语法错误,又是一番挣扎,终于发现是因为我使用了mysql的保留字status作为我订单状态的数据库字段,保留字: 后面再试,还是同样的错误,然后又发现我又使用了保留字order作为我的表名,保留字: 真是欲哭无泪啊...... 所以以后建表选字段时一定要参考着保留字来选,不要与其重名了。 来源: https://www.cnblogs.com/superyucong/p/12371621.html

python面试题 -- 网编并发

白昼怎懂夜的黑 提交于 2020-02-27 12:21:54
Python面试重点(进阶篇) 注意:只有必答题部分计算分值,补充题不计算分值。 第一部分 必答题 简述 OSI 7层模型及其作用?(2分) # 应用层:文件传输,文件管理,电子邮件的信息处理# 表示层:确保一个系统的应用层发送的消息可以被另一个系统的应用层读取,编码转换,数据解析,管理数据的解密和加密# 会话层:验证访问和会话管理# 传输层:为应用程序之间提供端对端的逻辑通信。# 网络层:选择合适的网间路由完成两个计算机之间的多个数据链路,通过路由协议和地址解析协议(ARP)。IP,RIP(路由信息协议),OSPF(最短路径优先协议)# 数据链路层:在物理层提供的比特流的基础上,建立相邻节点之间的数据链路,不可靠的物理介质提供可靠传输 ppp协议# 物理层:规定通信设备,通信链路的特性 简述 TCP三次握手、四次回收的流程。(3分) # 第一次握手:客户端首先向服务端发起连接,这时TCP头部中的SYN标识位值为1,然后选定一个初始序号seq=x(一般是随机的),消息发送后,A进入SYN_SENT状态,SYN=1的报文段不能携带数据,但要消耗一个序号。# 第二次握手:服务端收到客户端的连接请求后,同意建立连接,向A发送确认数据,这时TCP头部中的SYN和ACK标识位值均为1,确认序号为ack=x+1,然后选定自己的初始序号seq=y(一般是随机的),确认消息发送后,服务端进入SYN

做一个项目,某些敏感信息不方便提交怎么办?

梦想与她 提交于 2020-02-27 11:01:01
例如,我将一个需要访问数据库的py文件必须提交,但是数据库的密码又不能保存在其中。 目前想到的解决方案:使用ini存储,虽然这可能是一种很烂的办法,这是本人的第一篇博客,还希望大神多帮忙。 在当前目录新建config.ini文件并添加以下内容: [mysql]password=myqpl的密码在Python文件开始中写: import osimport configparser #导入库curpath=os.path.dirname(os.path.realpath(__file__))cfgpath=os.path.join(curpath,"config.ini")#使用os读取文件conf=configparser.ConfigParser()conf.read(cfgpath,encoding="utf-8")在需要使用密码的地方写password=conf.get("mysql","password")这样的话密码还是明文存储,还是非常不安全,目前仍然在寻找更加有效的方式。 来源: https://www.cnblogs.com/PeaceSheep/p/12370738.html

MYSQL查询出来的值太长,插入到数据库自动截断了

别来无恙 提交于 2020-02-27 09:48:08
如果是new 一个java对象,然后保存到数据库,如果保存的对象的字段超出数据库字段的大小限制,会报错; 如果是在java中先利用sql把数据查找出来,然后new一个java对象,再把对应的属性值放到java对象里面,利用对象保存,不会报错,只是保存的值可能不是正确的值,因为数值太长,在利用sql查找出来的时候已经自动截断,此时保存到数据库里面是截断后的数据... 只要是通过select查询出来的结果,结果集就可能被截断;如果先通过where条件判断,这个时候不会是什么值就会用什么值来做判断,然后到select显示数据的时候,如果超出长度,会被截断... 项目中有个这样的问题,搞了好久才知道是被mysql自动截断了... Mysql5.7中使用group concat函数数据被截断的问题完美解决方法: https://www.jb51.net/article/136480.htm 来源: oschina 链接: https://my.oschina.net/u/2331760/blog/3157933

MYSQL触发器的使用

一笑奈何 提交于 2020-02-27 09:37:23
概念:触发器是一种特殊的储存过程,在满足定义条件操作时触发,并且自动执行触发器中预先设定好的定义的语句集合 触发器是特殊的储存过程 触发器是在对表操作时,满足条件就可以自动调用预先编译的 sql 语句 安全性 可以基于数据库的值使用户具有操作数据库的某种权利 审计 可以跟踪用户对数据库的操作 实现复杂的数据完整性规则 创建语法:四要素(操作对像 触发时间 触发事件 触发操作) 触发器关键字: trigger Now() 时间函数 Old 表只读操作, new 表可以在触发器中使用用 set 赋值操作,避免重复触发触发器 触发器语法: Create trigger 触发器名 After|before # 触发时间 Insert|update|delete # 触发事件 On 表名 # 触发对像 For each row # 针对表中每一条数据都会触发 Begin SQL 操作 End 注意:触发器名: tr_xxx 触发时机: After|before (触发事件之后 | 触发事件之前) 触发事件: Insert|update|delete 触发对像就是表,也就以为,触发器是建立在表上的 For each row 表示任何一条记录上的操作满足触发事件都会触发该触发器 来源: https://www.cnblogs.com/520WANG/p/12370403.html

Mysql常规优化

回眸只為那壹抹淺笑 提交于 2020-02-27 08:58:58
一、SQL语句优化 (1)使用limit对查询结果的记录进行限定 (2)避免select *,将需要查找的字段列出来 (3)使用连接(join)来代替子查询 (4)拆分大的delete或insert语句 二、选择合适的数据类型 (1)使用可存下数据的最小的数据类型,整型 < date,time < char,varchar < blob (2)使用简单的数据类型,整型比字符处理开销更小,因为字符串的比较更复杂。如,int类型存储时间类型,bigint类型转ip函数 (3)使用合理的字段属性长度,固定长度的表会更快。使用enum、char而不是varchar (4)尽可能使用not null定义字段 (5)尽量少用text,非用不可最好分表 三、选择合适的索引列 (1)查询频繁的列,在where,group by,order by,on从句中出现的列 (2)where条件中<,<=,=,>,>=,between,in,以及like 字符串+通配符(%)出现的列 (3)长度小的列,索引字段越小越好,因为数据库的存储单位是页,一页中能存下的数据越多越好 (4)离散度大(不同的值多)的列,放在联合索引前面。查看离散度,通过统计不同的列值来实现,count越大,离散程度越高: mysql> SELECT COUNT(DISTINCT column_name) FROM table_name;

Limit参数优化MySQL查询的方法

主宰稳场 提交于 2020-02-27 08:35:09
在做一些查询时,总希望能避免数据库引擎做全表扫描,因为全表扫描时间长,而且其中大部分扫描对客户端而言是没有意义的。 那么,在 mysql 中有那些方式是可以避免全表扫面?除了通过使用索引列或分区等方式来进行查询的优化之外,还有那些呢? 看了一个老外写的程序,在 MySQL 查询中使用了很多 Limit 关键字,这就让我很感兴趣了,因为在我印象中, Limit 关键字似乎更多被使用 MySQL 数据库的程序员用来做查询分页(当然这也是一种很好的查询优化),那在这里举个例子,假设我们需要一个分页的查询 ,Oracle中一般来说都是用以下 SQL 句子实现: SELECT * FROM ( SELECT a1.*, rownum rownum_ FROM testtable a1 WHERE rownum > 20) WHERE rownum_ <= 1000 此语句能查询到 testtable 表中的 20 到 1000 记录,而且还需要嵌套查询,效率不会太高,看看 MySQL 的实现: SELECT * FROM testtable a1 limit 20,980; 这样就能返回 testtable 表中的 21 条到( 20 + 980 =) 1000 条的记录。 实现语法确实简单,但如果要说这里两个 SQL 语句的效率,那就很难做比较了,因为在 MySQL 中 Limit