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触发器
触发器提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊存储过程。
使用场景:
可通过数据库中的相关表实现级联更改(比如:修改一个表触发另一个表同样修改)
实时监控某张表中的某个字段的更改而需要做出相应的处理
某些业务编号的生成。
滥用会造成数据库及应用程序的维护困难
评论