【数据库】MySQL中数据类型

数据类型

1.整型

在这里插入图片描述

  • 一个无符号数一定是非负数
create table t3(
   age tinyint unsigned
);
  • 显示宽度 (zerofill)
    整型显示宽度, 位数不足时用 0 填充
create table t4(
   id int(10) zerofill primary key auto_increment,
   name char(32)
);
insert into t4 values(12345, '5个');
insert into t4 values(1234567890, '10个');
insert into t4 values(123456789012, '12个');
select * from t4;

2.浮点型

在这里插入图片描述

定点数的位数更加长 使用方式:
float(M,D)
double(M,D)
decimal(M,D)
M 是支持多少个长度, D 是小数点后面的位数

create table t5 (
   a float(10, 2),
   b double(10, 2),
   c decimal(10, 2)
);

3. 字符串类型

在这里插入图片描述
CHAR 与 VARCHAR 类型的区别

在这里插入图片描述

思考:
字符串、浮点型等都可以随意指定大小, 那么是不是平时操作的时候随意指
定一个就可以呢?
答:不是, 数据类型并不是越大越好, 越大的类型会造成数据臃肿, 存储空间
占用过大, 数据检索也会变慢

4. 枚举(enum)

多选一的时候使用的一种数据类型
在前端使用单选框的时候, 枚举类型可以发挥作用
枚举类型的优点: 1. 限制了可选值
2. 节省空间
3. 运行效率高

create table t6(
   name varchar(32),
   sex enum('男','女','保密') default '保密'
);
-- 枚举类型的计数默认从1开始
insert into t6 set name='王宝强',sex=1;

5. 集合(set)

SET最多可以有64个不同的成员。类似于复选框, 有多少可以选多少。

create table t7 (
   name varchar(32),
   hobby set('吃','睡','玩','喝','抽')
);
insert into t7 values('张三','睡,抽,玩,吃,喝');
insert into t7 values('李四','睡,抽');
  • 为什么不是用 set 类型?
    在现代网站开发中, 多选框的值有上千个, 值存储的空没有索引用的多
  • 那复选框的问题怎么解决?
    将复选框的值单独设计成一张表

6. 时间类型

在这里插入图片描述

  1. datetime
create table datetime_test (
   create_at datetime
);
insert into datetime_test values('2019-4-2 16:54:00');
insert into datetime_test values('2019/4/2 16:54:00');
insert into datetime_test values(now());
-- 年份最大支持4个长度
insert into datetime_test values('10000/4/2 16:54:00');  --
错误
insert into datetime_test values('9999/4/2 16:54:00');

2.time

create table time_test (
   create_at time
);
insert into time_test values('12:12:12');
insert into time_test values('100:12:12');
insert into time_test values('-100:12:12');
insert into time_test values('10 10:12:12');
-- 时间的范围是: [-838:59:59 - 838:59:59]
insert into time_test values('839:12:12'); -- 错误的

3.timestamp 时间戳类型

时间戳类型在显示方面和datetime是一样的, 在存储上不一样
范围从 1970-1-1 0:0:0 到 2038-1-19 11:14:07
时间戳使用 4 个字节表示
该值大小与存储的位长有关: 2 ** (4 * 8 - 1)

create table timestamp_test (
   create_time timestamp
);
insert into timestamp_test values(now());
insert into timestamp_test values('2038-1-19 11:14:07');  -
- 时间戳最大值
insert into timestamp_test values('2038-1-19 11:14:08');  -
- 错误

4.year

create table `year`(
   create_at year
);
-- 从1900年开始 - 1900+255
insert into `year` values(now());
insert into `year` values('2155'); -- 年份最大值
insert into `year` values('2156'); -- 错误

7. 布尔型

create table `bool`(
   cond boolean
);
insert into `bool` set cond=True;    -- 成功
insert into `bool` set cond=False;   -- 成功
insert into `bool` set cond=1;       -- 成功
insert into `bool` set cond=10;      -- 成功
insert into `bool` set cond=-1;      -- 成功
insert into `bool` set cond=0;       -- 成功
insert into `bool` set cond=0.1;     -- 成功
insert into `bool` set cond='True';  -- 失败

8. 列的属性

插入的值是否可以为空

  • null : 是可以为空,默认不写
  • not null : 不可以为空,如果插入的时候,摸个字段的值为空,则报错
create table null_test (
   id int primary key auto_increment,
   username varchar(32) not null,
   pwd varchar(16) null
);
insert into null_test values(null,null,null);
  • default
create table default_test (
   id int primary key auto_increment,
   username varchar(32) default 'admin' not null,
   pwd varchar(16) default 123456
);
insert into default_test (username) values ('admin');
  • auto_increment
    自动增长的列
    默认从 1 开始
    常配合主键使用的
create table auto_inc (
   id int primary key auto_increment,
   name varchar(32)
);
insert into auto_inc (name) values ('aaa'), ('bbb'),
('ccc');
select * from auto_inc;
/* 输出:
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+----+------+
*/
  • primary key
    主键一般是唯一的标识
    特性:不能为空,也不能重复,一张表当中只可以拥有一个主键
-- 这里只有一个主键,这种主键叫做联合主键, 在项目中使用较少
create table double_pri_test (
   id int,
   sid int,
   primary key(id,sid)
);
insert into double_pri_test values (1, 1);
insert into double_pri_test values (1, 2);  -- 成功
insert into double_pri_test values (2, 1);  -- 成功
insert into double_pri_test values (1, 1);  -- 失败
  • unique
    唯一键,保证列当中的每一个数据都不重复
    邮箱不可以重复,手机号不可以重复
create table test_uniq (
   id int auto_increment primary key,
   mobile char(11) unique
);
insert into test_uniq set mobile=13999999999;
  • comment
    字段说明: 给开发者看的, 一般用来对相应字段进行说明
create table test_cmt (
   ctime datetime comment '这个字段代表创建日期'
);

9. SQL注释

单行注释: – 你好
多行注释: /* 巴拉巴拉 */
MySQL 独有的单行注释: # 哈哈哈哈

发布了116 篇原创文章 · 获赞 10 · 访问量 1358

猜你喜欢

转载自blog.csdn.net/weixin_44727383/article/details/104979186