MySQL后记

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

猜你喜欢

转载自www.cnblogs.com/Du704/p/11673234.html