mysql update语句

mysql复制一列到另一列

喜夏-厌秋 提交于 2020-01-19 07:50:39
mysql复制一列到另一列 UPDATE 表名 SET B列名=A列名 需求:把一个表某个字段内容复制到另一张表的某个字段。 实现sql语句1: 复制代码 代码如下: UPDATE file_manager_folder f1 LEFT OUTER JOIN file_manager_folder f2 ON f1.name = f2.name AND f2.parentId = 54 SET f1.parentId = 54 WHERE f2.name IS NULL AND f1.id IN (1,2,3); 实现sql语句2: 复制代码 代码如下: update B set extra = A.extra from A join B on (A.id = B.id); 实现sql语句3: 复制代码 代码如下: update b set b.sms = (select a.sms from a where a.id = b.id) 需要确定两张表中的id都是主键或者唯一 实现sql语句4: 复制代码 代码如下: UPDATE A SET A.SMS = (SELECT B.SMS FROM B WHERE A.ID = B.ID) WHERE EXISTS (SELECT 1 FROM B WHERE A.ID = B.ID); 实现sql语句5:

PHP和Mysql的Timestamp互换

我们两清 提交于 2020-01-19 03:04:35
  在mysql中有三种时间字段类型:DATETIME,DATE和TIMESTAMP。     DATETIME以YYYY-MM-DD HH:MM:SS格式的字符串来保存数据;     DATE则是只有年月日以YYYY-MM-DD形式的字串;   TIMESTAMP类型和PHP中的TIMESTAMP类型名字一样,但是两者基本上是不同的。   PHP是延用了UNIX时间签的类型为一个整数,   而在mysql中TIMESTAMP字段则是随着记录变化而一个自动更新为当时时间的DATETIMP字段。在mysql4.1版本之后TIMESTAMP格式DATETIME格式基本上是一致了。   于是常常需要在php和msql中对两种格式的Timestamp进行转换。转换方法总结一下:     第一种方法:使用 date()和strtotime()函数     $mysqltime=date('Y-m-d H:i:s',$phptime);     $phptime=strtotime($mysqldate);     第二种方法:在查询语句中使用mysql函数转换:UNIX_TIMESTAMP(DATETIME=>PHP TIMESTAMP)和FROM_UNIXTIME(PHP TIMESTAMP=>DATETIME).     $sql="SELECT UNIX_TIMESTAMP

MySql语句记录

ε祈祈猫儿з 提交于 2020-01-18 23:34:32
truncate table tablename; 效果同不带where子句的delete相同,仅会删除表数据,不删除表结构;但是truncate table语句属于DDL语句,不会在删除时加事务,删除后也不可恢复。另一个区别是delete后不会真正释放表空间,而truncate table后会把表空间释放至低位水平。 select SQL_CACHE / select SQL_NO_CACHE select SQL_CACHE xxx 如果查询结果可被缓存并且query_cache_type是ON或者DEMAND,查询的结果将被mysql缓存。 select SQL_NO_CACHE xxx mysql服务器不对这条语句使用缓存,即:既不查看这个查询是否存在缓存,也不把查询结果缓存在服务器内。 join … on / join … using(col1, col2, …) join .. on 常规join语句写法,on后边添加join的条件。 join .. using(col1, col2, ...) 如果被join的两个表的列名相同且使用等于条件来join,则可以简化为这种写法。 等价于 join .. on a.col1 = b.col1 and a.col2 = b.col2 and ... insert… on duplicate key update… 插入数据时

mysql间隙锁

百般思念 提交于 2020-01-18 17:43:32
什么是间隙锁(gap lock)?   间隙锁是一个在索引记录之间的间隙上的锁。 间隙锁的作用?     保证某个间隙内的数据在锁定情况下不会发生任何变化。比如我mysql默认隔离级别下的可重复读(RR)。    当使用唯一索引来搜索唯一行的语句时,不需要间隙锁定 。如下面语句的id列有唯一索引,此时只会对id值为10的行使用记录锁。     select * from t where id = 10 for update;// 注意:普通查询是快照读,不需要加锁   如果,上面语句中id列没有建立索引或者是非唯一索引时,则语句会产生间隙锁。   如果,搜索条件里有多个查询条件(即使每个列都有唯一索引),也是会有间隙锁的。   需要注意的是,当id列上没有索引时,SQL会走聚簇索引的全表扫描进行过滤,由于过滤是在MySQL Server层面进行的。因此每条记录(无论是否满足条件)都会被加上X锁。但是,为了效率考量,MySQL做了优化,对于不满足条件的记录,会在判断后放    锁,最终持有的,是满足条件的记录上的锁。但是不满足条件的记录上的加锁/放锁动作是不会省略的。所以在没有索引时,不满足条件的数据行会有加锁又放锁的耗时过程。 间隙的范围?   根据检索条件向下寻找最靠近检索条件的记录值A作为左区间,向上寻找最靠近检索条件的记录值B作为右区间,即锁定的间隙为(A,B] 左开右闭 。

MySQL基本命令脚本

非 Y 不嫁゛ 提交于 2020-01-18 15:28:25
1 配置环境变量:右击此电脑点击属性,点击高级系统设置,点击环境变量,在系统变量中找到path,然后点击 编辑,点击新建输入地址如:“C:\Program Files\MySQL\MySQL Server 5.7\bin” 在 C:\WINDOWS\System32 中找到cmd.exe 以管理员身份运行 cmd 在cmd中 输入 net start mysql57 3.以用户身份 cmd 输入 ‘mysql -u root -p’ MySql 基本命令 1.启动服务: 以管理员身份运行cmd 格式:net start 服务名称 示例:net start mysql57 2.停止服务: 以管理员身份运行cmd 格式:net stop 服务名称 示例:net stop mysql57 3 连接数据库 格式:mysql -u 用户名 -p 示例:mysql -u root -p 4.退出登陆(断开连接) quit或exit 5.查看版本(连接后可以执行) 示例:select version(); 6,显示当前时间(连接后可以执行) 示例:select now(); 7,远程连接 格式:mysql -h ip地址 -u 用户名 -p 输入对方密码: 二,1.创建数据库 格式:create database 数据库名 charset=utf8; 示例:create database

python下的MySQLdb使用

蹲街弑〆低调 提交于 2020-01-18 07:59:57
下载安装MySQLdb <1>linux版本 http://sourceforge.net/projects/mysql-python/ 下载,在安装是要先安装setuptools,然后在下载文件目录下,修改mysite.cfg,指定本地mysql的mysql-config文件的路径 <2>windows版本 网上搜索到一个http://www.technicalbard.com/files/MySQL-python-1.2.2.win32-py2.6.exe 安装后import MySQLdb会出现 DeprecationWarning: the sets module is deprecated 这样一个警告,google之 原因是2.6不知sets这个模块,不过已经添加了set内置函数。找到MySQLdb文件夹的中__init__.py,注释掉from sets import ImmutableSet class DBAPISet(ImmutableSet):添加class DBAPISet(frozenset):;找到converters.py注释掉from sets import BaseSet, Set。然后修改第45行和129行中的Set为set。 搞定。 下面开始操作的demo: Python代码 1 # -*- coding: utf-8 -*- 2

MySQL中DML的基本操作

不打扰是莪最后的温柔 提交于 2020-01-18 04:45:08
-- DML:数据操纵语言,用于对表中的数据进行增、删、改操作(重点)INSERT INTO、DELETE、UPDATE -- 添加数据:INSERT INTO -- 往 指定 字段中添加数据 INSERT INTO 表名(字段一,字段二...) VALUES (字段值一,字段值二...); -- 往 所有 字段中添加数据 -- 注意 表中有几列字段就要添加几个值 INSERT INTO 表名 VALUES (字段值一,字段值二...); -- 一次性添加多条数据 INSERT INTO 表名 VALUES (字段值一,字段值二...)(字段值一,字段值二...)(字段值一,字段值二...)(字段值一,字段值二...); -- 删除数据:DELETE -- 删除所有数据 DELETE FROM 表名; -- 删除所有数据 ,一条一条的删除;属于DML语句 TRUNCATE TABLE 表名; -- 删除所有数据,先删除表,在创建一张一摸一样的新表;属于DDL语句 -- 删除id = 3 的信息 DELETE FROM 表名 WHERE id = 3; -- 删除年龄为22的数据 DELETE FROM 表名 WHERE age = 22; -- 修改数据:UPDATE UPDATE 表名 SET 字段1=字段值1,字段2=字段值2... WHERE 条件; -- 将id

【MYSQL】delete把我磁盘空间给"吃"了

旧街凉风 提交于 2020-01-18 03:59:33
前言 记得在很久之前,我在学习某个关于MYSQL的课程时,需要插入大量的随机数据,约500W,插入之后硬盘空间直接少了约10G(具体大小取决于你插入什么样的数据),到这里位置我都觉得一切正常。可在之后,让我觉得"魔幻"的事情发生了。 我当时想利用这批已插入的数据测测我电脑跑delete语句的速度,然后我就编写代码,用delete语句删除了大概80%的数据。 整个删除过程都很顺利,可当我删完后查看一下磁盘空间,发现磁盘只多了1G,我整个人都懵了,在约10G的数据里我可是删了80%,怎么才还给我1G?难道我装的MYSQL里有个病毒? 虽然当时通过百度的方法勉强让MYSQL"吐"出了4,5G空间,但我还是不明白为啥会这样,直到我前一段时间看到相关书籍有讲解这一块,才终于解开了疑惑。 小贴士:你可能会疑惑,明明删除了80%的数据,但为什么才"吐"出来4G多?那是因为占用磁盘的可不止我们插入的数据,还有我们的插入&删除时候的操作记录,即binlog,而且根据binlog的格式不同,占用的存储空间也会有差异。 PS:无特别说明,环境默认是MYSQL5.7.21+InnoDB+默认配置。 Delete过程的空间去哪了 在这里我同样先无视锁机制、内存变化等因素,因为我们在讨论的主要是:执行Delete过程中,被删除的数据所占有的存储空间到底怎么了? 为了方便,我在这里借用一下掘金小册的图描述过程:

MySQL死锁

冷暖自知 提交于 2020-01-18 03:56:52
Reference: https://time.geekbang.org/column/article/117247 死锁产生 行锁的具体实现算法有三种:record lock、gap lock以及next-key lock。 record lock是专门对索引项加锁; gap lock是对索引项之间的间隙加锁; next-key lock则是前面两种的组合,对索引项及其之间的间隙加锁。 只在可重复读或以上隔离级别下的特定操作才会取得gap lock或next-key lock,在Select、Update和Delete时,除了基于唯一索引的查询之外,其它索引查询时都会获取gap lock或next-key lock,即锁住其扫描的范围。主键索引也属于唯一索引,所以主键索引是不会使用gap lock或next-key lock。 在MySQL中,gap lock默认是开启的,即innodb_locks_unsafe_for_binlog参数值是disable的,且MySQL中默认的是RR事务隔离级别。 当执行以下查询SQL时,由于order_no列为非唯一索引,此时又是RR事务隔离级别,所以SELECT的加锁类型为gap lock,这里的gap范围是(4,+∞)。 1 SELECT id FROM demo.order_record where order_no = 4 for

3_SQL注入攻击_1

眉间皱痕 提交于 2020-01-17 22:05:47
0x00 sql注入   在owasp的年度top10安全问题中,注入高居榜首。SQL注入攻击是指通过构建特殊的输入作为参数传入web应用程序,而这些输入大多都是SQL语法中的一些组合,通过执行SQL语句而执行攻击者所要的操作,其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统。 1.对web应用而言,用户的核心数据存储在数据库中,例如MySQL,SQL sever,oracle; 2.通过SQL注入攻击,可以获取,修改,删除数据库信息,并且通过提权来控制web服务器等其他操作; 3.SQL注入即攻击者通过构造特殊的SQL语句,入侵目标系统,致使后台数据库泄露数据的过程; 4.因为SQL注入漏洞造成的严重危害性所以,常年稳居owasp top10的榜首。 0x01 SQL注入的危害  1.脱库导致用户数据泄露;  2.危害web等应用的安全;  3.失去操作系统的控制权;  4.用户信息被非法买卖;  5.危害企业及国家的安全; 0x02 SQL基础知识回顾   环境:OWASP   表1:dvwa.user   表2:wordpress.wp_users   表3: mysql.user 登录 mysql -uroot -p root@owaspbwa:~# mysql -uroot -p Enter password: Welcome to the MySQL