前言

DDL:数据库定义语句,对数据库中的数据对象进行定义。
DDML:数据操作语句,实现对数据的基本操作,增删改查等等。

数据库的基本使用(库管理语句)

    1. 查看所有的库
      show databases;
    1. 创建一个库
      create database if not exists 库名;
      create database if not exists 库名 default character set utf16;

      if not exists:为可选项,避免数据库已经存在,从而导致了sql脚本的终止
      character set:设定库的字符集

    1. 查看建库语句
      show create database 库名;
    1. 修改库的字符集
      //修改设置默认字符集,数据库中的表都会继承此字符集
      //可以使用查看建库语句 查看库字符集。
      alter database 库名 default character set utf8;
    1. 选中使用库
      use 库名;
    1. 删除库
      drop database if exists 库名;

数据库引擎

一个库中的多个表都可以使用不同的存储引擎,以满足各种性能和实际需求。

    1. 存储引擎简介
      • mysql中最常见的存储引擎是inodb和myisam。
      • InnoDB:Mysql默认的存储引擎,支持表级锁,行级锁,提供提交、回滚和恢复的事务安全(ACID 兼容)能力,并要求实现并发控制,但是不支持全文索引,表空间文件相对较大。
      • MyIsam:支持表级锁,不支持行级锁,不支持事务,但支持全文索引,表空间相对较小,主要用来插入和查询记录的表有较高的处理效率。
      • CSV:将csv文件(字段以逗号隔开)文件作为mysql表文件
      • mrg_myisam:也成为mege存储引擎
      • blackhole:类似/dev/null,不真正存储数据
      • memory:内存存储引擎,速度快,不能断电,支持hash索引,表级锁,常用于临时表
      • performance_schema:其中的表类型都是performance_schema类型数据,用于存储与数据库性能相关的信息,用户无法创建这类数据库,但是DBA可以根据此进行性能的分析,performance_schema库会在服务启动后不断收集数据。
      • archive:用于存储归档信息,安全审计,历史信息,支持行级锁,和select和insert操作
    1. 查看数据库中的所有引擎
      show engines;

      存储引擎

    1. 修改表的存储引擎
      alter table 表名 engine=myisam;
    1. 修改mysql的默认存储引擎
      1.暂停mysql服务后,打开my.cnf文件
      2.加入 defalut-storage-engine=innodb
      3.开启innodb_file_per_table=on 表示每个表都使用单独的表空间
    1. 存储的类型文件
      • 进入/var/lib/myqsl/库 目录中
      • xxx.frm结尾文件中存储了表的结构信息
      • xxx.idb存放了表的数据信息和索引信息,如果没有开启innodb_file_per_table,默认会共用ibdata1。

存储文件结构

数据库中的基本类型

Mysql中存在四大种基本类型

整数类型,时间\日期类型,字符串类型,二进制类型。

  • 整数类型
    tinyint,smallint,mediuint,int,bigint,浮点类型float和double,定点类型decimal
类型 需求 类型 需求
tinyint 一个字节 float 四个字节
smallint 两个字节 double 八个字节
mediuint 三个字节 decimal(M,D) M+2 个字节
int 四个字节
bigint 八个字节

其中定点类型 M称为精度,表示总共的位数;D称为标度,表示小数的位数。定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据),使用 DECIMAL 的类型比较好

  • 时间,日期类型
    year,time,date,datetime,timestamp
类型名称 日期格式 日期范围 存储需求
YEAR YYYY 1901 ~ 2155 1 个字节
TIME HH:MM:SS -838:59:59 ~ 838:59:59 3 个字节
DATE YYYY-MM-DD 1000-01-01 ~ 9999-12-3 3 个字节
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8 个字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC 4 个字节
  • 字符串类型
    char,varchar,binary,varbinary,blob,text,enum,set
类型名称 说明 存储需求
CHAR(M) 固定长度非二进制字符串 M 字节,1<=M<=255
VARCHAR(M) 变长非二进制字符串 L+1字节,在此,L< = M和 1<=M<=255
TINYTEXT 非常小的非二进制字符串 L+1字节,在此,L<2^8
TEXT 小的非二进制字符串 L+2字节,在此,L<2^16
MEDIUMTEXT 中等大小的非二进制字符串 L+3字节,在此,L<2^24
LONGTEXT 大的非二进制字符串 L+4字节,在此,L<2^32
ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举值的数目 (最大值为65535)
SET 一个设置,字符串对象可以有零个或 多个SET成员 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)

例如char(4)varchar(4)。char是不可变的,只能插入4个字符,如果有效字符只有两位,则剩余两位插入空字符;而varchar是可变的。text保存二进制数据,文章内容、评论等。

  • 二进制类型
    bit,binary,varbinary,tinyblob,blob,mediublob,longblob
类型名称 说明 存储需求
BIT( M ) 位字段类型 大约 ( M+7)/8 字节
BINARY( M ) 固定长度二进制字符串 M 字节
VARBINARY ( M ) 可变长度二进制字符串 M+1 字节
TINYBLOB ( M ) 非常小的BLOB L+1 字节,在此,L<2^8
BLOB ( M ) 小 BLOB L+2 字节,在此,L<2^16
MEDIUMBLOB ( M ) 中等大小的BLOB L+3 字节,在此,L<2^24
LONGBLOB ( M ) 非常大的BLOB L+4 字节,在此,L<2^32