MySQL数据类型、表的约束、索引

精度丢失不是四舍五入。ieee 754二进制浮点数运算标准
decimal:和float很像但是有区别;精度不一样,float表示的精度大概是7位,decimal在MySQL中是按照字符串形式存储的

表的约束:

  1. 空属性:两个值null和not null;默认为null;但是在实际开发中尽可能保证字段不为空,因为数据为空没办法参与运算。

  2. 默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。默认值生效:数据在插入的时候不给该字段赋值,就使用默认值。

  3. 列描述:comment 没有实际含义,专门描述字段,通过desc查不到注释信息;通过show可以看到;show create table 表名\G可查看

  4. zerofill:如果宽度小于设置的宽度,就会自动在数字前面填充0,只是该变了最终的显示结果,在MySQL中存储依然是之前的值,比如1,但是设置int(3)的话,最终显示是003,但是存储的还是3。

  5. 主键primary key:用来唯一的约束该字段里面的数据,不能重复,不能为空,且一张表中最多只能有一个主键;主键所在的列通常是证书类型。
    创建主键:
    创建表的时候直接在字段上指定主键:id int unsigned primary key comment ‘学号不能为空’,
    在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建,如果有多个字段为主键,可以使用复合主键。
    创建表以后追加设置:alert table 表名 add primary key(字段列表)
    删除主键:alter table 表名 drop primary key;
    主键约束:主键对应的字段不能重复,一旦重复,操作失败。

  6. 自增长auto_increment:对应的字段,不给值的话会自动被系统触发,系统会从当前字段中已有的最大值+1操作,得到一个不同的值,通常和主键搭配使用,作为逻辑主键。
    自增长的特点:**
    任何一个字段要做自增长,前提本身是个索引(key一栏有值)
    自增长字段必须是整数
    一张表只能有一个自增长**
    索引:索引相当于图书馆的目录,可以根据目录中的页码快速找到所需的内容。
    是单独的、物理的堆数据库表中某列或者多列的值进行排序的一种存储结构。使用索引可以快速访问数据库表中的特定信息,是提高数据库性能的重要方式。
    索引的核心就是加快MySQL的查询。索引底层使用B+树,叶子结点会进行排序。
    B+树:只在叶子节点存放数据,并且叶子结点用链表连接起来,数据库进行排序操作可是直接使用链表排序;B+树维护了一个平均查找次数,每一次查找任何一个数据,查找次数都是一样的,MySQLB+树高度最大为3层。
    索引中为什么不使用其他数据结构?
    1)链表IO一次只能加载一个数据,而且浪费空间
    2)二分查找树IO一次也只能加载一个数据,而且在极限情况下会退化为链表
    3)哈希结构hashMap的查询速度为O(1),但是hashMap自身是卢南旭存储,做等值查询速度快,但是如果进行范围查询就会变得很困难。
    索引的分类:
    1)普通索引:没有任何限制条件,可以给任何类型的字段创建普通索引。
    2)唯一性索引:使用UNIQUE修饰的字段,值不能重复。
    3)主键索引:使用primary key修饰的字段会自动创建索引,主键索引属于唯一性索引。
    4)单列索引:在一个字段上创建索引。
    5)多列索引:在表的多个字段上创建索引。
    6)全文索引:使用FULLTEXT参数可以设置全文索引,但是支持char、varchar、text类型的字段上。常用于数据量较大的字符串类型上,可以提高查询速度。只有MyISAM存储引擎支持。
    7)空间索引:使用spatial参数可以设置索引为空间索引,空间索引只能建立在空间数据类型上。MySQL中的空间数据类型包括geometry、point、linestring、polygon等

    创建索引的方式:
    1)创建表的时候创建索引:create table 表名(id int,name varchar(10),index(id));
    2)在创建表后创建索引:create index 索引名 on 表名(id);
    3)查看索引:explain select * from 表名 where 条件;
    索引的设计原则:
    1)给区分度高的字段创建索引
    2)给经常需要排序、分组和夺标联合操作的字段创建索引
    3)给常作为查询条件的字段创建索引
    4)索引的数目不能太多
    5)使用数据量少的索引(如前缀索引,主要准队字符串类型,字符串类型尽量创建前缀索引)
    6)对于多列索引,优先指定最左边的列集。
    7)删除不再使用或者很少使用的索引。

    索引的优点:
    1)通过创建索引可以在查询的时候提升系统的性能
    2)通过创建唯一键索引可以保证数据库每一行数据的独立性
    3)在使用分组和排序子句进行查找时,可以减少子句的分组和排序时间

    索引的缺点:
    1)创建和维护索引随着索引的数量增加而增加
    2)索引需要占用物理空间,建立聚簇索引需要开辟更大的空间
    3)对数据的修改索引也要更新维护,动态地维护索引也耗费空间和时间

  7. 唯一键:一张表中很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键;唯一键就可以解决表中多个字段需要唯一约束的问题。唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

  8. 外键:用于定义主表与从表之间的关系;外键约束主要定义在从表上,主表则必须是有主键约束或者unique约束,当定义外键后,要求外键树列数据必须在主表的主键列存在或者为null。foregin key(字段名)references 主表(列);

mysql> create table class(
   -> id int primary key,
   -> name varchar(30) not null comment '班级名'); 
创建从表的时候设置外键
mysql> create table stu(
   -> id int primary key,
   -> name varchar(30) not null comment '学生名',
   -> class_id int,
   -> foreign key(class_id) references class(id));
   正常插入数据
mysql> insert into class values(10,'class1'),(20,'class2');
mysql> insert into stu values(100,'lisa',10),(101,'rose',20);
  插入一个班级号不存在的学生,插入失败
mysql> insert into stu values(102,'sana',30);
  插入一个班级号为null的学号是能,目前还没有分配班级,插入成功
mysql> insert into stu values(102,'sana',null);
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值