zoukankan      html  css  js  c++  java
  • 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只有提交(commit)了才会生效。


    被忽略的“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

  • 相关阅读:
    ActionContext和ServletActionContext
    1.有Dao为什么还要Service?
    1.DBCP和CP30的区别
    设计模式之单例模式(java实现)
    DOM之练习2
    js之DOM练习题
    动态改变dom结构常用方法
    js 自动类型转换
    定位属性position
    html基础
  • 原文地址:https://www.cnblogs.com/Du704/p/11673234.html
Copyright © 2011-2022 走看看