zoukankan      html  css  js  c++  java
  • MySQL数据分析-(12)表操作补充:字段属性

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天我们分享的主题是表操作补充之字段属性,依照惯例第一部分,jacky先跟大家分享本课时的学习逻辑

    (一)学习逻辑

    我们说创建表之前我们先要搭建表的结构,在这之后我们才能创建表是不是!那么大家思考下,为什么要这样,就是为什么非要先搭建表结构,为什么我们要有这个阶段,我们直接创建表就是create table 加表名,其余什么也不加我们说行不行 ?我们可以在MySQL中试一试;

    create table 表名(id);
    -- 会报错,报语法错误,我们给id列加上数字类型试一试
    create table 表名(id int);
    --显示创建成功了,那是不是说明,表的结构里就只有数据类型,没有其他的的结构了,我们看下新创建的这张表的结构,
    desc 表名
    • 我们在表的结构里看到,表结构里除了我们设置的数据类型int,是不是还有其他的结构属性,NULL和DEFAULT是不是都有相应的属性设置,我们创建表的时候,并没有设定它们,在表的结构中还有它们,那我们就能得出两个结论:一方面说明表结构中还有一些属性即使在创建表中不设定,系统会默认给你一个默认的属性是不是,也就是说明这些属性对于表的创建来说是必要的;还有一个结论,刚才在MySQL中的举例,我们可以看到,创建表时其他的属性都可以不设定,是不是数据类型不设定是不行的,所以我们说决定表结构的主要规则,也就是我们后面jacky会给大家总结的,决定表结构的主要约束是数据类型,上次课jacky已经讲过了,但光有数据类型,我们说还要有一些附加约束,就是我们这次课要讲的字段属性,也叫列属性,也叫表属性,我们看其他资料这几个概念说的都是一个意思,那么字段属性包括什么呢?

    • 字段属性包括:

      • 无符号的设置;

      • 自动补全到零

      • 自动增量的设置;

      • 默认值的设置

      • 其他的特殊设置

    好,上面就是本小节的一个学习逻辑线,下面我们开始具体学习字段属性都有什么,它是干什么用的,怎么用的

    (二)字段属性

    • (1)unsigned

      • 这个属性是无符号的意思,就是全是整数没有负数,它的作用是如果我们存放的数据都是正整数,它可以让空间增加一倍,咱们创建数值的时候,一般是无符号的,除非你要存负数;

      • 那这个unsigned属性是怎么让空间增加一倍的?

        • 我们前面在数据类型中说过int的存储数值的范围是-2147483648 ~2147483647,那么如果如果我们给int设定一个unsigned属性,那么int的存储数值的范围就是无符号的,它的范围就变成了0 ~ 4294967295,像我们id这样的字段,在实际工作中是不可能插入负数的,我们就要用unsigned这个属性来修饰,这样会使空间增加一倍;

        • 对于这个属性,jacky还有一点强调,就是unsigned这个属性只能用在数值型字段中,这个很简单,其他的数值类型比如说字符串和日期类型不分什么无不无符号,它们不是整数;

    create table user6(id int unsigned);
    -- 这样创建后,我们就不能插入负值
    insert into user6(id) values(99);
    select * from user6;
    --如果我们插入的值是-99呢,mysql会按照我们插入的极限值显示
    --那-99的极限值就是0,我们看一下,那这样空间就涨了一倍

    这就是我们说第一个字段属性,无符号的设置;

    • (2)zerofill

      • 第二个属性是自动补全,也叫零填充,SQL语句是zerofill,这个零填充也只能用在数值型字段,零填充的前提一定是unsigned属性,这个属性的作用就是前导0,前导0什么意思呢,比如说我们前面要讲的int(3),我们给某列的表属性设置为整型,后面加上括号3,我们在这列填加数字1,我们加上zerofill这个属性的话,会自动补零为001,不足3位的用零填充;
    • (3)null

      • null表示空,非字符串,这一列的值允许为null

      • not null 不可空

    • (4)default

      • 默认值,创建列时可以指定默认值,当插入数据时如果没有主动设置,则自动添加默认值;

        • create table demo1(nid int not null defalut1,num int null)

          • defalut 1 就是默认值等于1,不输入值的时候,默认值等于1;
    • (5)auto_increment

      • 自增的SQL语句是auto_increment,设置这个属性的类型也只能是整数,在工作中,我们一般都给id列设置为自增,别人也没人用,自增是什么意思呢?顾名思义,就是数据每增加一条就会在原有的字段值上自动加1,这是它的特性,而且它的字段值是不允许重复的,这里jacky强调,要设置自增属性,必须是索引,否则就会报错;关于索引后面jacky会详细的讲,这里大家
        只要知道自增列是唯一列,一般都是主键索引就足够了,我们在MySQL中看一下,

    我们之前在user表里插数据的时候,是不是有3类,id、名字和密码,咱们id是不是手输进去的,1、2、3、4、5等等,那么我们思考一下,我们怎么做更合适,应该理想的状态是,我们不要管这个id才对,我们每输入一条数据,我们的id自增了,但是id不会自己自增的,所以我们就要在表里加上自增的属性

    create table demo1(
        nid int not null auto_increment primary key,
        num int null)

    在创建表的时候,我们的SQL语句里加上auto_increment primary key,就是表示列自增

    @数据分析-jacky

    @数据分析-jacky

    @数据分析-jacky

    表的字符集

    一般来说,库的字符集是什么,表的字符集就是什么,当然MySQL服务器还有一个字符集,那么这个逻辑就是服务器的字符集是什么,库的字符集就是什么,库的字符集是什么,表的字符集就跟着是什么;

    那怎么查看,我们当前状态下这些字符集都是什么呢?

    s

    @数据分析-jacky

    用latin1,没有好处,只有坏处。
    MySQL开发者为瑞典MySQL AB公司,所以默认编码为latin1。
    早期版本的编码都是latin1, latin1编码可以认为无字符格式的编码,什么字符都可以存,乱玛也可以存,至于里面是什么内容,只能靠客户端的程序来解释,这样你的程序里就莫名奇妙的要多了一个识别和转换编码的步骤。程序复杂度冤枉的增加了,性能也受影响。而且,在latin1编码中比较和排序都有问题。

    为了确保数据的完整性和一致性,我们在创建表的时候,我们需要指定字段类型之外,我们还需要为字段指定一些属性,而且我们需要使用一些约束条件,比如说主键索引,外键索引,唯一索引等等,

    • 表里面每一个的索引有两种:

      • 主键索引

      • 普通索引

    说明:每个表只能有一个主键索引,但是每一个列都可以是普通索引,主键索引比普通索引的速度更快,为什么要加索引?加了索引以后,可以让我们的检索速度更快;所以我们在实际工作中查找数据的时候,sql语句总会是where id等于几,where id 大于几,是不是,where什么意思,where是一个条件,当id大于10的时候,为什么这个where的条件语句总是跟着id来用呢?因为id是主键索引,这样的查询速度是最快的;

  • 相关阅读:
    zabbix笔记之计算型监控项详解
    zabbix笔记之磁盘IO介绍
    zabbix笔记之Graphtree配置
    zabbix笔记之告警时远程执行命令
    zabbix笔记之异常优化
    zabbix笔记之IPMI配置
    基本的sql 语句
    socket 套接字
    调用父类的三种方法
    实例属性和类属性
  • 原文地址:https://www.cnblogs.com/shujufenxi/p/9054416.html
Copyright © 2011-2022 走看看