mysql技巧_MySQL技巧

一、存储引擎

3d3ab9b6944d

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

常用存储引擎

InnoDB:

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

2. 自增长AUTO_INCREMENT

3. 外键(FOREIGN KEY)

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

MyISAM:

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

Memory:

1. 数据全部放在内存中

2. 哈希索引

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

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

二、数据类型

3d3ab9b6944d

数值类型

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值