回顾

数据库基本知识:关系型数据库与非关系型数据库

关系型数据库:安全(磁盘)

非关系型数据库:高效(内存)

关系型数据库:建立在关系模型上的数据库,

数据结构:二维表(浪费空间)

数据库操作指令:sql(DDL,DML,DCL)

完整性约束:表内和表之间(实体)

Mysql关系型数据库:

C/S结构(直接认证发送sql指令,服务器处理指令返回结果,客户端接受结果,分析结果)

Mysql服务器对象:DBMS----->DATABASE------->TABLE------>FIELD

数据库基本操作:库操作,表操作和数据操作。

字符集问题:

中文数据问题

1,改变服务器接受数据字符集character_set_client

2,改变服务器返回数据字符集character_set_result

3,快捷方式:set names 字符集;

乱码问题:

浏览器解析:php处理

数据库处理

校对集问题:

比较规则:_bin二进制,_cs,_ci大小写

算法:快速排序。

数据类型:

列类型:

所谓数据类型:对数据进行统一分类

从系统数据角度出发就是为了使用统一方式进行管理

更好的利用有限的空间

Sql将数据类型分为三类:

数值类型,字符串类型,时间日期型。

数值型:

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

整数型:

存放的都是数据

在sql因为要考虑节省磁盘

Tingint :迷你整型,使用一个存储字节(常用),最多状态有256种

Smallint: 小整型,使用俩个字节,表示状态最多有65535种

Mediunint:中整型,使用三个字节存储

Int:表准整型,使用四个字节存储(常用)

Bigint :大整型,使用八个字节存储。

在sql中数据库全部都是默认有符号的;分正负,使用无符号数据:给约定的数据类型限定

Int unsigned --无符号,从零开始。

查看表结构的时候,发现每个字段的数据类型之后都会带一个括号,里面有指定数值

 显示宽度:数据最终显示的位数(包含符号)如-123是四位,253是三位,

显示宽度:没什么特别意义只是默认告诉用户显示的形式而已。实际上用户可以控制,不会改变数据的实际大小。

显示宽度的意义:在于当数据不够显示宽度的时候,会自动让数据变成对应的显示宽度:

通常需要搭配一个前导0来增加宽度,不改变值的大小:zerofill(零填充)

零填充的意义(显示宽度):保证数据格式。

小数型:

带小数点或者范围超过整型的数值类型。

Sql中将小数型分为俩种:浮点型和定点型

浮点型:小数点浮动,精度有限,会丢失精度。

定点型:小数点固定,精度有限,不会丢失精度。

浮点型:

浮点型数据是一种精度型数据:因为超出规定范围之后会丢失精度(四舍五入)。

浮点型分为俩种:float:单精度,占用四个字节存储数据,大概七位。

Double:双精度,占用八个字节存储数据,大概十五位左右。

创建浮点数表:浮点的使用方式:直接float。

表示没有小数部分;float(M,D)M表示总长度,D表示小数部分长度,整数部分长度为(M-1)。 浮点型数据的插入:整数部分不能超过长度,但是小数部分可以超过长度(系统会自动四舍五入)结果:浮点数一定会进行四舍五入(超出精度范围)。

浮点数如果是因为系统进位导致整数部分超出指定长度:那么系统也会允许成立。

定点型:

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

浮点数如果进位导致长度溢出,没有问题。但是定点数不行、

时间日期型:

Datetime:时间日期,格式是YYYY-MM-DD HH:ii:ss

Date :日期就是datetime的date部分

Time:时间段,指定某个区间之间,时间到时间

Timestamp:时间戳,是从1970开始的格式与datatime一致,

Year:年份,两种格式,year(2)。

插入数据:

时间time可以说负数,year可以使用2位数插入,也可以使用四位数。

Timestamp字段:只要是当前所在记录别更新,该字段一定会自动更新成当前时间。

网站以php位实现主要操作对象,php有非常强大的日期处理函数:date,只需要一个时间戳就可以转换成任意类型函数的时间:以php为主的时候,都是在数据库使用时间戳(整型)来存储时间。

字符串类型:

在sql中将字符串分为了6类

Char ,varchar,text,blob,set和enum

Char:定长字符串

定长字符串。磁盘在定义结果的时候就已经确定了最终数据的存储长度。

Char[L]:L代表length,可以存储长度,单位为字符最大长度值为255

例:char[4]在utf8环境下需要4*3=12个字节

Varchar:变长字符串

Varchar在分配空间长度的时候,按照最大空间分配,但是实际上最终用了多少是根据具体的数据来确定,

Varchar(L):L代表字符长度理论上长度65536个字符

但是会多1到2个字节来确定存储的实际长度

例:varchar(10)确实存了十个汉字,在utf8的环境下10*3+1=31字节

如何选择定长还是变成字符串?

定长的磁盘空间比较浪费空间,但是效率高;

变长的磁盘空间比较节省但是,效率低;

如果数据基本上确定长度一样,就是定长如果数据不能确定长度(不同数据有变化)

文本字符串:

如果数据量特别大,通常超过255个字符,就会使用文本字符串,文本字符串会根据存储数据的格式进行分类:text(文字存储)和blob(二进制数据,二进制存储路径)

枚举字符串:enum

枚举:enum,事先将可能出现的结构都设计好,实际上就是存储数据必须是规定好的数据中的一个。

枚举使用方式

定义:enum(可能出现的元素列表)

如:enum(‘女’,’男’,’人妖’,’保密’,);

使用:存储数据,只能存储上面定义好的数据

例:创建枚举表,create table my_enum(

Gender enum(‘男’,’女’,’人妖’) character utf8

加入数据;作用之一就是规范数据格式

数据只能是规定数据中的一个

Insert into my_enum values(‘男’),(‘人妖’);

作用之二节省空间(枚举 别名 单选框)(存储的是数值)

在mysql中系统也是自动转换数据格式的,

证明字段存储的是数值:将取出来的+0

就可以判断出原来的数据到底是字符串还是数值,如果是字符串结果为0,否则为其他值。

例:select gender+0,gender from My_enum;

找出枚举元素的规律,按照元素出现顺序从1开始编写

枚举原理:枚举在进行数据规范的时候,系统会自动建立一个数值与枚举元素的对应关系(关系放在日志中)然后在进行数据插入的时候,系统自动将字符串转换成对应的数字存储,然后进行数据提取的时候,系统自动将数值转换成对应的字符串显示。

集合字符串:

集合跟枚举很类似:实际存储的是数值而不是字符串(集合是多选)

例:create table my_set (hobby set (‘篮球’,’足球’,’乒乓球’))charset utf8;

插入数据:可以使用多元素字符串进行组合,也可以数值。

例:insert into my_set values (‘足球’)

Insert into my_set values(2)

集合中:每一个元素对应一个二进制位,被选中为一,没有则为零,最后方向反过来

例:110------>011=3

Select hobby +0 ,hobby from my_set;

集合元素的顺序没有关系,最终系统会匹配顺序;

集合的强大功能在于能够规范数据和节省空间。

Php也可以规范数据但是对于php来说效率优先;而且数据的维护可以通过数值进行增加php的维护成本;php根本没有办法判断数据在数据库的形式。

MySql记录长度

Mysql规定:任何一条记录最长不能超过65535个字节(varchar永远达不到理论值)

Varchar实际存储长度能达到多少呢,看字符集

在utf8下varchar的实际顶配varchar(21844)21844个字符-----21844*3+2=65532+2=65534

Gbk下实际顶配varchar(32766)32766个字符           ------32766*2+2=65532+2=65534

Mysql记录中如果任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节存储在null(若想释放null所占用的字节,必须保证所有字段不为空)

Mysql中text文本字符串,不占用记录长度;额外存储,但是text文本字符串也是记录的一部分一定需要占据部分长度:10字节(保留数据的地址以及长度)

列属性:

列属性:真正约束字段的是数据类型,但是数据类型的约束很单一,需要一些额外的约束来保证数据的完整性

列属性:null/not null

Default

Primary key

Unque key

Auto_increment

Comment

空属性:null

Null(默认的和not null不为空)虽然是默认的,数据基本上都是字段为空,但是实际上真正开发的时候,尽肯能地保证所有的数据都不为空;空数据没有意义,空数据不能参加运算。

列描述:comment

没有实际意义,专门用来描述字段,会根据表的创建语句保存(用来给dba)了解的。

例:comment’姓名’;

默认值:default

某种数据会经常出现在某个具体的值

想要使用某个默认值,可以不一定指定列表,不使用字段列表,可以使用default关键字代替值

例:insert into my_default values(‘张三’,18,default);

回顾

字段类型(列类型):数值型,时间日期型,字符串类型

数值型:整型,小数型(浮点与定点)

时间日期型:datetime,time,datetimestamp,year

字符串类型:定长,变成,

文本字符串(text和blob)

枚举与集合

Mysql记录长度:65535个字节

Null占一个字节

text文本不占用记录长度,本身十个字节

字段属性:空属性,列描述,默认值

mysql学习之路_字段类型与属性的更多相关文章

  1. mysql学习之路_字段类型与属性2

    字段属性: 主键,唯一键,自增长. 主键: Primary key 主要的键,一张表只能有一个字段能使用对应的键,用来唯一约束该字段里面的数据不能重复,称之为主见. 一张表最多只有一个主键. 增加主键 ...

  2. mysql学习之路_事物_存储过程_备份

    数据备份与还原 备份:将当前已有的数据保留. 还原:将已经保留的数据恢复到对应表中 为什么要做数据备份 1,防止数据丢失,被盗,误操作 2,保护数据记录 数据备份还原方式有多种:数据表备份 单表数据备 ...

  3. mysql学习之路_联合查询与子查询

    联合查询 联合查询:将多次查询(多条select语句)在记录上进行拼接(字段不会增加). 语法:多条select语句构成,每条select语句获取的字段必须严格一致(但是字段类型无关). Select ...

  4. mysql学习之路_外键

    回顾4 连接查询: 连接多张表到一起,不管记录数如何,字段数一定会增加. 分类:内连接,外连接.自然连接,交叉连接, 交叉连接:cross join (笛卡尔积) 内连接:inner join,左右两 ...

  5. mysql学习(四)-字段类型

    mysql数据类型: 数值型: 整形:int 浮点型:float double decimal:定点型 日期: date  '2012-01-02' time '10:01:01' datetime ...

  6. mysql学习之路_高级数据操作

    关系 将实体与实体的关系,反应到最终数据表的设计上来,将关系分为三种,一对多,多对多,多对多. 所有关系都是表与表之间的关系. 一对一: 一张表的一条记录一定只对应另外一张表的一条记录,反之亦然. 例 ...

  7. mysql学习之路_基础知识

                    Mysql php阶段将数据库分为三个阶 基础阶段: mysql数据库的基本操作(增删改查),以及一些高级操作(视图,触发器,函数,存储过程等),PHP操作没有sql数 ...

  8. mysql学习之路_视图

    视图 视图:view是一种有结构的但是没有结构来源的虚拟表,虚拟表的结构来源不是自己定义的而是从对应的基表中产生(来源) 创建视图 基本语法: Create view 视图名字 as select 语 ...

  9. mysql学习之路_连接查询

    回顾 列属性:主键,自增长,唯一键. 关系:一对一,一对多,多对多 三层范式: 1NF:字段设计必须符合原子性 2NF:不存在部分依赖(没有复合主键) 3NF:不存在传递依赖(实体单独成表) 逆规范化 ...

随机推荐

  1. 关于Laravel框架

    第1讲-Laravel介绍 1.1 什么是Laravel laravel是目前一个比较主流的框架,现在很多互联网的公司都在使用该框架.该框架的前身是symfony框架 Laravel的定位就是做一个简 ...

  2. YII2中ActiveDataProvider与GridView的配合使用

    YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的对象,方便我们构造复杂的查询筛选语句. 配合强大的GridView,快速的显示我们 ...

  3. js计算日期增加

    <div class="time"> <i class="visa_icon prev"></i><span id=& ...

  4. 【教程】教你解决“Windows 资源保护找到了损坏文件但无法修复其中某些文件”的问题【转载】

    转载:http://www.cystc.org/?p=2827 很多人都会用sfc /scannow来解决系统文件损坏的问题,但有时也会遇到连sfc都无法修复的情况,最常见的就是出现“Windows ...

  5. std::move 移动对象资源

    场景: C++ 标准库使用比如vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建, 本来原意是想把参数push_back进去就行了. ...

  6. numpy常见属性、创建数组

      1.几种常见numpy的属性 ndim:维度 shape:行数和列数 size:元素个数 >>> import numpy as np #导入numpy模块,np是为了使用方便的 ...

  7. Can't find bundle for base name test.properties, locale zh_CN

    这个问题花了我好长时间,网上搜了一个答案:http://verran.iteye.com/blog/44357 是将properties文件放在新建的文件夹下,如config,然后将config加入到 ...

  8. mysql错误日志

    cat /etc/my.cnf

  9. SSRF-php初探

    0x00 前言 1)    SSRF的概念很好理解,请自行百度. 2)    JAVA/PHP/PYTHON都存在SSRF漏洞(至于其他语言的情况,了解粗浅尚不得知). 3)    SSRF的利用方式 ...

  10. wifi功能模块

    1. API 10 Android2.3.3 不支持wifi代理设置. 2017-09-29 原来addOrUpdateNetwork之前,wifi配置并不会立即生效,要想立即生效,就要 wifiMa ...