数据库学习笔记(6)——常见的数据类型、常见约束、标识列

数据库学习笔记(6)——常见的数据类型

1.常见的数据类型

1.数值型:
	(1)整型
	(2)小数
		定点数
		浮点数
2.字符型:
	(1)较短的文本(charvarchar)
	(2)较长的文本(textblob3.日期型


#一.整型
分类:
tinyint1)、smallint2)、mediumint3)、int/integer(4)bigint(8)
特点:
①:如果没有设置无符号还是有符号,默认为有符号,如果想设置无符号,需要添加关键字unsigned;
②:如果插入的数超多临界值,会报out of range 异常,并且赋值为临界值。
③:如果不设置长度,会有默认的长度,长度代表了默认的最大显示宽度,如果不够会用0在左侧填充,但必须搭配zerofill使用。

#二.小数
分类:
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
特点:
①M和D
M:整数部位+小数部位
D:小数部位
如果超过范围,则会插入临界值
②:M和D都可以省略
如果是decimal,则默认M为10,D为0;如果是floatdouble则会根据插入的数值的精度来决定精度
③:定点型的精度较高,若需求较高的精度则我们使用定点型。

#原则:
所选择的类型越简单越好,能保存的数值越小越好。

#三.字符型
较短的文本:
char
varchar
较长的文本:
text
blob(较长的二进制)

特点:
		写法		M的意思			特点					
char	char(M)		最大的字符数		固定长度的字符
varchar	varchar(M)	最大的字符数		可变长度的字符

charvarchar的效率高

#四.日期型
分类:
date只保存日期
time只保存时间
year只保存年

datatime保存日期+时间
timestamp保存日期+时间

特点:
			字节	范围		时区的影响
datetime	8		1000-9999	不受		
timestamp 	4		1970-2038	受

其他:
binaryvarbinary用于保存较小的二进制
enum用于保存枚举型
set用于保存集合型
#.枚举型
create table tab_test(
	name enum('a','b','c')
);
insert into tab_test values('a');
insert into tab_test values('m');//此时插入为空
insert into tab_test values('A');//插入小写

#.集合型
create table tab_test(
	name set('a','b','c')
);
insert into tab_test values('a,b,c');

2.常见约束

含义:一种限制、用于限制表中的数据,为了保证数据的准确和可靠性。

分类:六大约束
		not null:非空,用于保证该字段的值不能为空
		default:默认,用于保证该字段有默认值
		primary key:主键,用于保证该字段的值具有唯一性,并且非空,比如学号、员工编号等
		unique:唯一,用于保证该字段具有唯一性,可以为空,比如座位号,
		check:检查约束【mysql中不支持】
		foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束用于引用主表某列的值,比如学生表的专业编号,员工的工种编号


添加约束的时机:
	1.创建表时
	2.修改表时
约束的添加分类:
	列级约束:六大约束语法上都支持,但外键约束没有效果
	表级约束:除了默认、非空,其他的都支持

			位置		支持的约束类型				是否可以起约束名
列级约束		列的后面		语法都支持,但外键没有效果	不可以
表级约束		所有列的下面	默认和非空不支持,其他支持	可以

create table 表名(
	字段名 字段类型 列级约束,
	字段名 字段类型
	。。。
	字段名 字段类型 
	表级约束
)

主键和唯一键的大对比:
			唯一性	允许为空		一个表中可以有多少个		是否允许组合
	主键	√		×			至多有一个				允许(不推荐)
			
	唯一	√		√			可以有多个				允许(不推荐)

外键:
	1.要求在从表设置外键关系
	2.从表的外键类型要求和主表的关联列的类型要求一致或者兼容,名称无要求
	3.主表的关联列必须是一个key(一般是主键或唯一)
	4.插入数据时,一般是先插入主表再插入从表,删除数据时,先删除从表再删除主表数据


# 一、创建表时添加约束
1、添加列级约束
语法:
直接在字段名和类型后追加约束类型即可
create table student(
	id int primary key,#主键
	name varchar(20) not null,#非空
	gender char(1) check(gender='男' or gender='女'),#检查
	seat int unique,#唯一
	age int default 18#默认的约束
	majorId int foreign key references major(id) #外键,引用major表的id列
);
#查看表中所有的索引,包括主键、外键、唯一

2、添加表级约束
语法:在各个字段的最下面
【constraint 约束名】 约束类型(字段名)

create table student(
	id int,
	name varchar(20),
	gender char(1),
	seat int,
	age int,
	majorId int,
	constraint pk primary key(id),#主键
	constraint uq unique(seat),#唯一键
	constraint ck check(gender='男' or gender='女')#检查
	constraint fk_student_major foreign key(majorId) references major(id)#外键
)

#通用的写法:
create table if not exists student(
	id int primary key,
	name varchar(20) not null,
	gender char(1),
	seat int unique,
	age int default 18,
	majorId int,
	constraint fk_student_major foreign key(majorid) references major(id)
	
)

# 二、修改表时添加约束
1.添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束
2.添加表级约束
alter table 表名 addconstraint 约束名】 约束类型(字段名)【外键的引用】;
#1.添加非空约束
alter table student modify column name varchar(20) not null;
#2.添加默认约束
alter table student modify column age int default 18;
#3.添加主键
#①列级约束
alter table student modify column id int primary key#②表级约束
alter table student add primary key(id);
#4.添加唯一
#①列级约束
alter table student modify column seat int unique#②表级约束
alter table student add unique(id);
#5.添加外键
alter table student add foreign key(majorid) references major(id);

# 三、修改表时删除约束
#1.删除非空约束
alter table student modify column name varchar(20) null#2.删除默认约束
alter table student modify column age int#3.删除主键
alter table student drop primary key#4.删除唯一
alter table student drop index 唯一键名;
#5.删除外键
alter table student drop foreign key 外键约束名;

3.标识列

又称为自增长列
含义:可以不用手动插入值,系统提供默认的序列值

特点:
1.标识列必须和主键搭配吗?不一定,但要求是一个key
2.一个表可以有几个标识列?至多一个!
3.标识列的类型只能是数值型
4.标识列可以通过set auto_increment_increment = 3;设置步长,可以通过手动设置值设置起始值。

# 一、创建表时设置标识列
create table student(
	id int primary key auto_increment,
	name varchar(20)
)

# 二、修改表时设置标识列
alter table student modify column id int primary key auto_increment# 三、修改表时删除标识列
alter table student modify column id int
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值