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中看一下,
- 自增的SQL语句是auto_increment,设置这个属性的类型也只能是整数,在工作中,我们一般都给id列设置为自增,别人也没人用,自增是什么意思呢?顾名思义,就是数据每增加一条就会在原有的字段值上自动加1,这是它的特性,而且它的字段值是不允许重复的,这里jacky强调,要设置自增属性,必须是索引,否则就会报错;关于索引后面jacky会详细的讲,这里大家
我们之前在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)表操作补充:字段属性的更多相关文章
- mysql数据库之表操作及字段约束条件
目录 一.存储引擎 二.表介绍 三.创建表 四.查看表结构 五.数据类型 一.介绍 二.数值类型 整数类型 浮点型 三.字符串类型 四.日期类型 五.枚举类型与集合类型 六.约束条件 七.修改表 al ...
- MySQL为数据表的指定字段插入数据
username not null 没有默认值/有默认值 insert不插入username字段 均不报错 2014年07月23日21:05 百科369 MySQL为数据表的指定字段插入数据 ...
- 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" 现 ...
- MySQL获取Schema表名和字段信息
MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,U ...
- MySQL数据分析-(13)表操作补充:索引
大家好,我是jacky朱元禄,很高兴继续跟大家学习MySQL数据分析实战,今天跟大家分享的主题是表补充之索引: (一)前面课程的小节以及本节课程的逻辑梳理 在正式分享主题之前,jacky先跟大家捋顺一 ...
- (18)模型层 -ORM之msql 多表操作(字段的属性)
数据库表的对应关系 1.一对一 #关联字段写在那张表都可以 PS:只要写OneToOneField就会自动加一个id 2.一对多 #关系确立,关联字段写在多的一方 3.多对多 #多对多的关系 ...
- 修改MYSQL 表中的字段属性
1.登录数据库 >mysql -u root -p 数据库名称 2.查询所有数据表 >show tables; 3.查询表的字段信息 >desc 表名称; 4.1.修改某个表的字段类 ...
- 修改MySQL表中的字段属性
登录数据库 >mysql -u root -p 数据库名称 查询所有数据表 mysql>show tables; 查询表的字段信息 mysql>desc 表名称; 1.修改某个表的字 ...
- Mysql之库表操作(胖胖老师)
SQL概念:结构化查询语言(SQL = Structured Query Language),也是一种编程语言(数据库查询和程序设计语言),可以用于数据的存取及查询,更新,管理关系型数据库系统ps: ...
随机推荐
- RMAN执行crosscheck archive报错ORA-19633问题处理
一.问题现象 RMAN connect target /; run { crosscheck archivelog all; } ORA-: control file record is out of ...
- 轻松搭建CAS 5.x系列(4)-Java客户端程序接入CAS单点登录,Hello World版
概述说明 按照本系列的前3篇文章描述的步骤,我们已经搭建好cas sso server.那应用程序怎么接入到实现sso呢? (如果您还没有搭建cas server,可以到<轻松搭建CAS 5.x ...
- Post请求数据传到后台+号变成了空格
问题: 今天遇到一个问题:页面带有"+"号的数据,传到服务端接口,结果+号变成了空格.例如:传“1+1”变成了"1 1". 解决办法: 方案一: 将“+”号替换 ...
- web.xml 转 学习!http://www.cnblogs.com/wkrbky/p/5929943.html
1.spring 框架解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name) 2.在web.xml配置监听器ContextLoaderListener(l ...
- vue,onerror实现当图片加载失败时使用默认图
1. 2.
- 【hadoop】细读MapReduce的工作原理
前言:中秋节有事外加休息了一天,今天晚上重新拾起Hadoop,但感觉自己有点烦躁,不知后续怎么选择学习Hadoop的方法. 干脆打开电脑,决定: 1.先将Hadoop的MapReduce和Yarn基本 ...
- 搭建nginx文件服务器
一.安装nginx服务 apt install nginx 二.修改nginx配置文件 cd /etc/nginx/conf.d/ vim download_server.conf server { ...
- Fillder的前后端的应用
测试需求:有一个功能,允许用钻石兑换金币,假设1钻石=1金币,前端控制一次至少兑换10个,最多100个,后台不做验证. 测试方案:输入10,也就是告诉前端我要兑换10个金币,等前端验证通过之后,截取要 ...
- BZOJ 4873 寿司餐厅 网络流
最大权闭合子图 1.每个区间收益(i,j)对应一个点 权值为正连S 负连T 2.每个区间收益向其子区间收益(i+1,j)与(i,j-1)对应的两个点连边 容量为INF 3.每个寿司类型对应一个点 连一 ...
- 华中校赛 14th
https://www.nowcoder.com/acm/contest/106#question A 分类讨论 #include<bits/stdc++.h> using namespa ...