数据类型

  数据库mysql中也是分很多数据类型的,最常用的就是:数字类型、字符类型、日期类型、枚举与集合类型

一、数字类型:

  默认都是有符号的,即正负号,若想无符号,在创建表时加unsigned。指定宽度时,只影响显示宽度不影响存储,即只决定读不决定写。

注:其实我们完全没必要为整数类型指定显示宽度,使用默认的就可以了

  最常用的是int,常用的一般是tinyint和int

  tinyint:1个字节,有符号时可存(-128~127),无符号时可存(0~255),超过范围的数存成最大范围的那个数

  smallint:2个字节,有符号时可存(-2^15~2^15 -1),无符号时可存(0~2^16 -1)

  mediumint:3个字节,有符号时可存(-2^23~2^23 -1),无符号时可存(0~2^24 -1)

  int:4个字节,有符号是可存(-2^31~2^31 -1),无符号是可存(0~2^32 -1)

  bigint:8个字节,有符号时可存(-2^63~2^63 -1),无符号时可存(0~2^64 -1)

  另外还有浮点型:float、double和decimal

  float和double不精准,超过精准范围的小数会被削为0,但在日常情况下已足够使用。decimal是精准浮点数,但比较消耗内存,所以在一般情况下建议使用float。格式为float(x,y),其中的x代表数字总个数不算符号,y代表保留的小数点位数

  bit类型:用来存放二进制数,范围为1~64,不指定则默认1位

create table t1(id bit);#bit后可加括号指定范围,不指定默认为1
insert into t1 values(8);#在表中添加一个8
select bin(id),hex(id),oct(id) from t1;#查看时需要转换一下进制,需要什么进制呈现就用相应的函数

二、字符类型:宽度约束的是字符的个数

  char:定长,不够宽度时用空格补齐。字符长度范围:0~255

    特点:存取效率快,但浪费空间。存储时会在右侧填充空格以满足指定长度,但在查询时有自动删除空格。

  varchar:变长,在指定宽度内存什么就是什么。字符长度范围:0~65535

    特点:精准,节省空间但存储效率较慢。

注:虽然varchar更精准,但一般都是用char多一点,毕竟在精准度要求并没有特别高的情况下效率比较重要

#查看字符的长度
select x,char_length(x) from t1; #查看字节的长度(utf-8中一个中文字符占三个字节)
select x,length(x) from t1; #以上方式查看时,char会自动删除空格,需在查询前指定
set sql_mode='pad_char_to_full_length';
#才可以将char类型的数据完整的查看 #举例:
create table t1(name1 char(10),name2 varchar(5));
insert into t1 values('ladygaga','egon');
select name1,char_length(name1),nam2,char_length(name2) from t1;
select name1,length(name1),nam2,length(name2) from t1;
#查询结果为8,4
#指定set sql_mode='pad_char_to_full_length';后查询结果为10,4

三、时间类型:根据不同的需求选择不同的时间类型

  datetime:yyyy-mm-dd hh:mm:ss  范围为1000-01-01 00:00:00~9999-12-31 23:59:59

  year:yyyy  范围为1901~2155,无论指定何种宽度,最后都是4

  date:yyyy-mm-dd  范围为1000-01-01~9999-12-31

  time:hh:mm:ss

  单独插入时间时需要以字符的形式,按照对应格式。插入年份时尽量使用4位值,如果用两位的话需要知道:当输入的2位<=69时,显示为20xx;当输入的的2位>=70时,显示为19xx。

举例:

create table t2(id int,born_date date,born_year year,reg_time datetime,class_time time);
insert into t2 values(1,'alex',now(),now(),now(),now());#now()函数自动插入当前时间
insert into t2 values(2,'egon','2017-09-11','','2017-09-11 17:17:17','17:17:17');#标准形式
insert into t2 values(3,'eva','','','','');#这种形式也支持

 四、枚举与集合: 字段只能在给定的范围内选择。枚举enum为单选,集合set为多选,可设定默认值

举例说明

create table t3 (id int primary key auto_increment,#自增id
name=char(5),
sex enum('male','female'),#枚举,二选一
hobbies set('eat','sleep','run','sing')#集合,多选
);
insert into t3 (name,sex,hobbies) values('egon','male','eat,sleep');

完整性约束

  not null 和null:不为空和可为空,创建时指定,不指定时默认为可空

  default:设置默认值的关键字,用来设置不传值时的默认值。若字段设置了默认值,插入空时填入的就是默认值

  unique:标识该字段是唯一的

#方法一:
create table t4(name char(10) unique); #方法二:
create table t5(name char(10),constraint uk_name unique(name)); #联合唯一:表示多个字段联合唯一,只要有一个字段不同即可插入,只有在所有字段都相同是才不可插入
create t6(id int,name char(10),host char(20) not null,port int not null,unique(host,port));
#将host和port联合唯一,若host和port都一样则不准插入
insert into t6(1,'mao',192.168.0.0',8080);
insert into t6(2,'gou',192.168.0.1',8080);
insert into t6(3,'zhu',192.168.0.1',8081);#都可插入
insert into t6(4,'ji',192.168.0.1',8081);#不可插入

primary key:主键,不为空且唯一

#方法一:
create table t7(id int not null unique);#遵循不为空且唯一,但不是主键的正确表达式
#方法二:
create table t7(id int primary key);
#方法三:
create table t7(id int,constraint pk_name primary key(id));

auto_increment:自增,被约束字段必须同时被key约束。对于自增的字段,delete删除后再插入值,该字段扔按照删除前的位置继续增长

  auto_increment_offset:偏移量,默认值为1

  auto_increment_increment:步长,默认值为1

  全局范围内设置步长set global auto_increment_increment=2;

  当前会话范围内设置步长set session auto_increment_increment=2;

  同时设置偏移量和步长的情况下,若偏移量的值>步长的值,则偏移量的值就会被忽略,即失效,即偏移量=1

foreign key:外键,用于表的关联(重点!查询语句中最难点)

  当有多张表,表1的多条记录可以对应到表2的一条记录时,就可以将其关联起来。此时必须保证表2的该记录是唯一的。

  可以一对一关联,也可以多对一关联,多对多关联

举例:将下面的表进行相应的关联

要求:学生表关联班级表,课程表关联老师表,成绩表关联所有表

注:先建立父表,即要被关联的表,再建立子表并建立外键关联父表,同步更新on update cascade,同步删除on delete cascade。插入记录时先操作父表,再操作字表。

 

MySQL中的数据类型以及完整性约束的更多相关文章

  1. 存储引擎和表的操作(mysql中的数据类型、完整性约束)

    一.存储引擎 .概念 MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. 通过选择不同的技术 ...

  2. MySQL中的数据类型及创建

    MySQL创建: 1.创建数据库create database test2; 2.删除数据库drop database test2;3.创建表create table ceshi(    ids in ...

  3. 【个人笔记】《知了堂》MySQL中的数据类型

    MySQL中的数据类型 1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) ...

  4. MySQL中各种数据类型的长度及在开发中如何选择

    接触MySQL这个数据库大概快要两年了,不过由于没有特别深入系统的去学习,大多也是停留在一知半解的状态.今天在工作中刚好碰到了表设计的问题,顺便写篇博客,把MySQL中数据类型和字段类型选择这方面给弄 ...

  5. Sql Server中的数据类型和Mysql中的数据类型的对应关系(转)

    Sql Server中的数据类型和Mysql中的数据类型的对应关系(转):https://blog.csdn.net/lilong329329/article/details/78899477 一.S ...

  6. MySQL中的数据类型 [数值型、字符串型、时间日期型]

    MySQL中的数据类型 [数值型.字符串型.时间日期型] MySQL中各数据类型 1. 数值类型(整型) 类型 数据大小 类型 (无符号:unsigned) 数据大小 存储空间 tinyint -12 ...

  7. 存储引擎,MySQL中的数据类型及约束

    存储引擎,MySQL中的数据类型及约束 一.存储引擎 1.不同的数据应该有不同的处理机制 2.mysql存储引擎 ​ Innodb:默认的存储引擎,查询速度叫myisam慢,但是更安全 ​ 支持事务, ...

  8. mysql中的数据类型长度

    “mysql中的数据类型长度是固定的 数据类型后面改的只是展示长度 没用的 int就是四个字节 2的31次方减一是最大值 所以改这个长度没用 只能改数据类型”

  9. 抛砖系列之-MySQL中的数据类型JSON

    今天介绍一个MySQL中的数据类型-JSON,相信大家对JSON都不陌生,在日常工作中使用到的频率也很高,话不多说,直接开始. 何谓JSON 看下RFC文档对于JSON的描述 1.基于 JavaScr ...

随机推荐

  1. [hive] hiveql 基础操作

    1. 显示当前的数据库信息 直接修改hive.site.xml ,永久显示 2. 建表,模糊显示表信息 drop  table   表名称: --删除表 show tables ;--显示所有表 sh ...

  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验五:按键模块④ — 点击,长点击,双击

    实验五:按键模块④ - 点击,长点击,双击 实验二至实验四,我们一共完成如下有效按键: l 点击(按下有效) l 点击(释放有效) l 长击(长按下有效) l 双击(连续按下有效) 然而,不管哪个实验 ...

  3. C++判断是否连接服务器

    BOOL CheckServerStatus::isConnectServer(CString serverName, int serverPort) { CString strURL; strURL ...

  4. pfSense软件防火墙安装配置

    一,说明 1.1 pfSense是什么 pfSense是基于FreeBSD的.开源中最为可靠(World's Most Trusted Open Source Firewall)的.可与商业级防火墙一 ...

  5. WebLogic初学笔记

    这两天在公司自己摸索着用WebLogic(因为可以问的同事不多),之前一直用的是tomcat.面对一个从不了解的技术,自己摸索似乎非常背劲.后来有同事指点果然事半功倍. 项目使用WebLogic版本: ...

  6. 洛谷P1098 字符串的展开【字符串】【模拟】

    题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数 ...

  7. Luogu 3369 / BZOJ 3224 - 普通平衡树 - [无旋Treap]

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3224 https://www.luogu.org/problemnew/show/P3 ...

  8. CH 4401/Luogu 4168 - 蒲公英 - [分块]

    题目链接:传送门 题目链接:https://www.luogu.org/problemnew/show/P4168 题解: 经典的在线求区间众数的问题,由于区间众数不满足区间可加性,所以考虑分块,假设 ...

  9. Java并发编程的4个同步辅助类(CountDownLatch、CyclicBarrier、Semphore、Phaser)

    我在<jdk1.5引入的concurrent包>中,曾经介绍过CountDownLatch.CyclicBarrier两个类,还给出了CountDownLatch的演示案例.这里再系统总结 ...

  10. SQLServer 查询数据死锁语句

    SQLServer 查询数据死锁语句   我们可以通过以下SQL 语句用来查询,当前数据中存在的死锁语句,定位数据库出现死锁的根本原因.   --每秒死锁数量 SELECT * FROM sys.dm ...