MySQL

MySQl

  • MySQL数据类型

eg

请写出下面MySQL数据类型表达的意义
int(0) char(16) varchar(16) datetime text

int(0)      整型            宽度0
char(16)    定长字符串      16
vachar(16)  变长字符串      16
datetime    时间日期    
text        大文本
  • 数据类型

整数类型

    TINYINT 
    SMALLINT
    MEDIUMINT
    INT
    BIGINT
    
    属性:UNSIGEND //非负
    
    长度:可以为整数类型指定宽度,例如:INT(11)、对大多数应用是没有意义的,它不会限制值的合法范围,只会影响显示字符的个数。
    
    eg:
    int(3)存入1234  可以存 显示123
    存入12 会默认(zerofill)零填充

实数类型

    FLOAT
    DOUBLE
    DECIMAL
    
    DECIMAL可存储比BIGINT还大的整数;可以用于存储精确的小数FLOAT和DOUBLE类型支持使用标准的浮点进行近似计算
    FLOAT DOUBLE有范围
    FLOAT DOUBLE用于计算时效率比DECIMAL高

字符串类型

    *VARCHAR
    CHAR
    TEXT
    BLOB
    
    *VARCHAR
    VARCHAR类型用于存储可变长字符串,它比定长类型更节省空间
    VARCHAR使用1或者2个额外字节记录字符串的长度,列长度小于255字节,使用1个字节表示,否则用2个
    VARCHAR长度,如果存储内容超出指定长度,会被截断
    
    *CHAR
    CHAR是定长的,根据定义的字符串长度分配足够的空间
    CHAR会根据需要采用空格进行填充以方便比较  CHAR(5) 存3个 会补两个空格
    CHAR适合存储很短的字符串,或者所有值都接近同一个长度
    CHAR长度,超出设定的长度,会被截断
    
    *CHAR与VARCHAR
    对于经常变更的数据,CHAR比VARCHAR更好,CHAR不容易产生碎片
    对于非常短的列,CHAR比VARCHAR在存储空间上更有效率
    只分配真正需要的空间,更长的列会消耗更多的内存
    
    尽量避免使用BLOB/TEXT类型,查询会使用临时表,导致严重的性能开销

枚举

    有时可以使用枚举代替常用的字符串类型
    把不重复的集合存储成一个预定义的集合
    非常紧凑,把列表值压缩到一个或两个字节
    内部存储的是整数
    
    尽量避免使用数字作为ENUM枚举的常量,易混乱
    排序是按照内存存储的整数进行排序
    枚举表会使表大小大大减小
    

日期和时间类型

   尽量使用TIMESTAMP,比DATETIME空间效率高
   用整数保存时间戳的格式通常不方便处理
   如果要存储微秒,可以使用bigint存储 *倍数化为整数
   

列属性

    auto_increment  自增
    default         默认值
    not null        非空
    zerofill        填充空格

MySQL 基础操作

*MySQL连接和关闭

mysql -u指定用户名 -p密码 -h主机 -P端口

其他:

    /G:垂直显示打印结果
    /c:取消当前mysql命令
    /q:退出mysql
    /s:显示mysql状态
    /h:帮助信息
    /d:改变执行符 

MySQL数据表引擎

    InnoDB表引擎
    默认事务型引擎,最重要最广泛的存储引擎,性能非常优秀
    数据存储在共享表空间,可以通过配置分开
    对主键查询的性能高于其他类型的存储引擎
    内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引,插入数据试自动构建插入缓冲区
    
    可以通过一些机制和工具支持正则的热备份
    支持崩溃后的安全恢复
    支持行级锁
    支持外键
     
    MyISAM表引擎
    5.1版本前,MyISAM是默认的存储引擎
    拥有全文索引、压缩、空间函数
    不支持事务和行级锁,不支持崩溃后的安全恢复
    表存储在两个文件,MYD(数据)和MYI(索引)
    设计简单,某些场景下性能很好
    
    其他表引擎
    Archive Blackhole CSV Memory
    
    在表引擎选择时优先InnoDB 

MySQL锁机制

 * 基础概念
    表锁是日常开发中常见的问题,因此也是面试中最常见的问题,当多个查询同一时刻进行数据修改时,就会产生并发控制的问题
    
    共享锁和排他锁 其实就是读锁和写锁
    
    
    读锁
    共享的,不堵塞的,多个用户可以同时读一个资源,互不干扰
    
    写锁
    排他的,一个写锁会阻塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户读取正在写入的资源
    
    

锁粒度

    表锁,系统性能开销最小,会锁定整张表,MyISAM使用表锁
    行锁,最大程度地支持并发 处理,但是也带来了最大的锁开销 InnoDB实现行级锁

MySQL事务处理

    MySQL提供事务处理的表引擎,InnoDB
    服务器层不管理事务,由下层的引擎实现,所以同一个事务中,使用多种存储引擎不靠谱
    在不支持事务的表上执行事务操作MySQL不会发出提醒,也不会报错
    

存储过程

    为以后的使用而保存的一条或多条MySQL语句的集合
    存储过程就是有业务逻辑和流程的集合
    可以在存储过程中创建表,更新数据,删除等
    
    使用场景
    通过把处理封装在容易使用的单元中,简化复杂的操作
    保证数据的一致性
    简化对变动的管理

MySQL触发器

    使用场景
    课通过数据库中的相关表实现级联更改
    实时监控某张表中的某个字段的更改而需要做出相应的处理
    某些业务编号的生成
    滥用会造成数据库及应用程序的维护变的困难

你可能感兴趣的:(MySQL)