美文网首页
MySQL技巧

MySQL技巧

作者: 小帅明3号 | 来源:发表于2020-08-15 18:16 被阅读0次

    一、存储引擎

    存储引擎是MySQL数据库的核心、心脏、发动机,它决定了数据如何存储,查询的时候如何搜索数据,索引如何创建等等;是对于数据库文件的一种存取机制,如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。

    常用存储引擎

    InnoDB:

        1. 事务处理、回滚、崩溃修复能力和多版本并发控制

        2. 自增长AUTO_INCREMENT

        3. 外键(FOREIGN KEY)

    InnoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。

    MyISAM:

    MyISAM的优势在于占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。

    Memory:

        1. 数据全部放在内存中

        2. 哈希索引

    注意,MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。

        MySQL 5.1版本之前默认的存储引擎是MyISAM,之后默认是InnoDB

    二、数据类型

    数值类型

    TINYINT - 一个非常小的整数,可以带符号。如果是有符号,它允许的范围是从-128到127。如果是无符号,允许的范围是从0到255。

    INT - 正常大小的整数,可以带符号。如果是有符号的,它允许的范围是从-2147483648到2147483647。如果是无符号,允许的范围是从0到4294967295。

    BIGINT - 一个大的整数,可以带符号。如果有符号,允许范围为-9223372036854775808到9223372036854775807。如果无符号,允许的范围是从0到18446744073709551615。

    FLOAT(M,D) - 不能使用无符号的浮点数字。可以定义显示长度(M)和小数位数(D)。这不是必需的,并且默认为10,2。其中2是小数的位数,10是数字(包括小数)的总数。float(5,2) 999.919

    DOUBLE(M,D) - 不能使用无符号的双精度浮点数。可以定义显示长度(M)和小数位数(D)。 这不是必需的,默认为16,4,其中4是小数的位数。

    字符串类型

    短文本:char varchar

    CHAR(M) - 固定长度的字符串是以长度为1到255之间个字符长度(例如:CHAR(5)),存储右空格填充到指定的长度。 限定长度不是必需的,它会默认为1。 char(5) abcde ab 内存空间会浪费,性别:男/女 char(1),查询匹配规则是所有字节一起匹配,查询性能相对比varchar高

    VARCHAR(M) - 可变长度的字符串是以长度为1到255之间字符数(高版本的MySQL超过255); 例如:VARCHAR(25). 创建VARCHAR类型字段时,必须定义长度。 5 10 12 节省内存空间 abcde,查询匹配规则是每个字节依次匹配

    BLOB 或 TEXT - 字段的最大长度是65535个字符。 BLOB是“二进制大对象”,并用来存储大的二进制数据,如图像或其他类型的文件。定义为TEXT文本字段还持有大量的数据; 两者之间的区别是,排序和比较上存储的数据,BLOB大小写敏感,而TEXT字段不区分大小写。不用指定BLOB或TEXT的长度。

    日期和时间类型

    DATE - 以YYYY-MM-DD格式的日期,在1000-01-01和9999-12-31之间。 例如,1973年12月30日将被存储为1973-12-30。

    DATETIME - 日期和时间组合以YYYY-MM-DD HH:MM:SS格式,在1000-01-01 00:00:00 到9999-12-3123:59:59之间。例如,1973年12月30日下午3:30,会被存储为1973-12-30 15:30:00。

    TIMESTAMP - 1970年1月1日午夜之间的时间戳,到2037的某个时候。这看起来像前面的DATETIME格式,无需只是数字之间的连字符; 1973年12月30日下午3点30分将被存储为19731230153000(YYYYMMDDHHMMSS)。

    TIME - 存储时间在HH:MM:SS格式。

    YEAR(M) - 以2位或4位数字格式来存储年份。如果长度指定为2(例如YEAR(2)),年份就可以为1970至2069(70〜69)。如果长度指定为4,年份范围是1901-2155,默认长度为4

    三、SQL

        1.快速创建表结构相同的表(不含任何数据):create table t2 like t1

        2.查看创建数据库对象的语句:show create  database/database/... 对象名称

        3.列举数据库当前对象清单: show databases/tables/...

        4.删除对象,判断是否存在防止抛异常:drop table/database... if exists t1

        5.'曾改换删'表字段结构:alter table 表名 add/modify/change/drop 列名 (change要加新列名) 列类型(drop不用类型)

        6.delete不会影响主键自增长(auto_increment)的当前值,truncate会直接将表自增长的值重置为1,无论是否设置初始值还是增长到哪里了。

        7.窗口函数:

        sum(...A...) over(partition by ...B... order by ...C... rows between ...D1... and ...D2...)

            A: 需要被加工的字段名称

            B: 分组的字段名称

            C: 排序的字段名称

            D: 计算的行数范围

            rows between unbounded preceding and current row  # 包括本行和之前所有的行

            rows between current row and unbounded following # 包括本行和之后所有的行

            rows between 3 preceding and current row  # 包括本行和前面三行

            rows between 3 preceding and 1 following  # 从前面三行和下面一行,总共五行

            # 当order by后面缺少窗口从句条件,窗口规范默认是rows between unbounded

            preceding and current row.

            # 当order by和窗口从句都缺失, 窗口规范默认是 rows between unbounded        preceding

            and unbounded following

            切片开窗分组函数:ntile(n)over(partition by order by )

            行偏移函数-向上1行:lag(c1,1,c1)over(partition by order by)

            行偏移函数-向下1行:laad(c1,1,c1)over(partition by order by)

    相关文章

      网友评论

          本文标题:MySQL技巧

          本文链接:https://www.haomeiwen.com/subject/lomadktx.html