一、数值类型

二、日期类型

三、枚举与集合

四、约束条件

五、设置严格模式

一、数值类型

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. Java练习 SDUT-2272_Time

    Time Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description Digital clock use 4 digits to e ...

  2. 网上很多laravel中cookie的使用方法。

    https://blog.csdn.net/chen529834149/article/details/75244718 概述 Cookie的添加其实很简单,直接使用Cookie::make(),在使 ...

  3. php开发微信支付获取用户地址

    http://mp.weixin.qq.com/s/uNpWE_Z5RZ48PDIWkmGBYQ 使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能. 微信商城中,使用微信 ...

  4. saltStack 状态模块(状态间的关系)

    unless onlyif:状态间的条件判断,主要用于cmd状态模块 常用方法:    onlyif:检查的命令,仅当'onlyif'  选项指向的命令返回true时才执行name 定义的命 unle ...

  5. python selenium 处理悬浮窗口(baidu tj_more)

    python selenium 处理悬浮窗口 from selenium.webdriver.common.action_chains import ActionChainsActionChains( ...

  6. selenium webdriver学习(一)------------快速开始(转载JARVI)

    selenium webdriver学习(一)------------快速开始 博客分类: Selenium-webdriver selenium webdriver 学习 selenium webd ...

  7. EC round 33 D. Credit Card 贪心

    因为到为0的点,充钱的范围都是不确定的,我们维护一个满足条件的最小值以及满足条件的最大值. 当min>d时,代表已经满足条件限制了 当a[ i ] = 0 并且 max<0,代表需要充钱, ...

  8. vue项目配置同一局域网可使用ip访问

    1.检查 package.json文件,scripts.dev设置 host改成 "0.0.0.0" 2.config文件中找到 index.js 文件的host改成 " ...

  9. C++第三次作业:友元类

    友元类 将数据与处理数据的函数封装在一起,构成类,即实现了数据的共享又实现了隐藏,无疑是面向程序设计的一大优点,但是封装并不总是完美的,一旦需要涉及到一个类的两个对象的数据处理问题该怎么办?无论是设计 ...

  10. H3C IP及其相关协议