mysql update语句

MySql性能优化

拜拜、爱过 提交于 2020-01-17 14:11:51
` ` ` bash show variables like '%max_connections%' ; show variables like '%max_user_connections%' ; ` show variables like '%max_connections%' ; show variables like '%max_user_connections%' ; ` ` MySQL性能 最大数据量 最大并发数 查询耗时0.5秒 实施原则 数据表设计 数据类型 避免空值 text类型 索引优化 索引分类 优化原则 SQL优化 分批处理 不做列运算 避免Select * 操作符<>优化 OR优化 IN优化 LIKE优化 JOIN优化 LIMIT优化 其他数据库   博主负责的项目主要采用阿里云数据库MySQL,最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟。导出日志后分析,主要原因竟然是 没有命中索引和没有分页处理 。其实这是非常低级的错误,我不禁后背一凉,团队成员的技术水平亟待提高啊。改造这些SQL的过程中,总结了一些经验分享给大家,如果有错误欢迎批评指正。 MySQL性能 最大数据量    抛开数据量和并发数,谈性能都是耍流氓 。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 文件系统 单文件大小限制 FAT32 最大4G NTFS

【Canal源码分析】配置项

左心房为你撑大大i 提交于 2020-01-17 13:21:40
本文讲解canal中的一些配置含义。 一、配置加载图 二、配置文件canal.properties 2.1 common参数定义 比如可以将instance.properties的公用参数,抽取放置到这里,这样每个instance启动的时候就可以共享. 【instance.properties配置定义优先级高于canal.properties】 参数名 含义 默认值 canal.id 每个canal server实例的唯一标识,暂无实际意义 1 canal.ip canal server绑定的本地IP信息,如果不配置,默认选择一个本机IP进行启动服务 无 canal.port canal server提供socket服务的端口 11111 canal.zkServers canal server链接zookeeper集群的链接信息,例子:127.0.0.1:2181,127.0.0.1:2182 无 canal.zookeeper.flush.period canal持久化数据到zookeeper上的更新频率,单位毫秒 1000 canal.file.data.dir canal持久化数据到file上的目录 ../conf (默认和instance.properties为同一目录,方便运维和备份),如果想要HA,不需要配置这个,因为无法通过文件实现高可用 canal.file

Mysql之字符集

六月ゝ 毕业季﹏ 提交于 2020-01-17 06:55:23
Mysql 常见数据类型 INT类型 TINTINT 1字节(256) 2的8次 INT 4字节(4294967296)2的32次 BIGINT 8字节 DATE类型 DATE 3字节 TIMESTAMP 4字节 STRING类型 CHAR(M) M字节 1<=M<=255 (左边对齐) VARCHAR(M) L+1字节 L<=M 1<=M<=255 BLOB,TEXT L+2字节 L<2^8 Mysql数据库字符集知识   字符集就是一套文字符号及其编码、比较规则的集合   Mysql数据库字符集包括字符集(character)和校对规则(collation)两个概念。字符集定义mysql数据字符串的存储方式,校对规则定义比较字符串的方式。 mysql 数据库常见字符集 一个汉字长度 说明 GBK 2 不是国际标准,对中文支持较好(需支持中文,数据量大,性能要求高) UTF-8 3 扩展B区以后的汉字占四个字节中英混合环境,用的最多,没特别需求,建议此种 latin1 1 yum安装默认字符集 utf8mb4 4 UTF-8 Unicode,移动互联网 企业场景创建什么字符集的数据库呢? 1、根据开发程序确定的字符集(建议utf8) 2、在编译时候指定字符集 3、建库的时候默认创建即可mysql> show char set; 查看字符集设置情况 1、查看当前数据库字符集设置

jdbc对mysql数据库通过批量(executeBatch)执行存储过程来插入数据(可以实现如果数据存在则更新,不存在则插入的功能)

半腔热情 提交于 2020-01-17 05:24:56
1、首先在mysql中创建表,sql语句如下: DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `name` varchar(255) COLLATE utf8_bin DEFAULT NULL, `age` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 2、然后创建一个存储过程,代码如下: DROP PROCEDURE IF EXISTS update_insert_student; CREATE PROCEDURE update_insert_student(name_s VARCHAR(50),age_s INT) BEGIN DECLARE count INT; SET count=0; SELECT count(*) INTO count FROM student WHERE name=name_s; IF count>0 THEN UPDATE student SET age=age_s WHERE name=name_s; ELSE INSERT INTO student (name,age) VALUES (name_s,age_s); END IF; END 注释: (1

老生常谈!数据库如何存储时间?你真的知道吗?

我只是一个虾纸丫 提交于 2020-01-17 02:11:03
我们平时开发中不可避免的就是要存储时间,比如我们要记录操作表中这条记录的时间、记录转账的交易时间、记录出发时间等等。你会发现这个时间这个东西与我们开发的联系还是非常紧密的,用的好与不好会给我们的业务甚至功能带来很大的影响。所以,我们有必要重新出发,好好认识一下这个东西。 这是一篇短小精悍的文章,仔细阅读一定能学到不少东西! 1.切记不要用字符串存储日期 我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手。 但是,这是不正确的做法,主要会有下面两个问题: 字符串占用的空间更大! 字符串存储的日期比较效率比较低(逐个字符进行比对),无法用日期相关的 API 进行计算和比较。 2.Datetime 和 Timestamp 之间抉择 Datetime 和 Timestamp 是 MySQL 提供的两种比较相似的保存时间的数据类型。他们两者究竟该如何选择呢? 通常我们都会首选 Timestamp 。 下面说一下为什么这样做! 2.1 DateTime 类型没有时区信息的 DateTime 类型是没有时区信息的(时区无关) ,DateTime 类型保存的时间都是当前会话所设置的时区对应的时间。这样就会有什么问题呢?当你的时区更换之后,比如你的服务器更换地址或者更换客户端连接时区设置的话

mysql复习(2)

和自甴很熟 提交于 2020-01-16 19:38:24
一、数据定义:   SQL数据的定义包括模式的定义、表定义、视图定义和索引的定义。   1.基本的模式定义情况如下表。      2.一个关系数据库管理系统的实例中可以创建多个数据库,一个数据库中可以建立多个模式,一个模式下面通常包括多个表、视图和数据库对象。 二、模式的定义与删除   1.定义模式:CREATE SCHEMA <模式名> AUTHORIZATION<用户名>;     (1)要创建模式,要调用该命令的数据库管理员权限,获得数据库管理员授予的CREATE SCHEMA的权限     (2)为用户WANG定义一个学生-课程模式S-T       CREATE SCHEMA AUTHORIZATION WANG     2.删除模式:     (1)DROP SCHEMA <模式名><CASCADE|DESTRICT>       DROP SCHEMA ZHANG SCACADE       在语句中删除了模式的通式,该模式中定义的表也会被删除 三、基本表的定义与删除   1.定义基本表     CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件]     [,<列名<数据类型>[列级完整性约束条件]]     。。。。     [,<表级完整性约束条件>] );     (1)创建一个“学生”表Student,列级完整性约束条件,Sno是主码

20200116_centos7.2 下 mysql_5.7修改root密码

我的未来我决定 提交于 2020-01-16 15:15:22
1. 需改my.cnf文件 [root@rakinda-iot-platform ~]# vim /etc/my.cnf 2. 新增一行, 登录时跳过密码, 保存后退出 --skip-grant-tables 3. 直接使用mysql登入到数据库: 4. 输入update 修改密码: mysql> update user set password=password('yourpassword') where user='root'; ERROR 1054 (42S22): Unknown column 'password' in 'field list' #5.7下面已经不支持password字段了, 可以使用select查看一下user表的确没有password字段了 mysql> select *from user \G 5. 所以使用下面的语句, 修改authentication_string字段: mysql> update user set authentication_string=password('yourpassword') where user='root'; Query OK, 2 rows affected, 1 warning (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 1 mysql> flush

mysql -=- DDL

↘锁芯ラ 提交于 2020-01-16 09:02:06
net start mysql mysql -uroot -p show databases use 数据库名 how tables -------------------------------------------------------------------------- select goods_id ,goods_name ,shop_price+1,market_price,market_price-shop_price from goods; select * from goods where goods_id = 32; select goods_id,goods_name,cat_id from goods where cat_id <> 32;//不等于 select goods_id,goods_name,cat_id from goods where cat_id > 32;//不等于 select goods_id,goods_name,cat_id from goods where cat_id <= 32 and cat_id >= 2;//不等于 select goods_id,cat_id from goods where cat_id = 4 or cat_id =11;//或者 select goods_id,cat_id from

MYSQL错误代码: 1093 You can't specify target table 'sc' for update in FROM clause

 ̄綄美尐妖づ 提交于 2020-01-16 08:37:07
MYSQL执行如下语句报错: UPDATE sc SET grade =grade*1.05 WHERE grade < (SELECT AVG(grade) AS avg_grade FROM sc) 报错信息如下:   错误代码: 1093   You can't specify target table 'sc' for update in FROM clause 意思是不能在同一语句中更新select出的同一张表元组的属性值 解决方法:将select出的结果通过中间表再select一遍即可。 UPDATE sc SET grade =grade*1.05 WHERE grade < (SELECT avg_grade FROM (SELECT AVG(grade) AS avg_grade FROM sc) AS temp) MYSQL手册sql-syntax.html里是这么写的: Incorrectly used table in subquery: Error 1093 (ER_UPDATE_TABLE_USED) SQLSTATE = HY000 Message = "You can't specify target table 'x' for update in FROM clause" This error occurs in cases such as the

DataBase - MySQL安全模式

人盡茶涼 提交于 2020-01-16 00:52:16
MySQL中sql_safe_updates安全模式 概念与场景 常见场景 安全模式Sql语句 MySQL中sql_safe_updates安全模式 概念与场景 不论新手还是老手在使用mysql中一般都会有批量操作数据的需求,假设在安全模式关闭的情况下,我们update和delete没有加入where条件,那么我们就会失手将全部数据修改或删除(这个后果不亚于删库跑路了~),故为了防止这种情况,在使用数据库时通常都会加入安全模式 常见场景 在update操作中 当where条件中列(column)没有索引可用且无limit限制时会拒绝更新 where条件为常量且无limit限制时会拒绝更新 在delete操作中 where条件为常量 where条件为空 where条件中 列(column)没有索引可用且无limit限制时拒绝删除 安全模式Sql语句 查看当前安全模式状态 show variables like 'sql_safe_updates' ; MySQL输出效果 Value : ON 开启 Value :OFF 关闭 设置安全模式状态 打开安全模式状态 set sql_safe_updates = 1 ; 关闭安全模式状态 set sql_safe_updates = 0 ; 来源: CSDN 作者: Modu_MrLiu 链接: https://blog.csdn.net