一、数值类型

二、日期类型

三、枚举与集合

四、约束条件

五、设置严格模式

一、数值类型

1.1 整型

应用场景: id号、年龄...

tinyint:

有符号:默认范围 -128, 127

无符号:默认范围 0,255

#tinyint 默认有符号:
create table t1(id tinyint,
name varchar(16)
);
insert into t1 values(-128,'tank'),(127,'jason');
insert into t1 values(-129,'sean') #报错 select * from t1;
+------+-------+
| id | name |
+------+-------+
| -128 | tank | #有符号,最小值为-128
| 127 | jason | #有符号,最大值127
+------+-------+ #设置无符号tinyint
create table t2(id tinyint unsigned); insert into t2 values((-1)); #报错
insert into t2 values((0));
insert into t2 values((255));
insert into t2 values((256)); #报错 select * from t2;
+------+
| id |
+------+
| 0 | #无符号,最小值为0
| 255 | #无符号,最大值为255
+------+

int:

有符号:默认范围(-2147483648, 2147483647)

无符号:默认范围 (0,4294967295)

默认宽度为11

#int 默认有符号:
create table t3(id int); insert into t3 values(-2147483648);
insert into t3 values(-2147483649); #报错
insert into t3 values(2147483647);
insert into t3 values(2147483648); #报错 select * from t3;
+-------------+
| id |
+-------------+
| -2147483648 | #有符号,最小值为-2147483648
| 2147483647 | #有符号,最大值为2147483647
+-------------+ #设置无符号int
create table t4(id int unsigned) insert into t4 values((-1));
insert into t4 values((0));
insert into t4 values((4294967295));
insert into t4 values((4294967296)); select * from t4;
------------+
| id |
+------------+
| 0 | #无符号,最小值为0
| 4294967295 | #无符号,最大值为4294967295
+------------+

1.2 浮点型

应用场景:存储薪资、身高、体重、体质参数等

float :FLOAT[(M,D)] ,单精度浮点数(非准确小数值)

double:DOUBLE[(M,D)],双精度浮点数(非准确小数值)

以上两个的m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30

decimal:DECIMAL[(M,D)],准确的小数值

m最大值为65,d最大值为30。

# 范围255是最大长度(包括.小数), 30代表是小数的位数
create table t5(x float(255, 30));
create table t6(x double(255, 30));
create table t7(x decimal(65, 30)); # 三种浮点型: 区别在于精确度不一样
insert into t5 values(1.111111111111111111111111111111);
insert into t6 values(1.1111111111111111111111111111);
insert into t7 values(1.1111111111111111111111111111); #随着小数的增多,精度开始不准确
mysql> select * from t5;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111164093017600000000000000 | #精度比float要准确点,但随着小数的增多,同样变得不准确
mysql> select * from t6;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111200000000000000 | #精度始终准确,d为30,于是只留了30位小数
mysql> select * from t7;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111111111111111100 |
+----------------------------------+

1.4 字符串类型

char: 定长,简单粗暴,浪费空间,存取速度快。

字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)。

存储char类型的值时,会往右填充空格来满足长度

create table t8(id int,name char(4));

insert into t8 values(1, 'tank');
insert into t8 values(1, 't');
insert into t8 values(1, '你个大傻子'); #字符长度超过4报错 mysql> select * from t8;
+------+--------------+
| id | name |
+------+--------------+
| 1 | tank |
| 1 | t | # t+3个空格
+------+--------------+

varchar: 不定长字符,精准,节省空间,存取速度慢

存几个字符,就是几个字符的大小,每个字符前都要+1bytes

create table t9(id int, name varchar(4));

insert into t9 values(1, 'bob');  # 1bytes + bob
insert into t9 values(2, 'tank'); # 1bytes + tank
insert into t9 values(3, 'sean'); # 1bytes + sean
insert into t9 values(4, 'jason'); #报错 mysql> select * from t9;
+------+------+
| id | name |
+------+------+
| 1 | bob |
| 2 | tank |
| 3 | sean |
+------+------+

二、日期类型



例如:

date: 2019-12-11

datetime: 2019-12-11 11:11:11

time: 11:11:11

year: 2019

timestamp: 时间戳

注意:TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。

create table student(
id int,
name varchar(10),
birth date,
register datetime,
born_year year,
t_time time,
update_time timestamp
); insert into student values(1, 'baohan', '1996-06-23', '2019-12-12 11:11:11', '1996', '11:11:11', null);
insert into student values(2, 'HCY', '1000-11-11', '1980-11-11 11:11:11','2019', '11:11:11', null); mysql> select * from student;
+------+--------+------------+---------------------+-----------+----------+---------------------+
| id | name | birth | register | born_year | t_time | update_time |
+------+--------+------------+---------------------+-----------+----------+---------------------+
| 1 | baohan | 1996-06-23 | 2019-12-12 11:11:11 | 1996 | 11:11:11 | 2019-12-11 16:02:45 |
| 2 | HCY | 1000-11-11 | 1980-11-11 11:11:11 | 2019 | 11:11:11 | 2019-12-11 16:03:22 |
+------+--------+------------+---------------------+-----------+----------+---------------------+

三、枚举与集合

字段的值只能在给定范围中选择,如单选框,多选框

enum: 单选 只能在给定的范围内选一个值(多选一),如性别 sex 男male/女female

set : 多选 在给定的范围内可以选择一个或一个以上的值 ,如(爱好1,爱好2,爱好3...)

#enum:多选一
create table t10(id int, name varchar(4), gender enum('male', 'female', 'others')); # insert into 表名(字段名) values(字段名对应的值);
insert into t13(id, name, gender) values(1, 'tank', 'male');
insert into t13(id, name, gender) values(1, 'tank', '人妖'); #报错,‘人妖’不在范围内 mysql> select * from t10;
+------+------+--------+
| id | name | gender |
+------+------+--------+
| 1 | tank | male |
+------+------+--------+
#set 可 多选一 或 多选多
create table t11(
id int,
name varchar(4),
hobbies set('read', 'sing', 'run', 'think')
); insert into t11 values(1, 'bob', 'read,sing'); mysql> select * from t11;
+------+------+-----------+
| id | name | hobbies |
+------+------+-----------+
| 1 | bob | read,sing |
+------+------+-----------+

四、约束条件

初始约束条件:not null

#约束插入记录时id不能为空
create table t1(id int not null,name varchar(6)); insert into t1 values(1,'tank');
insert into t1 values(null,'tank'); #报错 mysql> select * from t1;
+----+------+
| id | name |
+----+------+
| 1 | tank |
+----+------+

unique: :唯一,将某个字段设置为唯一的值

create table t2(id int not null unique,name varchar(4));

insert into t2(id, name) values(1, 'tank'), (2, 'sean');
insert into t2(id, name) values(1, 'bob'); #报错,1已用过 +----+------+
| id | name |
+----+------+
| 1 | tank |
| 2 | sean |
+----+------+

primary key(主键)----> not null unique: pk就是表中的索引: 可以通过索引快速查找某些数据,提高查询效率。

# 将id设置为主键,非空且唯一
create table t3(id int primary key,name varchar(4)); insert into t3(id, name) values(1, 'tank');
insert into t3(id, name) values(2, 'sean');
insert into t3(id, name) values(1, 'bob'); #报错 mysql> desc t3;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+

auto_increment:自增

# 将id设置为自增
create table t4(id int primary key auto_increment,name varchar(4)); # 自增默认从0开始
insert into t4(name) values('tank');
insert into t4(name) values('sean');
insert into t4(name) values('bob');
insert into t4(name) values('哈哈哥'); mysql> select * from t4;
+----+-----------+
| id | name |
+----+-----------+
| 1 | tank |
| 2 | sean |
| 3 | bob |
| 4 | 哈哈哥 |
+----+-----------+ ## 若想自增从指定值开始,可插入第一条数据时先指定id的值;
insert into t4(id, name) values(10, 'tank');
insert into t4(name) values('sean'); # 11
insert into t4(name) values('bob'); # 12
insert into t4(name) values('哈哈哥'); # 13 mysql> select * from t4;
+----+-----------+
| id | name |
+----+-----------+
| 10 | tank |
| 11 | sean |
| 12 | bob |
| 13 | 哈哈哥 |
+----+-----------+

zerofill:使用0填充空格

create table t5(id int zerofill);

insert into t5 values(100);

mysql> select * from t5;
+------------+
| id |
+------------+
| 0000000100 |
+------------+

default:约束插入数据时的默认值

create table t7(id int,
name varchar(32) unique,
password varchar(255) default '000000'); insert into t7(id,name) values(1,'tank'); mysql> select * from t7;
+------+------+----------+
| id | name | password |
+------+------+----------+
| 1 | tank | 000000 |
+------+------+----------+

delete:清空表中所有记录:

truncate:清空表中的所有记录,并且id重置为0

#delete
create table t6(id int primary key auto_increment,name varchar(4)); insert into t6(name) values('tank');
insert into t6(name) values('大大大'), ('sean');
delete from t6;
insert into t6(name) values('tank');
insert into t6(name) values('大大大'), ('sean'); mysql> select * from t6;
+----+-----------+
| id | name |
+----+-----------+
| 4 | tank |
| 5 | 大大大 |
| 6 | sean |
+----+-----------+ #truncate
create table t6(id int primary key auto_increment,name varchar(4)); insert into t6(name) values('tank');
insert into t6(name) values('sean');
truncate table t6;
insert into t6(name) values('tank');
insert into t6(name) values('sean'); mysql> select * from t6;
+----+-----------+
| id | name |
+----+-----------+
| 1 | tank |
| 2 | sean |
+----+-----------+

五、设置严格模式

# 查看数据库配置中变量名包含mode的配置参数:
show variables like "%mode%"; # 修改安全模式:
set session; # 局部有效,只在你当前操作的窗口有效
set global session; # 全局有效,永久有效 # 修改完之后退出当前客户端重新登录即可,不用关闭服务端
set global sql_mode = 'STRICT_TRANS_TABLES';

Mysql 字段类型与约束条件的更多相关文章

  1. 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件

    字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...

  2. mysql配置与存储引擎与字段类型与约束条件

    目录 字符编码与配置文件 存储引擎 创建表的完整语法 字段类型 整型 浮点型 字符类型 数字的含义 枚举与集合 日期类型 约束条件 字符编码与配置文件 在MySQL5.X系列中,显示的字符编码有多种, ...

  3. MySQL字段类型与操作

    MYSQL字段类型与操作 字符编码与配置文件 操作 代码 功能 查看 \s 查看数据库基本信息(用户.字符编码) 配置(配置文件层面) my-default.ini windows下MySQL默认的配 ...

  4. (转)MySQL字段类型详解

    MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...

  5. MySQL 字段类型介绍

    MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...

  6. MySql 字段类型对应 Java 实体类型

    前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...

  7. django中模型详解-字段类型与约束条件

    这片博文来详细说明django模型的使用,涉及到django模型的创建,字段介绍,以及django模型的crud操作,以及一对一等操作. 在使用模型之前,我们首先设置数据库选项,django的默认数据 ...

  8. MySQL字段类型 约束

    目录 MySQL存储引擎 非空约束 字段类型 整形类型INT TINYINT 浮点类型float 字符类型char varchar 日期类型 枚举集合 约束条件 主键 自增 unsigned无符号 z ...

  9. Java JDBC中,MySQL字段类型到JAVA类型的转换

    1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射  java.sql.Types定义了常 ...

随机推荐

  1. 自动编码(AE)器的简单实现

    一.目录 自动编码(AE)器的简单实现 一.目录 二.自动编码器的发展简述 2.1 自动编码器(Auto-Encoders,AE) 2.2 降噪自编码(Denoising Auto-Encoders, ...

  2. MapReduce数据流-Mapper

  3. 阿里云DataV专业版发布,为可视化创造更多可能!

    阿里云数据可视化应用工具DataV正式推出专业版,该版本为可视化领域专业团队和从业者量身打造,定位数据可视分析大屏搭建场景,让使用者可以轻松hold住复杂交互设计和实时数据交互查询需求. 什么是Dat ...

  4. 【[Offer收割]编程练习赛9 D】 矩阵填数

    [题目链接]:http://hihocoder.com/problemset/problem/1480 [题意] [题解] 这是一道杨氏矩阵的题; 一个固定形状的杨氏矩阵的种类个数; 等于这个杨氏矩阵 ...

  5. 「POI2012」约会 Rendezvous

    #2691. 「POI2012」约会 Rendezvous 这题我简直不想说什么了,什么素质,卡常数…… “每个顶点有且仅有一条出边”,所以是一道基环树的题,首先tarjan缩点,在缩完点后的图上求a ...

  6. Java容易搞错的知识点

    一.关于Switch 代码: Java代码 1         public class TestSwitch { 2             public static void main(Stri ...

  7. 整理了一下 ThinkPHP 历史 (2019-07-01)

    整理了一下 ThinkPHP 历史 ThinkPHP 一款国内最流行的 PHP 开源框架. 版本 发布日期 最后更新日期 总天数 ThinkPHP(FCS) 0.6 2006-01-15 2006-0 ...

  8. js 过滤富文本标签数据

    var str = '<p><code>uni-app</code> 完整支持 <code>Vue</code> 实例的生命周期,同时还新增 ...

  9. js切割字符串

    var time_str= '2019-9-10 13:18:20'; var t = time_str.substr(2,8);   console.log(t);   输出  19-9-10

  10. 洛谷P5019 铺设道路 题解 模拟/贪心基础题

    题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把 ...