mysql----数据类型

mysql数据类型
数据类型分类:数值类型   字符类型   日期时间类型   枚举类型
每种类型都有对应的命令表示、有具体的存储范围
比如存储: 身高 、 体重  、 工资  、  奖金 适合使用数值类型 
比如存储: 姓名 、  家庭地址 、 收货地址   适合使用字符类型 
比如存储: 生日 、  出生年份 、 入职时间  、  下班时间 、 注册时间   适合使用日期时间
比如存储: 爱好 、  性别 、 社保医院   适合使用枚举类型

3.1 字符类型    (存储汉字或英文字母)
char    定长类型(固定长度)      存储范围 1-255字符
varchar 变长类型(长度不固定)    存储范围 1-65535字符 (实际存储范围1-65532)
				
一个英文字母 是一个字符
一个汉字也是一个字符

  
char 和 varchar 共同点  都不能超出指定的字符个数
char 和 varchar 不同点  存储的字符个数小于指定的字符个数时处理的方式不一样,具体如下:
姓名   char(3)
a      补2个空格 凑够定义字符个数3
ab     补1个空格 凑够定义字符个数3
abc    正好够定义字符个数3  不补空格
adbc   超出了定义字符个数3  报错不让存

姓名  varchar(3) 
a     不会补空格 直接就存a
ab    不会补空格 直接就存ab
abc   不会补空格 直接就存abc
adbc  超出了定义字符个数3 报错不让存
例子
建表
mysql> create  table   studb.t2(name   char(3) , address   varchar(5) );

查看表头
mysql> desc studb.t2;
+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| name    | char(3)    | YES  |     | NULL    |       |
| address | varchar(5) | YES  |     | NULL    |       |
+---------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


插入记录
mysql> insert into studb.t2 values ("a","a");
mysql> insert into studb.t2 values ("ab","ab");
mysql> insert into studb.t2 values ("abc","abc");

超出字符个数报错
mysql> insert into studb.t2 values ("abcd","abcd"); 
ERROR 1406 (22001): Data too long for column 'name' at row 1

默认不允许表头存储中文  要存储中文 建表 要指定表使用中文字符集

例子
#查看表使用的字符集
mysql> show create table studb.t1 \G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `level` tinyint(3) unsigned DEFAULT NULL,
  `money` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1  西欧字符编码
1 row in set (0.00 sec)
说明 :
ENGINE=InnoDB  定义存储引擎(存储引擎后边课程讲) 
DEFAULT   CHARSET=latin1 定义字符集 (默认字符集是 latin1  西方国家使用的字符编码)

#建表时指定表使用的字符集 utf8  
mysql> create  table  studb.t3( 
name  char(3) , address  varchar(10) 
)  default  charset  utf8;

查看字符集
mysql> show create table studb.t3 \G
*************************** 1. row ***************************
       Table: t3
Create Table: CREATE TABLE `t3` (
  `name` char(3) DEFAULT NULL,
  `address` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


查看表头
mysql> desc studb.t3;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | char(3)     | YES  |     | NULL    |       |
| address | varchar(10) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

插入记录
mysql> insert into studb.t3 values ("张翠山","武当山");
mysql> insert into studb.t3 values ("张三丰","武当山");

查看表记录
mysql> select  * from studb.t3;
+-----------+-----------+
| name      | address   |
+-----------+-----------+
| 张翠山    | 武当山    |
| 张真人    | 武当山    |
+-----------+-----------+
2 rows in set (0.00 sec)

其他字符类型:用来存储视频、音频、图片、较大的文本
类  型	名称	范围
tinytext	短文本	0-255字节
tinyblob	二进制形式短文本字	0-255字节
text	长文本数据	0-65535字节
blob	二进制形式的长文本	0-65535字节
mediumblob	二进制形式的中等长度文本	0-16777215字节
mediumtext	中等长度文本数据	0-16777215字节
longblob	二进制形式极大文本	0-4284867295字节
longtext	极大文本	0-4284867295字节


3.2 数值类型   :表头存储数字,分为 整数类型 和 浮点类型 2种   
整数类型(能存储正整数和负整数的类型) 例如  23(正整数)    -23(负整数)
每种整数类型分为无符号存储范围和有符号存储范围	 
无符号存储范围起始数字从 数字零开始
有符号存储范围  可以存储负数
使用unsigned 命令定义使用数值类型的无符号存储范围
整数类型不存储小数,如果数字有小数的话会把小数部分四舍五入后只保存整数部分
 | 类  型 	| 名称	  | 有符号范围	 | 无符号范围 |
 | tinyint	| 微小整数 |	-128~127	 |  0 ~ 255  | 
 | smallint	| 小整数   |-32768~32767	 | 0 ~ 65535 |
 |mediumint |中整型	  |-223 ~ 223-1  |0 ~ 224-1  |
 |int	    |大整型	  |-231 ~ 231-1  |0 ~ 232-1  |
 |bigint	|极大整型  |-263 ~ 263-1  |0 ~ 264-1  |
  unsigned	使用无符号存储范围

浮点类型(存储小数)  例如  23.22 
类  型	名称	范围
float	单精度	 8位精度(4字节)
double	双精度	16位精度(8字节)

#####################################################
例子
mysql> create table st1(级别 tinyint unsigned , 游戏币的钱数 double ) default charset utf8 ;
Query OK, 0 rows affected (0.00 sec)

mysql> desc st1;
+--------------------+---------------------+------+-----+---------+-------+
| Field              | Type                | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+-------+
| 级别               | tinyint(3) unsigned | YES  |     | NULL    |       |
| 游戏币的钱数       | double              | YES  |     | NULL    |       |
+--------------------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into st1 values(12,34 );
Query OK, 1 row affected (0.01 sec)


mysql> select * from st1 ;
+--------+--------------------+
| 级别   | 游戏币的钱数       |
+--------+--------------------+
|     12 |                 34 |
+--------+--------------------+
1 row in set (0.00 sec)
################################################
##################################################
3.3 枚举类型    表头值必须在类型规定的范围内选择
单选     enum(值1,值2,值3 ....) 只能选项范围内的任意一个
多选      set(值1,值2,值3 ....) 选项范围内的一个或多个


mysql> alter table st1 add  姓名 char(20) first ;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table st1 add 性别 enum("男","女" );
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc st1 ;
+--------------------+---------------------+------+-----+---------+-------+
| Field              | Type                | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+-------+
| 姓名               | char(20)            | YES  |     | NULL    |       |
| 级别               | tinyint(3) unsigned | YES  |     | NULL    |       |
| 游戏币的钱数       | double              | YES  |     | NULL    |       |
| 性别               | enum('男','女')     | YES  |     | NULL    |       |
+--------------------+---------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
##############################
#############################

3.4 日期时间类型  存储日期时间格式的数据
类  型   	名称  	范围   	   赋值格式
year	     年	   1901~2155	例如 2022
date	     日期	0001-01-01
                    9999-12-31	例如 20220318
time	 时间	01:00:00
23:59:59	例如  091858
datetime	日期时间	1000-01-01 00:00:00~ 
9999-12-31  23:59:59	例如
20220819153819
timestamp		1970-01-01 00:00:00
2038-01-19  00:00:00	


mysql> create table st5(姓名  char(10),生日  date,出生年份 year,家庭聚会  dateti                                                                                                           me ,聚会地点  varchar(15),上班时间 time ) default charset utf8;
Query OK, 0 rows affected (0.05 sec)

mysql> desc st5;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 姓名         | char(10)    | YES  |     | NULL    |       |
| 生日         | date        | YES  |     | NULL    |       |
| 出生年份     | year(4)     | YES  |     | NULL    |       |
| 家庭聚会     | datetime    | YES  |     | NULL    |       |
| 聚会地点     | varchar(15) | YES  |     | NULL    |       |
| 上班时间     | time        | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
mysql> insert into st5 values("翠花",20211120,1990,20220101183000,"吃的好",09000                                                                                                           0 );
Query OK, 1 row affected (0.00 sec)
mysql> mysql> select * from st5;
+--------+------------+--------------+---------------------+--------------+--------------+
| 姓名   | 生日       | 出生年份     | 家庭聚会            | 聚会地点     | 上班时间     |
+--------+------------+--------------+---------------------+--------------+--------------+
| 翠花   | 2021-11-20 |         1990 | 2022-01-01 18:30:00 | 吃的好       | 09:00:00     |
+--------+------------+--------------+---------------------+--------------+--------------+
1 row in set (0.00 sec)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值