MySQL字段类型 约束
目录
MySQL存储引擎
什么是存储引擎?
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。用于根据不同的机制处理不同的数据
提示:InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),行锁定 和 外键。( 事务主要用于处理操作量大,复杂度高的数据)
MySQL 5.5.5 之后,InnoDB 作为默认存储引擎。
查看MySQL中所有引擎
show engines
create table t1(id int)engines=innodb; #创建引擎为innodb的表
myisam:5.5以前老的版本使用的存储引擎,拥有较高的插入,查询速度,但不支持事物
blackhole:类似于队列中的数据,存进去消失
memory:通电数据存在,断电丢失
创建表完整的语法
约束条件:可有可无
宽度:限制某些数据类型的存储大小
非空约束
在创建表时可以用NOT NULL关键字设置非空约束
<字段名><数据类型> NOT NULL
实例:
mysql> create table t6(
id int not null
);
Query OK, 0 rows affected (0.25 sec)
mysql> desc t6;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
+-------+---------+------+-----+---------+-------+
字段类型
整形类型INT TINYINT
SMALLINT MEDIUMINT BIGINT
整形类型又称数值型数据,主要用来存储数字。
| 类型名称 | 说明 | 存储需求 |
|---|---|---|
| TINYINT | 很小的整数 | 1个字节 |
| SMALLINT | 小的整数 | 2个宇节 |
| MEDIUMINT | 中等大小的整数 | 3个字节 |
| INT (INTEGHR) | 普通大小的整数 | 4个字节 |
| BIGINT | 大整数 | 8个字节 |
从上表中可以看到,不同类型的整数存储所需的字节数不相同,占用字节数最小的是 TINYINT 类型,占用字节最大的是 BIGINT 类型,占用的字节越多的类型所能表示的数值范围越大。
| 类型名称 | 说明 | 存储需求 |
|---|---|---|
| TINYINT | -128〜127 | 0 〜255 |
| SMALLINT | -32768〜32767 | 0〜65535 |
| MEDIUMINT | -8388608〜8388607 | 0〜16777215 |
| INT (INTEGER) | -2147483648〜2147483647 | 0〜4294967295 |
| BIGINT | -9223372036854775808〜9223372036854775807 | 0〜18446744073709551615 |
实例:tinyint 范围 -128〜127
create table t7(
id tinyint
);
实例:int 范围 -2147483648〜2147483647
create table t8(
id int
);
若插入超过设定宽度,则正常显示
若插入不足,则以空格不全
浮点类型float
DOUBLE 双精度浮点数
DECIMAL 压缩的“严格”定点数
三种浮点型的区别在于 精确到不一样
应用场景:工资,身高,体重。。。
实例:
create table t9(sal float(255,30)) #范围255是最大长度(包括.小数),30代表的是小数的位数
字符类型char varchar
| 类型名称 | 说明 | 存储需求 |
|---|---|---|
| CHAR(M) | 固定长度非二进制字符串 | M 字节,1<=M<=255 |
| VARCHAR(M) | 变长非二进制字符串 | L+1字节,在此,L< = M和 1<=M<=255 |
| TINYTEXT | 非常小的非二进制字符串 | L+1字节,在此,L<2^8 |
| TEXT | 小的非二进制字符串 | L+2字节,在此,L<2^16 |
| MEDIUMTEXT | 中等大小的非二进制字符串 | L+3字节,在此,L<2^24 |
| LONGTEXT | 大的非二进制字符串 | L+4字节,在此,L<2^32 |
| ENUM | 枚举类型,只能有一个枚举字符串值 | 1或2个字节,取决于枚举值的数目 (最大值为65535) |
| SET | 一个设置,字符串对象可以有零个或 多个SET成员 | 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) |
CHAR(M) 为固定长度字符串,应用场景:手机号,身份证,银行卡号。。。
长度范围是 0~255. 当你想要储存一个长度不足 255 的字符时,Mysql 会用空格来填充剩下的字符
优点:速度快
缺点:浪费空间
VARCHAR()为可变字符类型,存几个字符,就是几个字符的大小,每个字符前都要+1bytes,最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1。
优点:节省空间
TEXT() 保存非二进制字符串,如文章内容、评论等。当保存或查询 TEXT 列的值时,不删除尾部空格。
与 char 和 varchar 不同的是,text 不可以有默认值,其最大长度是 2 的 16 次方-1
日期类型
每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。
| 类型名称 | 日期格式 | 日期范围 | 存储需求 |
|---|---|---|---|
| YEAR | YYYY | 1901 ~ 2155 | 1 个字节 |
| TIME | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3 个字节 |
| DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-3 | 3 个字节 |
| DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 个字节 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4 个字节 |
date:2019-12-11
datetime:2019-12-11 15:50:55
time:15:50:55
year:2019
timestamp:时间戳
时间戳实例:
mysql> insert into t11 values(1,null);
Query OK, 1 row affected (0.04 sec)
mysql> select * from t11;
+------+---------------------+
| id | create_time |
+------+---------------------+
| 1 | 2019-12-11 15:53:24 |
+------+---------------------+
create table student(
id int,
name varchar(4),
birth date,
register datetime,
work_time year,
t_time time,
update_time timestamp
);
python 插入时间数据时,转成str类型
枚举集合
enum:多选一
create table t12(
id int,
name varchar(10),
gender enum('male','female')
);
mysql> insert into t12 values(1,'letin','male');
Query OK, 1 row affected (0.05 sec)
set:多选一 或 多选多
create table t13(
id int,
name varchar(10),
hobbies set('swimming','game','study')
);
mysql> insert into t13 values(1,'letin','swimming,game,study');
Query OK, 1 row affected (0.06 sec)
mysql> select * from t13;
+------+-------+---------------------+
| id | name | hobbies |
+------+-------+---------------------+
| 1 | letin | swimming,game,read |
+------+-------+---------------------+
1 row in set (0.00 sec)
约束条件
unique将某个字段设置为唯一的值
not + null + unique 变为主键
create table t14(
id int not null unique,
name varchar(10)
);
mysql> insert into t14 values(1,'letin');
Query OK, 1 row affected (0.05 sec)
mysql> insert into t14 values(1,'leiting');
ERROR 1062 (23000): Duplicate entry '1' for key 'id' #id设置了唯一,重复后会报错
主键 自增
primary key-–-–-–>not null unique
主键就是表中的索引:可以通过索引快速查找某些数据
主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:
- 每个表只能定义一个主键。
- 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值
主键实例:
mysql> create table t15(
-> id int primary key,
-> name varchar(10)
-> );
Query OK, 0 rows affected (0.19 sec)
主键自增实例:primary key auto_increment
mysql> create table t16(
-> id int primary key auto_increment,
-> name varchar(10)
-> );
Query OK, 0 rows affected (0.20 sec)
mysql> desc t16;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
自增默认从1开始
mysql> insert into t16(name) values('letin');
Query OK, 1 row affected (0.04 sec)
unsigned无符号
mysql> create table t17(
-> id int unsigned
-> );
Query OK, 0 rows affected (0.19 sec)
插入数字是不能带符号
zerofill使用0填充
mysql> create table t18(
-> id int zerofill
-> );
Query OK, 0 rows affected (0.22 sec)
mysql> insert into t18 values(100);
Query OK, 1 row affected (0.04 sec)
mysql> select * from t18;
+------------+
| id |
+------------+
| 0000000100 |
+------------+
1 row in set (0.00 sec)
删除记录
delete 清空记录,id还是接着清除前的数字
mysql> delete from t18;
Query OK, 1 row affected (0.04 sec)
mysql> select * from t18;
Empty set (0.00 sec)
mysql> desc t18;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| id | int(10) unsigned zerofill | YES | | NULL | |
+-------+---------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)
truncate清空多有记录,并且id重置为0
truncate table t20;
MySQL字段类型 约束的更多相关文章
- (转)MySQL字段类型详解
MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...
- MySQL 字段类型介绍
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- MySql 字段类型对应 Java 实体类型
前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...
- MySQL字段类型与操作
MYSQL字段类型与操作 字符编码与配置文件 操作 代码 功能 查看 \s 查看数据库基本信息(用户.字符编码) 配置(配置文件层面) my-default.ini windows下MySQL默认的配 ...
- Java JDBC中,MySQL字段类型到JAVA类型的转换
1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射 java.sql.Types定义了常 ...
- Mysql字段类型与合理选择
字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许 ...
- MySql字段类型及字节
字段类型:TINYINT-----------------一个很小的整数.有符号的范围是-128到127,无符号的范围是0到255. SMALLINT--------------一个小整数.有符号的范 ...
- MySQL字段类型最全解析
前言: 要了解一个数据库,我们必须了解其支持的数据类型.MySQL 支持大量的字段类型,其中常用的也有很多.前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇 ...
- 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件
字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...
随机推荐
- lanyu 激活idea
编辑 C:\Windows\System32\drivers\etc\hosts 文件,最后面加入下面两行 0.0.0.0 account.jetbrains.com 0.0.0.0 www.jetb ...
- 爬虫——爬取Ajax动态加载网页
常见的反爬机制及处理方式 1.Headers反爬虫 :Cookie.Referer.User-Agent 解决方案: 通过F12获取headers,传给requests.get()方法 2.IP限制 ...
- vs中 Stack around the variable 'XXX' was corrupted.
https://blog.csdn.net/hou09tian/article/details/75042206 把 project->配置属性->c/c++->代码生成->基 ...
- NXP官方ddr_stress_tester工具使用
1.前言 NXP官方提供了一个DDR初始化工具,名称为ddr_stress_tester,该工具具有以下特点: 该工具能通过USB OTG接口与目标板进行连接,通过USB OTG接口完成DDR的初始化 ...
- 一致性hash应用-分表扩容
之前给项目里的一个5000多万的表做了水平分表,暂时容量还够,用的根据id一致性hash分了32个表,每个表大概百来万数据.虽然还不需要扩容,但是准备写个demo后续如果需要扩容可以参考 hash方法 ...
- 5种mysql日志分析工具比拼
5种mysql日志分析工具比拼 摘自: linux.chinaitlab.com 被阅读次数: 79 由 yangyi 于 2009-08-13 22:18:05 提供 mysql slow log ...
- winfrom 获取焦点控件
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Win ...
- ASP.NET Core MVC 之依赖注入 View
ASP.NET Core 支持在试图中使用依赖注入.这将有助于提供视图专用的服务,比如本地化或者仅用于填充视图元素的数据.应尽量保持控制器和视图之间的关注点分离.视图所显示的大部分数据应该从控制器传入 ...
- 纯C语言实现顺序栈
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int SElemType; typede ...
- Java自学-集合框架 Collections
Java集合框架 工具类Collections Collections是一个类,容器的工具类,就如同Arrays是数组的工具类 步骤 1 : 反转 reverse 使List中的数据发生翻转 pack ...