这里将自己学习数据库的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。
一、MySQL数据类型
1.1 数值类型
MySQL中支持多种整型,其实很大程度上是相同的,只是存储值的大小范围不同而已。
-
tinyint:占用1个字节,相对于java中的byte
-
smallint:占用2个字节,相对于java中的short
-
int:占用4个字节,相对于java中的int
-
bigint:占用8个字节,相对于java中的long
其次是浮点类型即:float和double类型。
- float:4字节单精度浮点类型,相对于java中的float
- double:8字节双精度浮点类型,相对于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
);
- 小结一下:
char、varchar、text都可以表示字符串类型,其区别在于:
(1) char在保存数据时,如果存入的字符串长度小于指定的长度n,后面会用空格补全。
(2) varchar和text保存数据时,按数据的真实长度存储,剩余的空间可以留给别的数据用。
(3) char会造成空间浪费(不足指定长度的会用空格补全),但是由于不需要计算数据的长度,因此速度更快。(即以空间换时间)
(4) varchar和text是节省了空间,但是存储的速度不如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 外键约束
外键是用于表和表之间关系的列,我们在后面的博文里再展开。