mysql基础知识

整型类型

整数字段有tinyint,smallint,mediumint,int,bigint

属性有:unsigned(不能为负)

INT(11)长度是11位,

INT(3)中如果指定zerofill(0填充)

输入 1234也是可以存进数据库中的,输入12存入数据库时数据个数不足用0填充,即012

实数类型

常见实数有float,double,decimal

float和double小数点之后是有范围的,
而decimal无论小数点后面有多少位都可以保存下来。

字符串类型

常见字符串类型有varchar,char,text,blob
varchar存储可变长度字符串(优点节省空间),使用1/2个额外字节记录字符长度,小于255字节使用1个字节。超出指定长度会截取舍去(有的版本会报错);
char存固定长度,使用空格进行填充。超出指定长度也会被截断。(优点:1对于经常变更的数据比varchar不容易产生碎片。2对非常短的列比varchar储存空间更有效率);
避免使用text,blob,因为查询使用临时表导致性能开销;

时间和日期类型

尽量使用timestamp,比datetime空间效率高用整数保存时间戳格式通常不方便处理。
储存微秒可以使用bigint(整形)存储

mysql基础操作

连接和关闭:mysql -u(指定用户名) -p(密码) -h(主机) -P(端口)
G(打印结果垂直显示),c(取消当前操作),q(退出mysql),s(显示mysql状态),
h(帮助信息),d(特殊符号转换符)

mysql数据表引擎

InnoDB
特点:事务性引擎,最重要最广泛的存储引擎,性能非常优秀。
数据储存在共享表空间中(默认叫ibdata1),可以通过配置分开
对主键查询的性能高于其他类型的储存引擎
内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引,
插入数据时自动构建插入缓冲区

支持:
通过一些机制和工具支持热备份
支持奔溃后的安全恢复
支持行级锁
支持外键

MyISAM
在5.1版本前,是默认存储引擎
拥有全文索引,压缩,空间函数
不支持事务和行级锁(支持表锁),不支持崩溃后的安全恢复
表存储在两个文件,MYD和MYI
设计简单,某些场景下性能很好(比如查询)

其他表引擎
Archive,Blackhole,CSV,Memory

mysql锁机制

表锁是日常开发当中常见的问题,当多个查询同一时刻进行数据修改时,就会产生并发控制的问题。
分为共享锁(读锁)和排他锁(写锁)

读锁
共享的,不堵塞,多个用户可以同时读一个资源,互不干扰

写锁
排他的,一个写锁会堵塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户读取正在写入的资源。

锁粒度

表锁,系统性能开销最小,会锁定整张表,MyISAM使用表锁

行锁,最大程度地支持并发处理,但是也来了最大的锁开销,InnoDB实现行级锁

mysql事务处理

mysql提供事务处理的表引擎,InnoDB

服务层不管理事务,由下层的引擎实现,所以在同一个事务中使用多种存储引擎不靠谱

在非事务的表上执行事务操作不会发出提醒不会报错。

mysql存储过程

为以后的使用而保存的一条或多条mysql语句的集合

存储过程就是有业务逻辑和流程的集合

可以在储存过程中创建表,更新数据,删除等等

使用场景:

通过把处理封装在容易使用的单元中,简化复杂的操作。

保证数据的一致性

简化对变动的管理

mysql触发器

触发器提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊存储过程。

使用场景:

可通过数据库中的相关表实现级联更改(比如:修改一个表触发另一个表同样修改)

实时监控某张表中的某个字段的更改而需要做出相应的处理

某些业务编号的生成。

滥用会造成数据库及应用程序的维护困难

最后编辑:2020年06月21日 ©著作权归作者所有

发表评论

正在加载 Emoji