数据库(4)——MySQL数据类型及字段约束

这里将自己学习数据库的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。


一、MySQL数据类型

1.1 数值类型

MySQL中支持多种整型,其实很大程度上是相同的,只是存储值的大小范围不同而已。

  • tinyint:占用1个字节,相对于java中的byte

  • smallint:占用2个字节,相对于java中的short

  • int:占用4个字节,相对于java中的int

  • bigint:占用8个字节,相对于java中的long

其次是浮点类型即:floatdouble类型。

  • float4字节单精度浮点类型,相对于java中的float
  • double8字节双精度浮点类型,相对于java中的double

​​​​​​​​​​​​​​1.2 字符串类型

  • char(n)

定长字符串,最长255个字符。n表示字符数,例如:

-- 创建user表, 指定用户名为char类型,字符长度不超过10

create table user(

     username char(10),

    ...

);

在存储数据时,所占的空间是固定的,就是最大值,如果数据不足,后面会用空格来补全;

char类型适合存储长度固定的数据,比如学生编号,身份证号等,这样既不会有空间浪费,效率还会比varchar略高。

  • varchar(n)

变长字符串,最长不超过 65535个字节,n表示字符数,

一般超过255个字节,会使用text类型,例如:

-- 创建user表, 指定用户名为varchar类型,长度不超过10

create table user(

      username varchar(10)

);

在存储数据时,会根据数组的实际长度来存储,多余 / 剩余的空间会还给数据库;

varchar适合存储长度不固定的数据,虽然效率没有char类型高,但是不会有空间的浪费。

  • 大文本(长文本)类型

最长65535个字节,一般超过255个字符列的会使用text。另外,text也分多种,其中bigtext存储数据的长度约为4GB

-- 创建user表,

create table user(

     resume text

);

  • ​​​​​​​​​​​​​​​​​​​​​​​​​​​​小结一下:

​​​​​​​​​​​​​​charvarchartext都可以表示字符串类型,其区别在于:

(1) char在保存数据时,如果存入的字符串长度小于指定的长度n,后面会用空格补全。

(2) varchartext保存数据时,按数据的真实长度存储,剩余的空间可以留给别的数据用。

(3) char会造成空间浪费(不足指定长度的会用空格补全),但是由于不需要计算数据的长度,因此速度更快。(即以空间换时间

(4) varchartext是节省了空间,但是存储的速度不如char快,因为要计算数据的实际长度。(即以时间换空间

1.3 日期类型

  • date:年月日
  • time:时分秒
  • datetime:年月日 时分秒
  • timestamp:时间戳(实际存储的是一个时间毫秒值),与datetime存储日期格式相同,都是"年月日时分秒"。

(1)timestamp实际存储的是从1970年到指定日期的之间的时间毫秒值;

(2)timestamp最大表示2038年,而datetime范围是1000~9999;

(3)timestamp指定的列的值,在插入数、修改数据时,可以自动更新成系统当前时间。

二、字段(列)约束

创建表时, 除了要给每个列指定对应的数据类型, 有时也需要给列添加约束。

常见的约束有:主键约束、唯 一约束、非空约束、外键约束。

2.1 主键约束(primary key)

  • 主键是数据表中,一行记录的唯一标识。比如学生的编号,人的身份证号, 例如:

--创建user表,指定id为主键, 作为用户的唯一标识

create table stu(

     id int primary key,

     ...

);

主键的特点: 唯一且不能为空

  • 当主键为数值时,为了方便维护,可以设置主键为自增(auto_increment,例如:

--创建user表,指定id为主键, 并指定主键自增

create table user(

     id int primary key auto_increament,

     ...

);

自增的作用是,后期往表中插入记录时,自增的列可以不用插入值(插入null即可),数据库会自动插入值 (1,2,3…),例如:

insert into stu values(null, '张三','', '1999-1-10');

insert into stu values(null, '李四','', '2000-6-15');

注意:如果建表时没有指定主键自增, 也可以后期修改id为主键自增。

2.2 唯一约束(unique)

  • 保证所约束的列必须是唯一的,即不能重复出现,例如:用户注册时,保存的用户名不可以重复。例如:

--创建user表, 指定用户名不能重复

create table user(

     id int primary key auto_increament,

    username varchar(50) unique,

...

);

  • 唯一约束特点是不能重复!!但允许为空

​​​​​​​​​​​​​​​​​​​​​2.3 非空约束(not null)

  • 保证所约束的列必须是不为空的,即在插入记录时,该列必须要赋值,例如:用户注册时,保存的密码不能为空。例如:

--创建user, 指定密码不能为空

create table user(

     id int primary key auto_increament,

     username varchar(50) unique,

     password varchar(50) not null,

     ...

);

非空约束的特点是: 不能为空值, 即插入数据时该列必须得有值

2.4 外键约束

外键是用于表和表之间关系的列,我们在后面的博文里再展开。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值