1、 创建数据

2、 插入合理数据

3、 插入缺点数据(超出对应的数据范围)

php数字保留两位小数5天玩转MySQL整数小数类型时光日期类型字符串型 PHP

4、 缺点缘故原由:并不是说tinyint没有这么大的空间,而是由于mysql默认的为整形增加负数。

实际表示的区间为-128,127

实际运用中,该当根据对应的数据的范围来选定对应的整形类型:常日利用的比较多的TINYINT和int。

无符号标识设定

无符号:表示存储的数据在当前字段中,没有负数(只有正数,区间为0-255)

基本语法:在类型之后加上一个 unsigned

显示长度

显示长度:指数据(整型)在数据显示的时候,到底可以显示多长位。

Tinyint(3): 表示最长可以显示3位,unsigned解释只能是正数,0-255永久不会超过三个长度

Tinyint(4):表示最长可以显示4位,-128~127

显示长度只是代表了数据是否可以达到指定的长度,但是不会自动知足到指定长度:如果想要数据显示的时候,保持最高位(显示长度),那么还须要给字段增加一个zerofill属性才可以。

Zerofill:从左侧开始添补0(左侧不会改变数值大小),以是负数的时候就不能利用zerofill,一旦利用zerofill就相称于确定该字段为unsigned

数据显示的时候,zerofill会在左侧添补0到指定位:如果不敷3位,那么添补到3位,如果本身已经够了或者超出,那么就不在添补。

显示长度可以自己设定:超出长度(但是不超出范围)不会影响,只会对不足长度的进行补充(显示长度)

小数类型

专门用来存储小数的

在Mysql中将小数类型又分为两类:浮点型和定点型

浮点型

浮点型又称之为精度类型:是一种有可能丢失精度的数据类型,数据有可能不那么准确(由其是在超出范围的时候)

浮点型之以是能够存储较大的数值(禁绝确),缘故原由便是利用存储数据的位来存储指数

整型:所有位都为1

1

1

1

1

1

1

1

1

打算结果:

浮点型:有部分用于存储数据,有部分用于存指数

1

1

1

1

1

1

1

1

前三位转换成十进制之后用作10的指数: 10^7 数据值

Float

Float又称之为单精度类型:系统供应4个字节用来存储数据,但是能表示的数据范围比整型大的多,大概是10^38;只能担保大概7个旁边的精度(如果数据在7位数以内,那么基本是准确的,但是如果超过7位数,那么便是不准确的)

基本语法

Float:表示不指定小数位的浮点数

Float(M,D):表示一共存储M个有效数字,个中小数部分占D位

Float(10,2):整数部分为8位,小数部分为2位

1、 创建一个数据表保存浮点数据

2、 存入数据:合法数据

把稳:如果数据精度丢失,那么浮点型是按照四舍五入的办法进行打算

3、 插入数据,超出大小

4、 数据长度刚好知足条件,但是会超出精度

解释:用户不能插入数据直接超过指定的整数部分长度,但是如果是系统自动进位导致,系统可以承担。

5、浮点数可以采取科学计数法来存储数据

浮点数的运用:常日是用来保存一些数量特殊大,大到可以不用那么精确的数据。

Double

Double又称之为双精度:系统用8个字节来存储数据,表示的范围更大,10^308次方,但是精度也只有15位旁边。

定点数

定点数:能够担保数据精确的小数(小数部分可能禁绝确,超出长度会四舍五入),整数部分一定精确

Decimal

Decimal定点数:系统自动根据存储的数据来分配存储空间,每大概9个数就会分配四个字节来进行存储,同时小数和整数部分是分开的。

Decimal(M,D):M表示总长度,最大值不能超过65,D代表小数部分长度,最长不能超过30。

1、 创建表:与浮点数比拟

2、 插入正常数据

3、 插入最大数据

4、 考试测验定点数进行四舍五入

定点数的运用:如果涉及到钱的时候有可能利用定点数

韶光日期类型Date

日期类型:系统利用三个字节来存储数据,对应的格式为:YYYY-mm-dd,能表示的范围是从1000-01-01 到9999-12-12,初始值为0000-00-00

Time

韶光类型:能够表示某个指定的韶光,但是系统同样是供应3个字节来存储,对应的格式为:HH:ii:ss,但是mysql中的time类型能够表示韶光范围要大的多,能表示从-838:59:59~838:59:59,在mysql中详细的用途是用来描述韶光段。

Datetime

日期韶光类型:便是将前面的date和time合并起来,表示的韶光,利用8个字节存储数据,格式为YYYY-mm-dd HH:ii:ss,能表示的区间1000-01-01 00:00:00 到9999-12-12 23:59:59,其可以为0值:0000-00-00 00:00:00

Timestamp

韶光戳类型:mysql中的韶光戳只是表示从格林威治韶光开始,但是其格式依然是:YYYY-mm-dd HH:ii:ss

Year

年类型:占用一个字节来保存,能表示1900~2155年,但是year有两种数据插入办法:0~99和四位数的详细年

1、 创建对应的韶光日期类型的数据表

2、 插入数据:正常数据

3、 year的分外性:可以采取两位数的数据插入,也可以采取四位数的年份插入

4、 year进行两位数插入的时候,有一个区间划分,零界点为69和70:当输入69以下,那么系统韶光为20+数字,如果是70以上,那配系统韶光为19+数字

5、 timestamp当对应的数据被修正的时候,会自动更新(这个被修正的数据不是自己)

6、 time类型分外性:实质是用来表示韶光区间(当前韶光之后的多少个小时),能表示的范围比较大

7、 在进行韶光类型录入的时候(time)还可以利用一个大略的日期代替韶光,在韶光格式之前加一个空格,然后指定一个数字(可以是负数):系统会自动将该数字转换整天数 24小时,再加上后面的韶光。

PHP中有着非常强大的韶光日期转换函数:date将韶光戳转换成想要的格式,strtotime又可以将很多格式转换成对应的韶光戳。
PHP常日不须要数据库来帮助处理这么繁芜的韶光日期,以是常日合营PHP的时候,韶光的保存常日利用韶光戳(真正),从而用整型来保存。
字符串型

Mysql记录长度

在mysql中,有一项规定:mysql的记录长度(record == 行row)总长度不能超过65535个字节。

Varchar能够存储的理论值为65535个字符:字符在不同的字符集下可能占用多个字节。

1、 创建表:证明varchar在mysql中能够达到的理论值(utf8和GBK)

Varchar除了存储的数据本身要占用空间:还须要额外的空间来保存记录长度

2、 打算在utf8和GBK下对应的varchar能够存储的长度

Utf8 最多只能存储21844个字符

GBK最多只能存储32766个字符

字符串型Char

定长字符:指定长度之后,系统一定会分配指定的空间用于存储数据

基本语法:char(L),L代表字符数(中文与英笔墨母一样),L长度为0到255

Varchar

变长字符:指定长度之后,系统会根据实际存储的数据来打算长度,分配得当的长度(数据没有超出长度)

基本语法:Varchar(L),L代表字符数,L的长度理论值位0到65535

由于varchar要记录数据长度(系统根据数据长度自动分配空间),以是每个varchar数据产生后,系统都会在数据后面增加1-2个字节的额外开销:是用来保存数据所占用的空间长度

如果数据本身小于127个字符:额外开销一个字节;如果大于127个,就开销两个字节

Char和varchar数据存储比拟(utf8,一个字符都会占用3个字节)

存储数据

Char(2)

Varchar(2)

Char所占字节

Varchar所占字节

A

A

A

2 3 = 6

1 3 + 1 = 4

AB

AB

AB

2 3 = 6

2 3 + 1 = 7

Char和varchar的差异

1、 char一定会利用指定的空间,varchar是根据数据来定空间

2、 char的数据查询效率比varchar高:varchar是须要通过后面的记录数来打算

如果确定数据一定是占指定长度,那么利用char类型;

如果不愿定数据到底有多少,那么利用varchar类型;

如果数据长度超过255个字符,不论是否固定长度,都会利用text,不再利用char和varchar

Text

文本类型:实质上mysql供应了两种文本类型

Text:存储普通的字符文本

Blob:存储二进制文本(图片,文件),一样平常都不会利用blob来存储文件本身,常日是利用一个链接来指向对应的文件本身。

Text:系统中供应的四种text

Tinytext:系统利用一个字节来保存,实际能够存储的数据为:2 ^ 8 + 1

Text:利用两个字节保存,实际存储为:2 ^ 16 + 2

Mediumtext:利用三个字节保存,实际存储为:2 ^ 24 + 3

Longtext:利用四个字节保存,实际存储为:2 ^ 32 + 4

把稳:

1、 在选择对应的存储文本的时候,不用刻意去选择text类型,系统会自动根据存储的数据长度来选择得当的文本类型。

2、 在选择字符存储的时候,如果数据超过255个字符,那么一定选择text存储

Enum

列举类型:在数据插入之前,先设定几个项,这几个项便是可能终极涌现的数据结果。

如果确定某个字段的数据只有那么几个值:如性别,男、女、保密,系统就可以在设定字段的时候规定当前字段只能存放固定的几个值:利用列举

基本语法:enum(数据值1,数据值2…)

系统供应了1到2个字节来存储列举数据:通过打算enum列举的详细值来选择实际的存储空间:如果数据值列表在255个以内,那么一个字节就够,如果超过255但是小于65535,那么系统采取两个字节保存。

1、 创建表

2、 插入数据:合法数据,字段对应的值必须是设定表的时候所确定的值

3、 缺点数据:enum有规范数据的功能,能够担保插入的数据必须是设定的范围,其他类型都不可以

4、 列举enum的存储事理:实际上字段上所存储的值并不是真正的字符串,而是字符串对应的下标:当系统设定列举类型的时候,会给列举中每个元素定义一个下标,这个下标规则从1开始

Enum(1=>‘男’,2=>’女’,3=>’保密’)

特性:在mysql中系统是自动进行类型转换的:如果数据碰到“+、-、、/”系统就会自动将数据转换成数值:而普通字符串转换成数值为0

Select 字段名 + 0 from 表名;

5、 既然实际enum字段存储的结果是数值:那么在进行数据插入的时候,就可以利用对应的数值来进行。

列举的意义:

1、 规范数据本身,限定只能插入规定的数据项

2、 节省存储空间

Set

凑集:是一种将多个数据选项可以同时保存的数据类型,实质是将指定的项按照对应的二进制位来进行掌握:1表示该选项当选中,0表示该选项没有当选中。

基本语法:set(‘值1’,’值2’,’值3’…)

系统为set供应了多个字节进行保存,但是系统会自动打算来选择详细的存储单元

1个字节:set只能有8个选项

2个字节:set只能有16个选项

3个字节:set只能表示24个选项

8个字节:set可以表示64个选项

Set和enum一样,终极存储到数据字段中的依然是数字而不是真实的字符串

1、 创建表

2、 插入数据:可以插入多个数据,便是在数据插入的字符串中,利用对应的逗号“,”将选项进行隔开

3、 数据选项所在的数据与数据插入的顺序无关:终极都会变成选项对应的顺序

4、 剖析数据存储的办法

4.1 系统将对应的数据选项(设计)按照顺序进行编排:从第一个开始进行占位,每一个都对应一个二进制位。

4.2 数据在存储的时候,如果当选中,那么对应的位的值就为1,否则为0

4.3 系统在进行存储的时候会自动将得到的终极的二进制颠倒过来,然后再进行转换成十进制存储

5、 查看数据:按照自动转换成数值来查看

6、 既然是数值,那么就可以插入数值来代替实际插入数据

把稳:数字插入的条件是对应的二进制位上都有对应的数据项

Set凑集的意义:

1、 规范数据

2、 节省存储空间

Enum:单选框

Set:复选框

列属性

列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长

Null属性

NULL属性:代表字段为空

如果对应的值为YES表示该字段可以为NULL

把稳:

1、 在设计表的时候,只管即便不要让数据为空

2、 Mysql的记录长度为65535个字节,如果一个表中有字段许可为NULL,那么系统就会设计保留一个字节来存储NULL,终极有效存储长度为65534个字节。

默认值

Default:默认值,当字段被设计的时候,如果许可默认条件下,用户不进行数据的插入,那么就可以利用事先准备好的数据来添补:常日添补的是NULL

测试:不给当前字段供应数据值

Default关键字的其余一层利用:显示的奉告字段利用默认值:在进行数据插入的时候,对字段值直策应用default

列描述

列描述:comment,是专门用于给开拓职员进行掩护的一个注释解释

基本语法:comment ‘字段描述’;

查看Comment:必须通过查看表创建语句

主键

顾名思义:紧张的键,primary key,在一张表中,有且只有一个字段,里面的值具有唯一性

创建主键随表创建

系统供应了两种增加主键的办法

1、 方案1:直接在须要当做主键的字段之后,增加primary key属性来确定主键

2、 方案2:在所有字段之后增加primary key选项:primary key(字段信息)

表后增加

基本语法:alter table 表名 add primary key(字段);

查看主键

方案1:查看表构造

方案2:查看表的创建语句

删除主键

基本语法:alter table 表名 drop primary key;

复合主键

案例:有一张学生选修课表:一个学生可以选修多个选修课,一个选修课也可以由多个学生来选:但是一个学生在一个选修课中只有一个成绩。

主键约束

主键一旦增加,那么对对应的字段有数据哀求

1、 当前字段对应的数据不能为空;

2、 当前字段对应的数据不能有任何重复

主键分类

主键分类采取的是主键所对应的字段的业务意义分类

业务主键:主键所在的字段,具有业务意义(学生ID,课程ID)

逻辑主键:自然增长的整型(运用广泛)

自动增长

自动增长:auto_increment,当给定某个字段该属性之后,该列的数据在没有供应确定数据的时候,系统会根据之前已经存在的数据进行自动增加后,填充数据。

常日自动增长用于逻辑主键。

事理

自动增长的事理:

1、 在系统中有掩护一组数据,用来保存当前利用了自动增长属性的字段,记住当前对应的数据值,再给定一个指定的步长

2、 当用户进行数据插入的时候,如果没有给定值,系统在原始值上再加上步长变成新的数据

3、 自动增长的触发:给定属性的字段没有供应值

4、 自动增长只适用于数值

利用自动增长

基本语法:在字段之后增加一个属性auto_increment

插入数据:触发自动增长,不能给定详细值

修正自动增长

1、 查看自增长:自增长一旦触发利用之后,会自动的在表选项中增加一个选项(一张表最多只能拥有一个自增长)

2、 表选项可以通过修正表构造来实现

Alter table 表名 auto_increment = 值;

删除自动增长

删除自增长:便是在字段属性之后不再保留auto_increment,当用户修正自增长所在字段时,如果没有看到auto_increment属性,系统会自动打消该自增长

初始设置

在系统中,有一组变量用来掩护自增长的初始值和步长

Show variables like ‘auto_increment%’;

细节问题

1、 一张表只有一个自增长:自增长会上升到表选项中

2、 如果数据插入中没有触发自增长(给定了数据),那么自增长不会表现

3、 自增长修正的时候,值可以较大,但是不能比当前已有的自增长字段的值小

唯一键

唯一键:unique key,用来担保对应的字段中的数据唯一的。

主键也可以用来担保字段数据唯一性,但是一张表只有一个主键。

1、 唯一键在一张表中可以有多个。

2、 唯一键许可字段数据为NULL,NULL可以有多个(NULL不参与比较)

创建唯一键

创建唯一键与创建主键非常类似

1、 直接在表字段之后增加唯一键标识符:unique[ key]

2、 在所有的字段之后利用unique key(字段列表);

3、 在创建完表之后也可以增加唯一键alter table 表名 add unique key(字段列表);

查看唯一键

唯一键是属性,可以通过查看表构造来实现

唯一键效果:在不为空的情形下,不许可重复

在查看表创建语句的时候,会看到与主键不同的一点:多出一个“名字”

删除唯一键

一个表中许可存在多个唯一键:假设命令为主键一样:alter table 表名 drop unique key;//缺点的

Index关键字:索引,唯一键是索引一种(提升查询效率)

删除的基本语法:alter table 表名 drop index 唯一键名字;

修正唯一键:先删除后增加

复合唯一键

唯一键与主键一样可以利用多个字段来共同担保唯一性;

一样平常主键都是单一字段(逻辑主键),而其他须要唯一性的内容都是由唯一键来处理。

表关系

表关系:表与表之间(实体)有什么样的关系,每种关系该当如何设计表构造。

一对一

一对一:一张表中的一条记录与其余一张表中最多有一条明确的关系:常日,此设计方案担保两张表中利用同样的主键即可

学生表

学生ID(PRI)

姓名

年事

性别

籍贯

婚否

住址

表的利用过程中:常用的信息会常常去查询,而不常用的信息会偶尔才会用到。

办理方案:将两张表拆分,常见的放一张表,不常见的放一张表

常用表

学生ID(PRI)

姓名

年事

性别

不常用表

学生ID(PRI)

籍贯

婚否

住址

一对多

一对多,常日也叫作多对一的关系。
常日一对多的关系设计的方案,在“多”关系的表中去掩护一个字段,这个字段是“一”关系的主键。

母亲表

母亲ID

姓名

年事

身高

M1

M2

孩子表

孩子ID

姓名

年事

身高

母亲ID

K1

M1

K2

M1

多对多

多对多:一张表中的一条记录在其余一张表中可以匹配到多条记录,反过来也一样。

多对多的关系如果按照多对一的关系掩护:就会涌现一个字段中有多个其他表的主键,在访问的时候就会带来不便。

既然通过两张表自己增加字段办理不了问题,那么就通过第三张表来办理。

师生关系

1、 一个老师教过多个班级的学生;

2、 一个学生听过多个老师讲的课;

首先得有两个实体:老师表和学生表

从中间设计一张表:掩护两张表对应的联系:每一种联系都包含

多对多办理方案;增加一个中间表,让中间表与对应的其他表形成两个多对一的关系:多对一的办理方案是在“多”表中增加“一”表对应的主键字段。