首页 > 数据库技术 > 详细

MySQL后记

时间:2019-10-14 19:31:02      阅读:77      评论:0      收藏:0      [点我收藏+]

MySQL后记

这篇博客的目的是记录一些容易被忽略的MySQL的知识点,以及部分pymysql模块的注意点。

MySQL中的DDL与DML

  • DDL:数据定义语言(Data Definition Language),主要为create、alter、drop、truncate语句。
  • DML:数据操控语言(Data Manipulation Language),包括:insert、update、delete。注意,select语句属于DQL(Data Query Language)。

这两个是我们接触最多的sql语言,除此之外还有数据控制语言(DCL)和事务控制语言(TCL),对于事务来说,DDL语句是立刻执行、无法回滚(rollback)的,DML只有提交(commi)了才会生效。


被忽略的“if not exists”

现在有一个sql脚本,里面的部分建表语句我们已经执行过了该怎么办呢?

# 可以使用以下语句忽略已经建好的表
create table `tablename` if not exists (fields) ;

# 若是已经存在,会有一条warning
show warnings;

不过这样的语句在pymysql模块中会抛错。


处理重复数据

在我们实际项目中很可能会遇到很多的重复数据,那么我们如何处理这些重复数据呢?

  • 忽略:

    insert ignore into `tablename` values(...);
  • 替换:

    raplace into ...;
    
    """
    这样做实际上会有两条记录受影响
    1: 先删除原有数据
    2:再插入后来的数据
    """
  • 更新:

    insert into t1 (a,b,c) values (1,2,3) on duplicate key update c=c+1;
    
    # 等同于 
    update t1 set c=c+1 where a=1;
    # 如果b也是唯一的
    update t1 set c=c+1 where a=1 or b=2 limit 1;

mysql8的更新

  1. 无法在赋与权限的同时创建用户了!

    # 8.0之前:
    grant 权限们 on 数据库名.表名 to 用户名@主机名 identified by '密码';
    
    # 8.0后  无法一步完成了
    create user 用户名@主机名 identified by '密码';
    grant 权限们 on 数据库名.表名 to 用户名@主机名 with grant option;
  2. 以后将取消float(M,D)以及double(M,D)语法。

  3. 以后将取消浮点型的auto_incremen设置。

  4. 不推荐使用zerofill

补充rlike等同于regexp

MySQL后记

原文:https://www.cnblogs.com/Du704/p/11673234.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!