对第一天所学知识点进行回顾总结:
数据库的基础知识:关系型数据库(保存在磁盘)和非关系型数据库(内存)
关系型数据库:建立在关系模型上的数据库。三大组件包括:
数据结构:二维表(比较浪费空间)
操作数据的指令集合: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;