请写出下面Mysql数据类型表达的意义(int(0) 0代表的是宽度、char(16)、varchar(16)、datetime、text) 这是mysql数据类型
答:int 0是宽度 他是个整形 char是一个定长的储存字符串的类型 他定长16、varchar可变长的字符串,长度也是16、datetime保存时间日期的、text存储一些大文本数据的
整数类型: TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 配合属性:UNSIGNED 非负
长度:可以为整数类型制定宽度,例如:INT(11)、对大多数int是没有意义的,它不会限制值得合法范围,只会影响显示字符的个数。 也就是说 定义一个int 11 的类型,不代表存的只能代表11位 ,而这个11是显示的宽度,并不会影响他的取值范围。
实数类型
FLOAT、DOUBLE、DECIMAL
DECIMAL可存储比BIGINT还大的整数;可以用于存储精确的小数,对于DECIMAL的话 无论你的小数点是后几位,它都可以给你保存。
FLOAT和DOUBLE类型都是有取值范围的,但是他们都支持使用标准的浮点进行近似计算的对于计算来说 FLOAT和DOUBLE效率会比较高
字符串类型
VARCHAR、CHAR、TEXT、BLOB
VARCHAR类型用于存储可变长字符串,它比定长类型更节省空间
VARCHAR使用1或2额外字节记录字符串的长度,列长度小于255字节的时候,使用1个字节表示,否则使用2个。
VARCHAR长度,如果储存内容超出制定长度,会被阶段, 如果超出的话 会给你截一半 有的版本还会报错
VARCHAR的变长是只会往小缩,而不会去变长。
CHAR是定长的,根据定义的字符串长度分配足够的空间
CHAR会根据需要此阿勇空格进行填充以方便比较 比如我现在定义的是CHAR(5) 但是我添了三个字符串的话,其他两个会用空格补充。
CHAR适合储存很短的字符串,或者所有值都接近同一个长度的值。
CHAR长度、超出设定的长度也会被截断。
对于经常变成的数据,CHAR比VARCHAR更好,CHAR不容易产生碎片
对于非常短的列,CHAR比VARCHAR在村粗空间上更有效率 值分配真正需要的空间,更长的列会消耗更多的内存,不要去写太长 一般情况下我们写5到10位的话 我们写个255的话会消耗很多内存
尽量避免使用BLOB/TEXT类型,查询会使用临时表,导致严重的性能开销。
枚举
有时候可以使用枚举代替常用的字符串类型
把不重复的集合储存成一个预定义的集合
非常紧凑,把列表值压缩到一个或两个字节
内部储存的是整数
尽量避免使用数字作文ENUM枚举的常量,易混乱
排序是按照内部存储的整形进行排序
枚举表会使表大小大大减少,因为他里面存储的是整形
日期和时间类型
尽量使用TIMESTAMP,比DATETIME空间效率高
用煮熟保存时间戳的格式通常不方便处理
如果需要储存微妙,可以使用bigint存储
列属性
Auto_increment、default、not null、zerofill
延伸考点:Mysql基础操作
常见操作: 1.mysql的连接和关闭: mysql -u -p -h -P -u指定用户名 -p指定密码 -h指定主机 -P指定端口 其他: \G \c \q \s \h \d \G代表的使我们把打印的结果可以垂直显示 \c 取消当前的mysql命令 \q 退出mysql \s 显示我们现在服务器的状态 \h 帮助信息 \d该表我们的执行符号 比如改;号之类得
Mysql数据表引擎
InnoDB表引擎 1.默认事务型引擎,最重要最广泛得存储引擎,性能非常优秀
- 数据存储在共享表空间,可以通过配置分开 他们得索引啊什么啊都在一个表里存着
- 对主键查询得性能高于其他类型得存储引擎
- 内部做了很多优化,从磁盘读取数据时自动在内存构建hash(哈希)索引,插入数据时自动构建插入缓冲区
- 通过一些机制和工具支持真正得热备份
- 支持崩溃后得安全恢复
- 支付行级锁
- 支持外键
MyISAM表引擎
- 5.1版本前,MyISAM是默认得存储引擎
- 拥有全文索引,压缩,空间函数
- 不支持事务和行级锁,不支持崩溃得安全恢复,这里可以看出来他并没有InnoDB安全。
- 表存储有三个文件,索引文件,数据文件,表结构文件 所以跨平台很难直接被压缩
- 设计简单,某些场景下性能很好 获取整个表里得数据大小得话 效率很搞
其他表引擎: Archive、CSV、Memory、Blackhole、BDB
优先选择InnoDB 因为他的性能还是十分优秀的
Mysql的锁机制
共享锁和排他锁,其实就是读锁和写锁
读锁的话是共享的,不堵塞,多个用户可以同时读一个资源,互不干扰
写锁的话是排他的,一个写锁会阻塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户读取正在写入的资源。
锁力度, 表锁,系统性能开销最小,会锁定整张表,MyISAM使用表级锁
行锁,最大程度地支持并发处理,但是也带来了最大的锁开销,InnoDB实现行级锁
事务处理
Mysql提供事物处理的表引擎,InnoDB服务器层不管理事务,由下层的引擎实现,所以同一个事务中,使用多种储存引擎不靠谱
在非实物的表上执行事物操作Mysql不会发出提醒,也不会报错
在做事务的时候,我们一定要先检查自己的表 是不是InnoDB
储存过程
为以后的使用而保存一条或多条Mysql语句的集合 储存过程就是有业务逻辑和流程的集合,可以在储存过程中创建表,更新数据,删除等等。
储存过程的使用场景
通过把数据封装在容易使用的单元中,简化复杂的操作。
保证数据的一致性
简化对变动的管理
Mysql触发器
提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表时间相关的特殊的存储过程。
Mysql触发器的使用场景
可通过数据库中的相关表实现级联更改
实时监控某张表的某个字段的更改而需要作出相应的处理
某些业务编号的生成等
滥用会造成数据库及应用程序的维护困难
真题
说明表储存引擎InnoDB和MyIsam的区别