数据库10:数据类型

数据库

十、数据类型(sql)

整型

在这里插入图片描述

  • 一个无符号数一定是非负数
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;

浮点型

在这里插入图片描述
定点数的位数更加长 使用方式:

  • 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)
);

字符串类型

在这里插入图片描述

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

枚举(enum)

多选一的时候使用的一种数据类型
在前端使用单选框的时候, 枚举类型可以发挥作用
枚举类型的优点:

  • 限制了可选值
  • 节省空间
  • 运行效率高
create table t6(
   name varchar(32),
   sex enum('男','女','保密') default '保密'
);
-- 枚举类型的计数默认从1开始
insert into t6 set name='王宝强',sex=1;

集合(set)

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

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

时间类型

在这里插入图片描述

  • 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');
  • 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'); -- 错误的
  • 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');  -
- 错误
  • 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'); -- 错误

布尔型

mysql中的bool类型也是1和0

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';  -- 失败

列的属性

  • 插入的值是否可以为空
    – 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
    – 默认值一般是和null做搭配的
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 '这个字段代表创建日期'
);

SQL注释

  • 单 注释: – 你好
  • 多行注释: /* 巴拉巴拉 */
  • MySQL 独有的单行注释: # 哈哈哈哈
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值