记一些MySQL比较常用的SQL语句

记一些MySQL比较常用的SQL语句

在这里记录一些平时经常使用的一些SQL,方便以后直接拿来使用。大家也可以在评论里补充,然后我再加进来。

自增id的重置

下面的表名填需要重置的表

  1. 使用truncate:

    truncate 表名;
    
    • 说明:使用truncate会删除表的数据释放空间,并且重置字自增id,但不会删除表的定义。
    • 用处:需要清空表的时候才能使用。
  2. 使用修改表的方法:

    alter table 表名 auto_increment = 1
    
    • 说明:此方法和上面的二方法类似。也不会清空数据,有可能会出现重复key的可能,所以此方法也只适用于清空表之后重置自增id或者大量删除后修改自增id。

使外键暂时失效、有效

  1. 暂时失效

    SET FOREIGN_KEY_CHECKS = 0;
    
  2. 外键有效

    SET FOREIGN_KEY_CHECKS = 1;
    

设置步长

  • 注意:全局,整个系统.
    -- 设置步长为5
    SET @@auto_increment_increment = 5;
    

数据库导出为数据字典

  • 在工具里面执行下面的SQL,我使用的是sqlyog,指定要导出的数据库即可, 这里test为数据库,然后再用sqlyog工具导出为Excel表格即可。
    -- 把MySQL数据库导出为数据字典
    USE information_schema;
    SELECT
        -- T.TABLE_SCHEMA AS '数据库名称',
        T.TABLE_NAME AS '表名',
            T.TABLE_COMMENT AS '表说明',
        -- T.TABLE_TYPE AS '表类型',
        -- T. ENGINE AS '数据库引擎',
        C.ORDINAL_POSITION AS '字段编号',
        C.COLUMN_NAME AS '字段名',
        C.COLUMN_TYPE AS '数据类型',
        C.IS_NULLABLE AS '允许为空',
        C.COLUMN_KEY AS '键类型',
        C.EXTRA AS '自增属性',
        -- C.CHARACTER_SET_NAME AS '编码名称',
        C.COLUMN_COMMENT AS '字段说明'
    FROM
        COLUMNS C
    INNER JOIN TABLES T ON C.TABLE_SCHEMA = T.TABLE_SCHEMA
    AND C.TABLE_NAME = T.TABLE_NAME
    WHERE
        T.TABLE_SCHEMA = 'test'  -- 指定要生成数据字典的数据库
    

解决MySQL不区分大小写

  • MySQL默认的字符检索策略:utf8_general_ci,表示不区分大小写;utf8_general_cs表示区分大小写,utf8_bin表示二进制比较,同样也区分大小写。

    • 建库、建表时区分

      创建表时,直接设置表的collate属性为utf8_general_cs或者utf8_bin,像下面这样:

      CREATE TABLE 表名(
          id INT PRIMARY KEY,
          name VARCHAR(32) NOT NULL
      ) ENGINE = INNODB COLLATE = utf8_bin;
      

      如果已经创建表,则直接修改字段的Collation属性为utf8_general_cs或者utf8_bin,像下面这样:

      ALTER TABLE 表名 MODIFY COLUMN 列名 VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
      
    • 查询时区分

      直接修改sql语句,在要查询的字段前面加上binary关键字即可

      在每一个条件前加上binary关键字, 下面的usernamepassword均区分大小写。

      select * from user where binary username = 'admin' and binary password = 'admin';
      

      将参数以binary('')包围

      select * from user where username like binary('admin') and password like binary('admin');
      

      注意:如果你的项目中使用的是hibernate框架的话,使用 from User where binary username = ? and binary password = ?会报错, 使用from User where username like binary(?) and password like binary(?;才不会报错,hibernate使用的是hql,和原生sql有点区别。

posted @ 2018-12-20 17:16  leigq  阅读(59)  评论(0编辑  收藏  举报