六天带你玩转mysql数据库--第二天笔记

对第一天所学知识点进行回顾总结:

数据库的基础知识:关系型数据库(保存在磁盘)和非关系型数据库(内存)
关系型数据库:建立在关系模型上的数据库。三大组件包括:
	数据结构:二维表(比较浪费空间)
	操作数据的指令集合:SQL(DDL:数据定义,DML(DQL):数据操作查询,DCL:(数据控制))
	完整性约束:表内与表之间(实体)

mysql关系型数据库:c/s结构软件(连接认证,发送SQL指令,服务器处理指令返回结果,客户端接受并解析结果)
mysql服务器对象:DBMS---->Database------>Table------>fields(字段)
SQL的基本操作:库操作,表操作(字段)和数据操作。

字符集问题:中文数据问题。
改变服务器接受数据的字符集:character_set_client;
改变服务器返回数据的字符集:character_set_resuts;
快捷方式:set    names    字符集

校对集问题:比较规则,_bin,_cs,_ci,利用了排序来实现(order   by)

web乱码问题
浏览器解析,PHP处理(本地文件),数据库处理。

mysql的数据类型(列类型):

所谓的数据类型,对数据进行统一的分类,从系统的角度出发为了能够使用统一的方式来进行管理,更好的利用有效的空间。
SQL中将数据类型分成了三大类:数值类型,字符串类型和时间日期类型。

在这里插入图片描述

数值型:

数值型:都是数值,系统将数值分为整数型和小数型。

整数型:

整数型:用int存放整形数据,占四个字节,在SQL中因为更多要考虑如何节省磁盘空间,所以系统将整数又细分了5类:
Tinyint:迷你整型使用一个字节存储,表示的状态最多为256字节(常用)。
smallint:小整型,使用两个字节存储,表示的状态最多为65536种。
mediumint:中整型,使用三个字节存储。
int:标准整型,使用四个字节存储。(常用)
bigint:大整型,使用八个字节存储。(很少需要大整型来处理数据)

在这里插入图片描述

创建一张整形表并插入字段信息:

1.创建整型表:
create   table   my_int(
int_1 	tinyint,
int_2  	smallint,
int_3 	 int,
int_4     bigint
)charset  utf8;
2.插入数据:只能插入整型,只能插入范围内的整型。
---插入有效数据:
insert   into   my_int   values(100,100,100,100);
---插入无效数据,数据类型不正确:
insert   into    my_int   values('a','b','199','f');
---插入数据超出范围报错:
insert    into    my_int    values('255',10000,10000,10000);

在这里插入图片描述

无符号类型数据的处理:

SQL中的数值类型全部默认有符号,分正负;有时候需要使用无符号数据,需要给数据限定类型:int   unsigned;--无符号从零开始
---给表增加一个无符号类型
alter  table   my_int   add   int_5    tinyint   unsigned;		
查看表结构: 	desc   my_int;

在这里插入图片描述

重新进行数据的插入可以看到设置无符号类型之后可以正确插入数据:

insert    into    my_int    values('127',10000,10000,10000,255);

在这里插入图片描述

显示宽度:

查看表结构的时候,会发现每个字段的数据类型之后都会自带一个括号,里面有指定的数字。
desc    my_int;
数字叫做显示宽度,是指数据最终显示的位数。例如:-123表示的是4位显示宽度(包括括号),255是3位宽度。

在这里插入图片描述

显示宽度的真正含义:

显示宽度的意思只是默认的告诉用户显示形式而已,这个是用户可以控制的,这种控制不会改变数据大小。
举例:alter   table   my_int   add    int_6    tinyint(1)    unsigned;   ---指定显示宽度为1
desc   my_int;    查看字段信息
insert   into    my_int    values(127,0,0,0,255,255);		插入数据信息
select   *    from    my_int;  	查看表内数据

在这里插入图片描述
零填充的意义(显示宽度):保证数据格式

从上图来看,尽管我们设置了显示宽度为1,但是255这个数据还是依旧正常的显示,这就说明数据的大小是由数据的类型
决定,显示宽度的意义在于当数据不够显示宽度的时候,会自动让数据变成对应的显示宽度。通常需要
搭配一个前导0来增加宽度,不改变值的大小;zerofill(零填充)会导致数值自动变成无符号。
例如:
alter   table   my_int   add   int_7   tinyint(2)   zerofill;		--显示宽度为2,零填充
desc   my_int;
insert  into   my_int    values(1,1,1,1,1,1,1);
insert  into    my_int    values(100,100,100,100,100,100,100);
select    *    from    my_int; 		可以看到唯一的一个1变成了01,这个就是零填充的含义

在这里插入图片描述

小数型:

小数型:带有小数点或者范围超出整型的数值类型。
SQL中:将小数型细分成两种:浮点型和定点型。 
浮点型:小数点浮动,精度有限,而且会丢失精度。对数据精确不要求,数量级别比较大的时候使用浮点型
定点型:小数点固定,精度固定,不会丢失精度。数据想要精确使用定点型

浮点型:

浮点型数据是一种精度型数据,因为超出指定范围之后,会丢失精度(自动四舍五入)
浮点型:理论分为两种精度
	float:单精度,占用四个字节存储数据,精度范围大概为7位左右。
	double:双精度,占用八个字节存储数据,精度范围大概为15位左右。

在这里插入图片描述
浮点数表:

创建浮点数表:浮点的使用方式:直接float表示没有小数部分;float(M,D):M表示总长度,D代表小数部分长度,
整数部分长度为M-D。 
--浮点数表
create   table   my_float(
f1     float,
f2     float(10,2),      ---10位在精度范围之外,这个指的是插入数据依据2位小数和8位整数
f3     float(6,2)     ---6位在精度范围之内,这个指的是插入数据依据2位小数和4位整数
)charset  utf8;
desc   my_float;

在这里插入图片描述

插入数据:可以直接是小数,也可以是科学计数
insert    into    my_float    values(1000.10,1000.10,1000.10);   ---符合条件
insert    into    my_float    values(1234567890,12345678.90,1234.56);   ---符合条件
insert    into    my_float    values(3e38,3.01e7,1234.56);		--符合条件
insert    into    my_float    values( 9999999999,99999999.99,9999.99);   --最大值

在这里插入图片描述

浮点型数据的插入:整数部分是不能超出长度的,但是小数部分可以超出长度(因为系统会四舍五入)
---超出长度来插入数据
insert    into    my_float    values(123456,1234.123456768,123.9876543);    小数部分超过设定的两位但是可以插入成功。
insert    into    my_float    values(123456,1234.12,12345.12);     整数部分找出设定无法插入数据

在这里插入图片描述

数据结果:浮点数一定会进行四舍五入(超出精度范围),浮点数如果是因为系统进位导致整数部分超过指定长度,那么
系统也允许成立。
select    *   from  my_float;

在这里插入图片描述

定点型

定点型:绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分有可能(理论小数部分也不会丢失精度 )

在这里插入图片描述

创建定点数表:以浮点数作为对比

创建定点数表:
create    table    my_decimal(
f1    float(10,2)
d1    decimal(10,2)
)charset   utf8;
desc   my_decimal;

在这里插入图片描述

插入数据:定点数的整数部分一定不能超出长度(进位不可以),小数部分的长度可以随意超出,因为系统自动四舍五入。
insert   into    my_decimal   values(12345678.90,12345678.90);       --有效数据
insert   into    my_decimal    values(1234.123456,1234.1234356);    --小数部分超出
查看警告:
show  warnings;

在这里插入图片描述

浮点数如果进位导致长度溢出没有问题,但是定点数不可以。
insert   into   my_decimal   values(99999999.99,99999999.99);    --没有问题
insert   into   my_decimal   values(99999999.99,99999999.999);   --定点数进位导致整数部分超出范围

查看数据效果:
select   *   from   my_decimal;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/aaaaaab_/article/details/83176526