存储引擎:

不同的数据应该有不同的处理机制

mysql存储引擎:

Innodb:现在版本默认的存储引擎

myisam:mysql老版本的存储引擎

memory:内存引擎(数据全部存在内存中)也叫临时的存储引擎

blackhole:无论存什么,都会立马消失(被称为黑洞引擎)写进去就会消失

每个存储引擎的特点:

Innodb:支持事务,支持行锁(当一个人在操作这一条数据的时候别人不能操作)。

使用Innodb建表的时候,它会帮你建两个文件,第一个文件存的是这个表的结构,第二

个文件存的是你的真实的数据,两者是分开的。

myisam:使用myisam建表的时候,它会帮你建三个文件,第一个文件存的是表结构,第二个存的是真实数据,

第三个文件存的是索引,索引就类似你输得目录,目录能帮你更快速的找到你想要的数据。

memory:使用memory建表的时候,它只会帮你建一个文件夹,这个文件夹是帮你存表结构的,因为memory

存数据是存在内存中的所以不需要建文件来存数据,所以它只有一个表结构。

blackhole:使用blackhole建表的时候,它也只会帮你建一个文件夹,因为blackhole的特点是无论存什么都会消失,

所以blackhole也不需要存数据的文件夹。

当往这些引擎中添入新数据的时候会发现只有使用blackhole所建的表是没有数据的,因为它是黑洞引擎存什么消失什么,

而使用memory引擎间建的表里面虽然能添加新的数据,但是当你重启数据库的时候会发现刚才存的数据消失了,因为memory

存的数据是存在内存当中的,当你应用重启或者关闭的时候它的数据就会消失。

查看所有的存储引擎:

show engines;

创建表的完整语法:

create table 表名(

字段名1 类型[(宽度) 约束条件],

字段名2 类型[(宽度) 约束条件],

字段名3 类型[(宽度) 约束条件]

);

1.字段名和字段类型都是必须的,中括号内的参数都是可选参数,也就是说可写可不写不影响创建

表。如果不写字段名和字段类型会报语法错误。

2.同一张表中,字段名不能重复,最后一个字段内不能加逗号,否则会报错。

char如果不写宽度,默认是1,char的宽度表示的是对存储数据的限制,数字是几只能存几个字符

如果超出了你设置的字符长度,mysql会帮你自动截取。所以使用数据库的准则是:能尽量让他少干活就让他少干活,

采取严格模式。数据库字段允许插空,在数据库里null表示为空,但是如果你不想让它为空,可以使用sql语句限制它不能为空,

语句为:alter table 表名 modify name char not null

当你输入这个语句时之前插入的空值会直接被清除掉

类型和约束条件都是限制数据的,那他们有什么区别呢?

类型约束的是数据的存储类型

而约束是基于类型之上的额外限制。

字段类型:

整形:SMALLINT(小整形) TINYINT(小型) INT(整型) BIGINT(大整型)

TINYINT :

默认是否有符号 :默认是带有符号的

超出限制会如何 :超出之后只会存最大值或者最小值

INT:

默认是有符号的,超出后只会存最大值或者最小值

要想让他没有符号呢 可以用sql语句限制它,语句为:unsigned 作用就是无正负符号

char后面的数字是用来限制存储数据的长度的。

特例:只有整型后面的数字不是用来限制存储数据的长度,而是用来展示数据的位数

int[填入的数字]  就是你填入的数字是几位存几位或者超出你填入的数字也会全部存完,不够八位默

认空格填充

使用sql语句修改约束条件  不够位数的情况下用0填充,语句为:zerofill 但是有限制最大是429496725,但是超了也没关系

对于整型来说:

数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表时,

如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据,

只要是整型 都不需要指定宽度 因为有默认的宽度 足够显示对应的数据

区别:

严格模式:

在我们插入多余数据的时候,数据库会自动帮我们截掉。  但是我们应该遵循尽量让数据库少干活的原则,针对这种情况,

数据库应该报错,但是它没报错,因为5.6版本没有遵循严格模式,如果是5.7或者5.7以上都是严格模式。我们可以使用sql语句设置严格模式。

模糊匹配:

like      关键字

%匹配任意多个字符

_匹配任意一个字符

查看严格模式:

show variables %mode%   (百分号内放要匹配的字符)

设置严格模式语句:

set session    临时有效:只在当前操作的窗口有效,一旦你退出登陆了再登进来就没用了

set global      全局有效  终身有效

set global sql_mode = 'STRICT_TRANS_TABLES'

设置完之后重新进入客户端即可

这样设置完成之后就能减轻MySQL的压力了,超出的数据直接就给报错。

浮点型:

FLOAT(255,30)总共255位,小数部分占30位

DOUBLE(255,30)总共255位,小数部分占30位

DECIMAL(65,30)总共65位,小数部分占30位

验证他们三个不一样的时候可以创三张表并插入相同的数据来对比一下来对比一下:

创建表:

给三张表中插入相同的数据并查看:

对比发现,他们三个小数位都是一样的,但是精确度不一样:FLOAT < DOUBLE < DECIMAL

字符类型:

char(定长)  只能存固定字符,超出了会直接报错。如果少了会自动用空格填充

varchar (变成) 只能存固定字符,超出了会直接报错。如果少了  有几个存几个

mysql在存储char类型字段的时候,硬盘上确确实实存的是固定长度的数据,但是在取出来的

一瞬间,mysql会自动将填充的空格去除。看着给我们的感觉跟varchar是一样的,就是你存入几个

数据长度查看的就是几个数据长度,但是它内部有一个处理机制,会自动去除空格。

查看插入的字符长度sql语句为:

select char_length(你要查的字段名,比如name) from 表名;

通过严格模式来修改不自动去除空格的机制:

set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";

然后先quit退出,再进来查看有没有修改成功,图片右下角显示已经修改成功。

写修改严格模式的时候,两个一定要都写,因为这是一个替换的过程,不是新增一个模式。

char 与 varchar的区别

char 定长

存浪费空间

存取速度快

取的时候方便,直接按固定长度取值即可,

varchar 变长

存节省空间

存取速度慢:存的时候需要给数据加一个记录长度的报头,

取的时候需要先读取报头才能读取真实数据。

取的时候比较繁琐,因为无法知道数据有多长。

日期类型:

date  年月日

datetime 年月日时分秒

year  存年份

time  时分秒

创建表,插入数据并查看表:

枚举与集合类型:

枚举:

关键字 :enum

多选一(限制某个字段能够存储的数据内容)

集合:多选多或者多选一

约束条件:

not null 不能为空

default 给某个字段设置默认值,当用户写了的时候用用户写的,用户没写就用默认值

sql语句:create table t17(id int,name char(16) default '插入的数据');

往表中插入数据的时候 可以指定字段进行插入 不需要全部都插

insert into t17(name,id) values('jack',2);

单例唯一:限制某一个字段是唯一的  sql语句为:unique

联合唯一(在语句的最后 用括号的形式 表示哪几个字段组合的结果是唯一的)

primary key 主键

限制效果跟 not null + unique 组合效果一致 非空且唯一

create table 表名(id int primary key);

primary key也是innodb引擎查询必备的索引,索引你就把当成书的目录。

innodb引擎在创建表的时候 必须要有一个主键,当你没有指定主键的时候:

1.会将非空切唯一的字段自动升级成主键

2.当你的表中没有任何的约束条件 innodb会采用自己的内部默认的一个主键字段

该主键字段你在查询时候是无法使用的,查询数据的速度就会很慢,类似于一页一页的翻书。

主键字段到底设置给谁呢?

通常每张表里面都应该有一个id字段,并且应该将id设置为表的主键字段

通常每张表里面都应该有能标识数据编号的这么一个字段,默认情况下都是将标识数据编号的这么一个字段设置为主键。

联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键!

innodb引擎中一张表有且只有一个主键

主键字段应该具备自动递增的特点

每次添加数据 不需要用户手动输入

auto_increment 自动递增

delete from 仅仅是删除数据 不会重置主键

truncate 初始化表 会重置主键

mysql sql 限制条数据类型_数据库的数据类型和约束条件相关推荐

  1. mysql学号数据类型_数据库常见数据类型和约束

    常用数据类型 MYSQL数据库支持多种类型,大致可以分为三个类型:数值型.时间/日期型和字符型 在这里就列举一些我们常用的数据类型 1.数值型 表示整数型数据类型(tinyint.smallint.m ...

  2. mysql在建站起什么作用_数据库操作对比:Sql Server与MYSQL相比有哪些建站优势?...

    最近一直在做博客网站,从定位主题到程序和数据库的选择,确实废了不少心思,经过细致的思考,最终将主题定位为读书方面,还有文学和学习笔记,但是对于程序和数据库问题,我一直就比较费心,因为个人是个技术小白, ...

  3. MySQL中地点的数据类型_数据库中地址的数据类型

    数据库中用什么数据类型存储电话号码比较合理? 因为涉及到固定电话,所以一般用varchar2 ,单纯手机号码的话可以用number. 数据类型分类: 数字型- Integer(整型).Long(长整型 ...

  4. mysql课程id数据类型_数据库学习之六:mysql数据类型

    六.mysql数据类型 1.课程大纲 • 数据类型介绍 • 数据类型设置 • 列属性 • 数据类型的字符集用法 • 选择适当的数据类型 2.数据类型介绍 • 四种主要类别: 数值类型 字符类型 时间类 ...

  5. php mysql 插入多条数据_雷林鹏分享:PHP MySQL 插入多条数据

    使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyGuests" 表添加了三 ...

  6. mysql from多表顺序_数据库 from 表的顺序

    MY SQL语句常用集合 1个数据库通常包含一个或多个表.每个表由一个名字标识 1.SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数 ...

  7. mysql是应用软件还是系统软件_数据库管理系统属于系统软件还是应用软件

    展开全部 数据库管理系62616964757a686964616fe59b9ee7ad9431333332623965统(database management system)是一种操纵和管理数据库的 ...

  8. mysql 查询分析工具下载_数据库管理系统-DB查询分析器(数据库查询分析软件)6.04 中文免费版-东坡下载...

    DB查询分析器是一个功能强大的万能数据库查询分析软件,支持对各种关系数据源(包括Oracle.Sybase.DB2.Informix.MS SQL SERVER.MYSQL.MS ACCESS.Par ...

  9. mysql sql注入很常用_常见sql注入的类型

    这里只讲解sql注入漏洞的基本类型,代码分析将放在另外一篇帖子讲解 目录 最基础的注入-union注入攻击 Boolean注入攻击-布尔盲注 报错注入攻击 时间注入攻击-时间盲注 堆叠查询注入攻击 二 ...

最新文章

  1. Unity2D游戏开发和C#编程大师班
  2. 自动驾驶中可解释AI综述和未来研究方向
  3. inotify介绍及rsync + inotify 实时同步备份
  4. 深度学习核心技术精讲100篇(四十九)-深度学习之关联规则
  5. 如何集成和使用EclEmma插件来获得良好的Junit覆盖率
  6. javascript学习系列(2):数组中的filter方法
  7. 天猫研发Java团队(4面全题目):并发压测+Mina+事务+集群+秒杀架构
  8. 开源:秋式广告杀手源码
  9. Google AdSense实战宝典
  10. JAVA 基础算法汇总(持续更新)
  11. 天正坐标标注怎么不显示_cad中坐标标注怎么显示不了xy的
  12. PAT甲之初窥门径(上)
  13. ECCV 2022最佳论文奖公布!两位华人学者摘得桂冠!本科来自清华、浙大
  14. 数字IC后端流程——(三)布局Placement
  15. 提高电脑性能增加fps的方法
  16. 贪吃机器人DIY(二)
  17. 培训-从学员的角度思考问题
  18. ZYNQ - 无DDR固化程序(代码运行在OCM上)
  19. Matlab:向图中添加注释
  20. 4.16 日期的输入和自定义日期的格式 [原创Excel教程]

热门文章

  1. 移动硬盘新建选项消失、不能新建文件夹和文件的解决方案
  2. VScode输出中文乱码的解决方法------测试过可以用
  3. python爬虫中文乱码解决方法
  4. 如何在现代C ++中实现经典排序算法?
  5. 如何在PHP中使用cURL连接到Tor隐藏服务?
  6. JavaScript中的“ new”关键字是什么?
  7. Win10系统如何解除U盘写保护模式
  8. 微信小程序api接口调用用封装
  9. CentOS[linux]操作系统的安装手册
  10. c++ opencv实现区域填充_利用opencv之为图像添加边框