MySQL数据库数据结构

MySQL数据库数据结构

mysql-datatype_20181008231813774111.jpg

创建数据表(相对)完整语句格式:
CREATE TABLE 表名 (
       列名     数据类型[(长度)]    [完整性约束条件],
       列名     数据类型[(长度)]    [完整性约束条件],
       ......
)

注意事项:

列名、数据类型是必有的;
长度:有的设置,有的不需要
完整性约束条件根据实际情况设置,不是必须的

整型


整型数据类型包括:

数据类型释义
tinyint微整型
smallint小整型
mediumint中整型
int整型
bigint大整型

这些不同大小范围的整型信息如下图所示:

detail-datatype

默认整数类型是带符号的,即可以有正负值,比如:

create  table  表名(num1  int, num2  tinyint);

此时,num1和num2中都可以存储负数(但都不能超出范围)

不带符号的整数类型设置形式如下:

create  table  表名(num1  int  unsigned, num2  tinyint  unsigned);

定点小数点型


定点小数是"精确的小数”——它通过内部技巧,突破了"有些小数无法用二进制精确表示”的局限。

语法: decimal(M, D);

其中M表示该小数的总的有效位数(最大65),

D表示该小数的小数点右侧的位数(最大30)。

示例:

create  table  表名(num1  decimal(10,2));

可以存储最大99999999.99的信息

字符串型


字符串类型常用的包括:char, varchar, text分述如下:

  • char和varchar

    • 定长字符类型char:
      适用于存储的字符长度为固定长度的字符,比如中国邮政编码,中国身份证号码,手机号码等。

设定形式:

    create  table  表名(title  char(10));
    //无论 字母、数字、汉字 最多只能存储10个
    //极限:char(255);

其特点是:

  1. 适合存储的长度固定的内容,最多可设定存储长度为255个字符(无论 字母、数字、汉字)的内容。
  2. 如果实际写入的字符不足设定长度,空间也不节省,根据预设长度都分配好了。
  3. 相对varchar类型,其存取速度更快。
    字符:就是一个自然的信息(例如 字母、数字、汉字 都是一个字符)

字节:是一个单位大小

不同字符集占据的字节单位大小是不同的

  • utf-8(utf8)字符集:
    每个 字母、数字 都占据一个字节

每个 汉字 占据 3个字节

  • gbk字符集:
    每个 字母、数字 都占据一个字节

每个 汉字 占据 2个字节

  • 变长字符类型varchar:
    适用于存储字符长度经常不确定的字符,比如姓名,用户名,标题,内容,等大多数场合的字符。

设定形式:

create  table  表名(title  varchar(10));
无论 字母、数字、汉字 最多只能存储10个
极限(utf8字符集):varchar(333)

其特点是:

  1. 根据内容实际大小分配占据空间,但不超过设定空间大小,理论可分配空间大小为1000个字节(实际情况要小些)。
    注:不同的字符集所占据的存储空间是不同的

英文:一个字符占一个字节
中文(gbk编码):一个字符占2个字节
中文(utf8编码):一个字符占3个字节
所以,同样是存汉字,gbk字符集编码最多可以存储1000/2个,而utf8字符集编码最多可以存储1000/3=333个

  1. 如果实际写入的字符不足设定的长度,就按实际的长度存储,空间也按照实际内容长度分配。
  2. 相对于char字符串,其存取速度相对较慢,优点是节省存储空间。
  • text长文本类型
    适用于存储"较长的文本内容”,比如文章内容。

text存储极限大小是:65535个字节

utf8字符集情况下:

字母、数字:最多可存储65535个。

汉字:最多可存储 21845 个

如果还需要存储更长的文本,可以使用mediumtext(1600万左右)或longtext(40亿左右)字节。
设定形式:

create  table  表名(title  text);

细节说明:

  1. text类型不能设定存储的字节长度(个数)
  2. text类型的字段不能设置默认值。
  3. 当存储的内容超过65535个字节限制时,会做截断操作
  4. 变长类型
TINYTEXT256 bytes
TEXT65,535 bytes(字节)~64kb
MEDIUMTEXT16,777,215 bytes~16MB
LONGTEXT4,294,967,295 bytes~4GB

时间型


日期时间类型包括如下几种:
date类型:
表示日期,格式类似这样:'0000-00-00'

datetime类型:
表示日期时间,格式类似这样:'0000-00-00 00:00:00'

enum和set类型


enum类型和set类型都是用于存储"有给定值选项”情形
比如表单中的单选,多选,下拉列表等。

  • enum类型(单选类型/枚举类型):
    enum类型通常用于存储表单中的"单选项”的值。

设定形式:

enum('选项值1', '选项值2', '选项值3', ....)

这些选项值都对应了相应的"索引值”,类似索引数组的下标,但是从1开始的。

即这些选'项的索引值分别为:1, 2, 3, 4, .....

enum类型最多可设定65535个选项。

示例:

create  table  表名(edu enum('大学', '中学', '小学', '其他' )  );
insert  into  表名 values ('大学');
或:
insert  into  表名 values ( 2);        //表示中学
  • set集合类型(多选类型):
    set类型通常用于存储表单中的"多选项”的值。

设定形式:

set('选项值1', '选项值2', '选项值3', ....)

这些选项值都对应了相应的"索引值”,其索引值从1开始,并"依次翻倍”。

即这些选项的索引值分别为:1, 2, 4, 8, 16, ..... (其实就是2的n次方)

set类型最多可设定64个选项值。

示例:

create  table  表名(aihao set('篮球', '排球', '足球', '中国足球' )  ); #对应索引值为1,2,4,8
insert  into  表名 values ( '篮球' );
或:
insert  into  表名  values ( '篮球,排球' );
或:
insert  into  表名  values ( '篮球,足球,排球' );
或:
insert  into  表名  values ( 2 );    //表示排球(2)
或:
insert  into  表名  values ( 3);        //表示"篮球,排球”(1+2)
或:
insert  into  表名  values ( 7);        //表示"篮球,排球,足球”(1+2+4)

完整性约束条件


完整性约束条件,就是进一步限制字段中保存的数据

  1. unsigned: 无符号,只用在整型字段上。
  2. unsigned 无符号型整数 0~255

int unsigned 0~42亿

  1. auto_increment: 自增长,只用在整型字段上。
  2. primary key: 主键。
    主键: 用来标志唯一一行数据的。

特点: 唯一 、 非空 、经常和auto_increment结合使用。 主键和自增长配合就能确定唯一的一条数据了。 主键一般都会选择整型字段。

  1. unique: 唯一。 该列中不能出现重复值

根据上述各个类型创建student数据表:

create table student(
    id smallint unsigned auto_increment primary key comment '序号id',
    name varchar(30) unique comment '名称',
    tel  char(11) comment '手机',
    gender  enum('男','女','保密') comment '性别' ,
    hobby  set('篮球','排球','棒球','足球','台球')  comment '爱好',
    salary  decimal(7,2) comment '就业薪水,最多是99999.99',
    introduce text ,
    addtime datetime  comment '记录形成时间'
)

本文链接:

http://godrry.com/archives/mysql-database-data-structure.html
1 + 4 =
沙发还热乎呢~