2.数据表的创建和六大约束
1.如何创建数据表
-
脚本创建
-
切换到对应的数据库的连接及对应的数据库;
-
create tabe 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型...);
-
comment:注释的意思,作用在建表的时候给字段和表取一个注释说明;
-
character set utf8:是设置编码。
-
-
手动创建
-
在对应的数据库的 表 图标上鼠标右键 --> 新建表
-
-
-
-
删除表
-
drop table 表名
-
-
-
修改表
-
脚本修改表结构主要是通过 alter关键字实现。可以给表增加字段,还可以修改已有的字段,包括修改字段名称、修改字段类型、删除字段等等。此外,还可以进行一系列高级操作,例如修改数据表的字符集、设置主键、设置索引、修改字段默认值、设置自增长等。
-
增加表字段:alter table 表名 add 字段名 字段类型;
-
删除表字段:Alter table 表名 drop 字段名;
-
修改字段名:alter table 表名 change 原字段名 新字段名 字段类型 字段属性(就算是仅修改字段名,那么字段的原始类型,原属性也要重新书写,不然就变为删除。属性指的是约束);
-
修改字段类型:alter table 表名 modify 字段名 字段类型;
-
修改表名:alter table 表名 rename to 新表名
-
2.数据类型
-
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型,除此之外还有其它类型。
2.1字符类型
-
char :固定长度,例如:性别
-
varchar:可变长度,例如:地址
-
text:备注,说明之类
-
blob:二进制,可以存储图片或者声音文件。但在实际中一般不会直接把图片存储到数据库里面,因为数据库扛不起那么打的内存压力,会用专用的图片存储服务器存储图片
2.2 数值类型
-
int :整型,对应Java里面的int/Integer
-
bigint:长整型,对应java里面的BigInteger/Long
-
float:小数,一般用来存储分数相关的,不会用来存储货币相关的
-
decimal:小数,一般用来存储与货币相关的数据,对应的java类型:java.math.BigDecimal;
-
例如:decimal(5,2):表示整数位最多3位数,小数位2位数,小数位多出的位数进行四舍五入,但是四舍五入后整数位不能超过3位数,如:999.999就不能存储,因为小数位的9四舍五入后整数位会变成1000,超过了3位数。
-
2.3 日期类型
-
date:年月日,对应Java里面的:yyyy-MM-dd格式
-
time:时分秒,对应java里面的:HH:mm:ss格式
-
datetime:年月日时分秒,对应yyyy-MM-dd HH:mm:ss格式
-
timestamp:时间戳从1970-1-1开始计算到现在的总毫秒数,就是java里面的格林尼治时间
3.标识列
-
作用:实现字段的自动增长,可以不用手动插入值。
-
特点
-
一个表中最多只能有一个标识列;
-
标识列的类型必须是数值类型(int/float/double),一般 int类型用的比较多
-
标识列必须是一个key/键,比如:主键、唯一约束等。一般用于主键比较多;
-
案例1,创建表时设置 book_id字段为标识列:
create table tb_book( book_id int auto_increment primary key, book_name varchar(10) )
-
案例2,表创建成功后,设置 book_id字段为表示列:alter table tb_book modify column book_id int primary key auto_increment;
-
-
4.六大约束(脚本及手动创建)
1.主键约束
-
作用:主键是能确定一条记录的唯一标识,主键字段必须唯一,必须非空,一个表中只能有一个主键,但是一个主键可以由多个字段组长。
-
如:一条记录包括身份正号,姓名,年龄,学校,国籍,性别等。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
-
案例:bookId int auto_increment primary key;
-
注:一个主键由多个列组成:
-
虽然现实主键1、主键2,其实是由两个列组成的一个主键。在设置的时候主键1必须是一个key,主键2无所谓。
-
2.默认值约束
-
作用:字段设置默认值,可以不用手动插入值。
-
性别案例:sex char(2) default '男';
-
日期案例
-
adddate timestamp default current_timestamp;current_timestamp 是当前系统时间的意思。
-
adddate timestamp default now();now()是获取当前系统时间。
-
-
默认值约束最典型的就是性别和日期两个情况。
-
-
3.非空约束
-
作用:字段的值不能为空。
-
bookId int not null auto_increment primary key;
-
4.唯一约束
-
bookId int not null auto_increment primary key;
-
sname varchar(20) comment'姓名',id varchar(18) not null comment '身份证',sex char(2) default '男',unique(sname,id);意思是身份证和姓名加起来是唯一的,这种约束叫组合约束。
-
sname varchar(20) unique comment'姓名',id varchar(18) not null comment '身份证',sex char(2) default '男';意思是姓名是为唯一的。
-
5.检查约束
-
作用:通过表达式约束字段的值。
create table tb_student( sid int not null auto_ncrement primary key, sname varchar(10), sex char(2), check(sex='男' or sex='女'))
6.主外键约束
-
作用:在 MySQL 中,外键(Foreign Key)是一种用于建立表与表之间关联关系的约束。通过外键,可以在一个表中引用另一个表的主键或唯一键,从而实现数据的关联和一致性。
-
至少涉及到两张表:主表和从表。以及两个键:主键和外键。
-
主外键的主键不一定是主表上的主键,但它必须是主表上唯一且非空的列。
-
在 MySQL 中,主外键的主键和外键的数据类型并不一定要求完全一致,但它们之间需要满足一定的数据类型兼容性。通常情况下,为了确保数据的一致性和有效性,主键和外键的数据类型应该尽可能保持一致。这样可以避免数据类型转换和不匹配带来的问题。当主表的主键列的数据类型为某一类型时,建议从表中引用主键的外键列的数据类型与之相同。MySQL 在某些情况下允许主键和外键的数据类型之间存在一定的兼容性。例如,可以将主表的主键列定义为整数类型(如 INT),而在从表中的外键列使用兼容的数值类型(如 BIGINT)。MySQL 在执行引用完整性检查时,会自动进行数据类型转换,但这可能会导致一些性能上的损失。
create table tb_score( sid int not null auto_ncrement primary key comment '外键,关联tb_studnet表上的sid键', score float default 0 comment '成绩', foreign key(sid) references tb_student(sid) ) comment '成绩表' create table tb_student( sid int not null auto_increment primary key, sname varchar(10), sex char(2) )