大家好,我是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,就是表示列自增

表的字符集

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

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

\s

用latin1,没有好处,只有坏处。

MySQL开发者为瑞典MySQL AB公司,所以默认编码为latin1。

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

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

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

    • 主键索引

    • 普通索引

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

MySQL数据分析-(12)表操作补充:字段属性的更多相关文章

  1. mysql数据库之表操作及字段约束条件

    目录 一.存储引擎 二.表介绍 三.创建表 四.查看表结构 五.数据类型 一.介绍 二.数值类型 整数类型 浮点型 三.字符串类型 四.日期类型 五.枚举类型与集合类型 六.约束条件 七.修改表 al ...

  2. MySQL为数据表的指定字段插入数据

    username not null 没有默认值/有默认值   insert不插入username字段 均不报错 2014年07月23日21:05    百科369 MySQL为数据表的指定字段插入数据 ...

  3. mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it"

    mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it" 现 ...

  4. MySQL获取Schema表名和字段信息

    MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,U ...

  5. MySQL数据分析-(13)表操作补充:索引

    大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天跟大家分享的主题是表补充之索引: (一)前面课程的小节以及本节课程的逻辑梳理 在正式分享主题之前,jacky先跟大家捋顺一 ...

  6. (18)模型层 -ORM之msql 多表操作(字段的属性)

    数据库表的对应关系 1.一对一   #关联字段写在那张表都可以 PS:只要写OneToOneField就会自动加一个id 2.一对多  #关系确立,关联字段写在多的一方 3.多对多   #多对多的关系 ...

  7. 修改MYSQL 表中的字段属性

    1.登录数据库 >mysql -u root -p 数据库名称 2.查询所有数据表 >show tables; 3.查询表的字段信息 >desc 表名称; 4.1.修改某个表的字段类 ...

  8. 修改MySQL表中的字段属性

    登录数据库 >mysql -u root -p 数据库名称 查询所有数据表 mysql>show tables; 查询表的字段信息 mysql>desc 表名称; 1.修改某个表的字 ...

  9. Mysql之库表操作(胖胖老师)

    SQL概念:结构化查询语言(SQL = Structured Query Language),也是一种编程语言(数据库查询和程序设计语言),可以用于数据的存取及查询,更新,管理关系型数据库系统ps: ...

随机推荐

  1. R|批量循环处理同一格式文件-csv,txt,excel

    本文首发于“生信补给站”微信公众号,https://mp.weixin.qq.com/s/8IfMrSr9xc8_1Y2_9Ne6hg 在一个文件夹下有很多字段一致,格式统一的数据文件(csv,txt ...

  2. .netcore 上传

    BS 上传文件,就是 <input type="file" name="file" />  这个选择文件之后,浏览器保存了文件路径,上传的时候,把这 ...

  3. Java Web 深入分析(1)B/S架构概述

    B/S结构即浏览器和服务器结构.它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实 ...

  4. 关于Vue中,checkBox等组件在赋值后,点击切换页面未及时更新问题

    我们经常碰到这样的问题,在v-for循环中,给某些组件(此处以checkBox为例)赋值后,组件并不能正常切换, 这是因为数据层太多,render函数没有自动更新,需手动强制刷新. 解决方法:在切换c ...

  5. 数据库入门(mySQL):数据操作与查询

    增删改 单表查询 多表查询 一.增删改 1.插入数据记录(增) insert into table_name(field1,field2,field3,...fieldn) valuses(value ...

  6. .tar.gz文件和.tar.xz文件的解压和压缩

    1,.tar文件 tar  -cvf 压缩 tar  -xvf 解压 例如: tar -xvf mysql-8.0.16-linux-glibc2.12-x86_64.tar 2,.xz文件 xz  ...

  7. vagrant 搭建开发环境

    虚拟机盒子地址 https://app.vagrantup.com/boxes/search vagrant init hirocom/centos7.2vagrant up 修改配置 config. ...

  8. RHEL7启动到命令模式

    打开/etc/inittab 文件会看到以下信息 从中知道想要启动后就进入完整的多用户文本模式(命令行模式) 以root权限执行: ln -sf /lib/systemd/system/multi-u ...

  9. [Python] Codecombat 攻略 Sarven 沙漠 (1-43关)截止至36关

    首页:https://cn.codecombat.com/play语言:Python 第二界面:Sarven沙漠(43关)时间:4-11小时内容:算术运算,计数器,while循环,break(跳出循环 ...

  10. 《流畅的Python》Data Structures--第3章 dict 和 set

    dict and set 字典数据活跃在所有的python程序背后,即使你的源码里并没有直接使用它. 和dict有关的内置函数在模块builtins的__dict__内. >>> _ ...