update 语句的子查询
效率低:
UPDATE wp_comments a,(SELECT id,price from wp_posts) b
SET comment_post_ID = b.id
where a.price = b.price
效率高:
UPDATE wp_comments a LEFT JOIN wp_posts b
ON a.price = b.price
SET a.comment_post_ID = b.id
where b.price>0 and b.post_author = 0 and a.comment_author=0
只加了price一个索引,时间从若干小时缩小至30秒。
mysql的update的一些特点
1、update 时,更新的表不能在set和where中用于子查询;
2、update 时,可以对多个表进行更新(sqlserver不行);
如:update ta a,tb b set a.Bid=b.id ,b.Aid=a.id;
3、update 后面可以做任意的查询,这个作用等同于from
字符串替换
UPDATE table_name SET field_name = replace (field_name,'from_str','to_str') WHERE field_name LIKE '%from_str%'
说明:
table_name —— 表的名字
field_name —— 字段名
from_str —— 需要替换的字符串
to_str —— 替换成的字符串
1、int只有四个字节,而手机号是由11位十进制数组成的,即可知道手机号有五个字节,如果用int存储,则第五位溢出,被“吃掉了”制。1byte = 8bit,所以int类型存储空间是32位,并且符号位占一位,所以int的数据范围为[-2^31~2^31-1],此外int(11)的11是只mysql的int类型显示的宽度。手机号 是11位,共五个字节,所以用int存储手机号 会丢失1字节,而且并不是丢失一位剩下10位这种情况。数据会被转换成二进制数,并且丢失超出int类型位数的部分。
2、int的数据范围为-2147483648~2147483647[-2^31~2^31-1],是用于定义整数类型变量的标示符。
存储手知机号道用的类型:
1、使用数据库类型varchar2存储手机号,将手机号当作字符串存储,后期取出便于显示。varchar2 数据类型指定一变长字符串,最大长度2000字节 。
2、在java等高级语言中,使用string存储手机号。
MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较
对于MyISAM引擎,不建立索引的情况下(推荐),效率从高到低:int > UNIX_TIMESTAMP(timestamp) > datetime(直接和时间比较)>timestamp(直接和时间比较)>UNIX_TIMESTAMP(datetime) 。
对于MyISAM引擎,建立索引的情况下,效率从高到低: UNIX_TIMESTAMP(timestamp) > int > datetime(直接和时间比较)>timestamp(直接和时间比较)>UNIX_TIMESTAMP(datetime) 。
对于InnoDB引擎,没有索引的情况下(不建议),效率从高到低:int > UNIX_TIMESTAMP(timestamp) > datetime(直接和时间比较) > timestamp(直接和时间比较)> UNIX_TIMESTAMP(datetime)。
对于InnoDB引擎,建立索引的情况下,效率从高到低:int > datetime(直接和时间比较) > timestamp(直接和时间比较)> UNIX_TIMESTAMP(timestamp) > UNIX_TIMESTAMP(datetime)。
原文链接:https://blog.csdn.net/yz18931904/article/details/82884095
// 查询今天的数据
SELECT * FROM 表名 WHERE to_days(时间字段) = to_days(now());
// 查询昨天的数据
SELECT * FROM 表名 WHERE to_days(now()) - to_days(时间字段) <= 1;
// 查询最近七天的数据
SELECT * FROM 表名 WHERE date_sub(curdate(), interval 7 day) <= date(时间字段);
「三年博客,如果觉得我的文章对您有用,请帮助本站成长」
共有 0 - Mysql 语句一些常识