dbeaver导出建表语句_常用SQL语句(时常修改)

咱们在开发中有很多的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.com

2、创建 唯一约束

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
InnoDB引擎 ON UPDATE CURRENT_TIMESTAMP属性

但是可以两个属性一起使用,修改后如下图:

b3240d7caeea673bed0dc9b805ccb7c8.png
两个时间属性一起使用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值