“尚硅谷”Mysql数据库DDL补充

数据类型

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

数值型

整型

“尚硅谷”Mysql数据库DDL补充_第1张图片
特点
1、如果不设置无符号还是有符号,默认是有符号,如果(ˇ?ˇ) 想设置无符号我,需要添加unsigned关键字。
2、如果插入的数值超出了整型的范围,会报out of range异常,并且插入的是临界值。
3、如果不设置长度,会默认的长度 ,长度代表显示的最大宽度,如果不够会用0在左填充,但必须搭配zerofill使用。

create table tab_int(
		t1 int ZEROFILL,#0填充
		t2 int unsigned #设置为无符号,则t2不能添加负数。
);

小数

定点数

dec(M,D)
decimal(M,D)

浮点数

float(M,D)
double(M,D)
特点:
1、M:整数部位+小数部位,D:小叔部位
2、MD都可以省略,如果是decimal,则M默认为10,D默认为0.如果是float和double,则会根据插入的数值的精度来决定精度。
3、定点型的精确度较高,如果要求插入数值的精度较高如货币运算等考虑使用。

create table tab(
		f1 float,
		f2 double(5,2),
		f3 decimal
)

字符型

较短的文本:char、varchar
特点:
char(M):固定字符长度,耗空间,效率高。
varchar(M):可变字符长度,节省空间,效率较低。

#enum枚举,例子中只能插入a或者b
create table tab_char(
		ca1 enum('a','b')
);
#set可在abc中插入多个
create table tab_set(
		s1 set('a','b','c')
);
insert into tab_set values('a,c,d)';

较长的文本:text、blob(较长的二进制数据)

日期型

“尚硅谷”Mysql数据库DDL补充_第2张图片
“尚硅谷”Mysql数据库DDL补充_第3张图片

create table tab_date(
		t1 datetime,
		t2 timestamp		


);
insert into tab_date values(now(),now()); 
show variables like 'time_zone';#显示时区
set time_zone='+9:00';#更改时区 

常见约束

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

六大约束

not null:非空,用于保证该字段的值不能为空,比如姓名、学号等。
default:默认、用于保证该字段有默认值,比如性别。
peimary key:主键,用于保证该字段的值具有唯一性,并且非空,比如学好、员工编号等。
unique:唯一,用于保证该字段的值具有唯一性,可以为空,比如座位号。
check:检查约束【mysql中不支持】,比如年龄,性别。
foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。比如学生表的专业编号去,员工表的部门编号,员工表的工种编号。

约束添加的分类

1、列级约束:只支持:默认、非空、主键、唯一。
2、表级约束:除了非空、默认,其他都支持。

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

添加约束的时机

1、创建表时。

#列级约束
create table stuinfo(
		id int primary key,
		stuName varchar(20) not null,
		gender  char(1) check(gender='男' or gender='女'), #不支持
		seat int unique,
		age int default 18,
		majorid int references major(id) #不支持
);
create table major(
		id int primary key,
		majorName varchar(20)
);

#表级约束
create table stuinfo1(
		id int,
		stuname varchar(20),
		gender char(1),
		seat int,
		age int,
		majorid int,
		#constraint pk,别名可以不写,但是约束名称不能重复,具体情况看需求,在mysql中它没有任何作用
		constraint pk primary key(id),
		unique(seat),
		check(gender='男' or gender='女'),#不支持
		foreign key(majorid) references major(id)
)

2、修改表时,一定是在数据添加之前。

1、添加表级约束
alter table 表名 modify column 字段名 字段类型 新约束;
2、添加表级约束
alter table 表名 add [constraint 约束名] 约束类型(字段名) 外键的引用
#列级约束
alter table stuinfo modify column stuname varchar(20) not null;
#表级约束
alter table stuinfo add primary key(id);

修改表时,删除约束

#1.删除非空约束
alter table stuinfo modify column stuname varchar(20) null;
#删除默认约束(直接不写约束)
alter table stuinfo modify column age int;
#删除主键约束
alter table stuinfo drop primary key;
#删除唯一
alter table stuinfo drop index seat;
#删除外键
alter table stuinfo drop foreign key majorid;

主键和唯一的区别

保证唯一性 是否允许为空 一个表中是否可以有多个 是否可以组合
主键 × 最多一个 √,但不推荐
唯一 √,但不推荐

外键

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

#主表
create table major(
	id int primary key,
	majorName varchar(20)
);
#从表
create table stu(
		id int,
		stuname varchar(20),
		gender char(1),
		seat int,
		age int,
		majorid int,
		
		foreign key(majorid) references major(id)
);

标识列(自增长列)

含义:可以不用手动的插入值,系统提供默认的序列值。

create table tab_identity(
		id int primary key auto_increment,#自增长列
		name varchar(20)
);
#插入数据的方式
insert into tab_identity(id,name) values(null,'john');
insert into tab_identity(name) values('john');

set auto_increment_increment = 3;#设置步长值,每次加3;
补充:
1、标识列必须和主键搭配吗?不一定,但要求是一个key(不可重复)。
2、一个表可以有几个标识列?至多一个!
3、标识列的类型?只能是数值型(整数、浮点数)。
4、标识列可以通过set auto_increment_increment = 3;设置步长,也可以手动插入值,设置起始值。

修改表时设置标识列

#修改表时设置标识列
alter table tab_identity modify column id int primary key auto_increment;
#修改表时删除标识列
alter table tab_identity modify column id int primary key;

你可能感兴趣的:(开发,数据库,mysql,database)