咱们在开发中有很多的sql,是不好写的,写完了,还总容易出问题。
所以从现在开始总结,这些SQL语句。
--------------------------------------2019-01-09更新---------------------------------------
这个问题是因为做设计的时候忘了数据的唯一的问题。导致数据出现重复,查询的时候出现了查询的selectOne变成selectList。
1、清除重复的数据
DELETE
解释:
最里面的SQL“select max(id)……” 是根据字段确定重复数据
第二层的SQL “select a.id……”是为了创建临时表 避免出现1093的错误,错误如下:
1093
给查询的数据命名临时表表明为a 是为了解决MySql的错误1248 ,错误如下:
1248
第三层SQL没啥说的,就是一个删除操作。
解决问题的参考网站:
MySQL之You can't specify target table for update in FROM clause解决办法www.cnblogs.com2、创建 唯一约束
create unique index 唯一约束名称 on 表明(字段1,字段2);
事例:
create unique index user_environment_unqiue
on gw_run_user_environment(user_id,environment_id);
-------------------------------------2019-01-29更新----------------------------------------
最近比较忙,碰到了好多sql,今天就总结一下。
1、注释 Comment
在创建表的时候,一般大家是不加注释的,但是不加注释自己明白,但是让别人来开发的时候就看的一脸懵逼。这不是第一次了,尤其是不加注释的表,不加注释的代码,可是把我坑的不要不要的。。。
- 字段及表的注释
create
- 注释的修改
alter
我在这提醒大家,建表的时候一定要加注释,不加注释会被人打死的。
2、默认值 DEFAULT
在创建表的时候能使用默认值,一定要使用默认值,尤其是一些状态码,一些时间字段。
- 建表时使用默认值(还是上面的sql)
create
- 修改默认值
alter
看着是不是很简单啊?但是让大家写80%的人会写错,因为这个单词不常用。
- 设置默认的事假类型为 当前时间
这个也是比较坑,我百度了半天,都说设置默认值为 CURRENT_TIMESTAMP。经过实操,他的默认值第一次插入是0000-00-00 00:00:00。
(2019-09-05 收回上面的话,我直接操作图形化界面是0000-00-00 00:00:00,直接使用insert语句插入,就是系统时间了。详情见 2019-09-25更新,往下翻。)
后来发现Navicat 表设计里面,时间字段下有个选项 “根据当前时间戳更新”,我这选中之后发现成功。现导出sql如下:
DROP
大家仔细看就会发现,根据当前时间更新时间,不是 DEFAULT CURRENT_TIMESTAMP。
而是 ON UPDATE CURRENT_TIMESTAMP(0)。
-------------------------------------2019-04-26更新----------------------------------------
997结束了,然后又出差一个月,总算是快结束了。今天更新一下遇到的sql。
统计字段的数据是其他表的数据统计
UPDATE gw_topic AS a SET comment_count =
(select count(*) FROM gw_topic_conmment WHERE topic_id=a.topic_id);
解释:帖子表中有一个字段叫评论总数,而这个评论总数正好是评论表中的评论统计。一般正式环境,只要你做好业务(添加评论时候评论总数+1)就不会出现数量不一致的问题。但是开发环境则很容易出现这些问题。就需要进行数量统计的更新。
-------------------------------------2019-09-05更新----------------------------------------
关于之前【时间自动更新的字段属性】再次修改一下 两个属性的区别:
1、DEFAULT CURRENT_TIMESTAMP:默认是第一次插入是系统时间,用于的字段:创建时间等等
2、ON UPDATE CURRENT_TIMESTAMP:默认插入的时间是系统时间,意味着每次修改本条数据自动更新时间为系统时间,应用字段:更新时间、操作时间等字段
如果建表使用属性2更新时间且设置字段不能为空,InnoDB数据库会让你设置默认值。否则会报错误1067,如下图:
![4e54e23456b6e32d8f2feb474e1c6bcf.png](https://i-blog.csdnimg.cn/blog_migrate/574fd47690cfe0fa101003c4357eb2a8.jpeg)
但是可以两个属性一起使用,修改后如下图:
![b3240d7caeea673bed0dc9b805ccb7c8.png](https://i-blog.csdnimg.cn/blog_migrate/2277535fd95427a78197348da75e9481.jpeg)