参考学习:067-表的创建及数据类型_哔哩哔哩_bilibili
本文仅用于强化学习记忆,如果需要系统学习,点击链接进入认真学习。
- 表的创建
- 建表的格式(DDL语句,DDL包括create drop alter):
create table 表名(字段名1 数据类型,字段名2 数据类型,字段名3 数据类型...);
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);
-
- mysql中的数据类型:
varchar(最长255)
可变长度的字符串
比较智能,节省空间
会根据实际需要的数据长度动态分配空间
优点:节省空间
缺点:需要动态分配空间,速度慢
char(最长255)
定长字符串
不管实际长度是多少,分配固定的长度取存储数据。
使用不恰当的时候可能会导致空间的浪费
优点:不需要动态分配空间速度快
缺点:使用不当会浪费空间
int(最长11位)
数字中的整数型 int
bigint
数字中的长整形 long
float
单精度浮点型
double
双精度浮点型
date
短日期
datetime
长日期
clob
字符大对象
最多可以存储4G的字符串
比如存一篇文章,简介说明之类的
超过255字符的都要采用CLOB字符大对象来存储
blob
二进制大对象
专门用来存储图片声音视频之类的等流媒体数据
往BLOB类型的字段上插入数据的时候,例如插入一个图片,视频等,你需要使用IO流才行。
创建一个学生表:

删除一个表(使用if exists语句可以避免出错)

插入数据insert(DML)
语法格式:
insert into 表名(字段名1,字段名2,字段名3.....) values(值1,值2,值3....);
注意:字段名和值要一一对应。也就是数量要对应,数据类型要对应。
eg:

注意:insert语句但凡执行成功了,必定多一条记录
insert 中数据要插入的字段名可以省,但是省了就表明你是全部数据都要插入,所以你给值得时候要给出所有得值,而且要对应表得顺序:

insert插入日期:
数字格式化:format(数字,'格式')
eg:使用美元符号得作用好像是去掉小数,这种使用format 函数就得到了千分位。

str_to_date:将字符串转位日期函数:

mysql中日期格式:
%Y 表示年
%m 表示月
%d 表示日
%h 表示时
%i 表示分
%s 表示秒
str_to_date函数可以将字符串转换为date类型数据,通常使用在insert中,因为插入的时候需要一个日期类型的数据,需要通过该函数将字符串转为date,但是你提供的字符串是‘年-月-日’这种格式就不需要进行转换,mysql会自动转换,不用显示调用。
date_format:将date类型转换为具有一定格式得varchar字符串类型
date_format(日期类型数据,‘日期格式’)
这个函数通常使用在查询方面,设置展现的日期格式

注意数据库中有一条命名规范:
所有标识符都是全部小写,单词和单词之间下划线连接
date和datetime两个类型的区别:
date是短日期:只包括年月日信息
datetime是长日期:包括年月日时分秒信息
短日期默认格式: %Y-%m-%d
长日期默认格式: %Y-%m-%d %h:%i:%s

在mysql中可以使用now()函数获取当前系统时间

修改update(DML)
语法格式:
update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件;
注意:没有条件限定,会导致所有数据更新,下面就是忘记加条件了

删除数据delete(DML)
语法格式:
delete from 表名 where 条件;
注意:没有条件,整张表内容会被删除


一次性插入多条记录:格式
insert into 表名(字段1,字段2,字段3...) values(值1,值2,值3...),(),();
insert
into
t_user(id,name,birth,create_time)
values(1,'zs','1980-11-10',now()),
(2,'ls','1980-11-10',now()),
(3,'wangwu','1980-11-10',now());

快速创建表
语法: create table 新表名 as select * from 旧表名;
相当于复制表,其中的数据也复制过来,当然你也可以选择性复制,把*换成你所需要的字段名就行,还有换条件,其实后面的那个select语句就是相当于你在查询一张你所需要的表,查出来之后把这个查询的表复制到新表中
快速删除表数据:
delete语句删除数据的原理:(DML操作)
表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放
这种删除缺点是:删除效率比较低。
这种删除优点是:支持回滚,后悔了可以再恢复数据。
用法:delete from 表名 + [where(条件选择)]
truncate语句删除数据的原理
这种删除效率比较高,表被一次截断,物理删除。
这种删除缺点:不支持回滚。
这种删除优点:快速。
用法 truncate table 表名;(DDL操作)
快速删除表(彻底删除):(DDL)
drop table 表名;
对表结构的增删改:(DDL),不重点进行学习
alter
约束:
约束对应的英语单词:constraint
在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性,有效性。
约束的作用就是为了保证:表中的数据有效
约束包括:
非空约束:not null
唯一性约束:unique
主键约束:primary key (简称PK)
外键约束 foreign key (简称FK)
检查约束 check (mysql不支持,oracle支持)
重点学习前四个约束:
not null
unique
primary key
foreign key
非空约束:not null
非空约束not null 约束的字段不能为null。
为null会报错

唯一性约束:unique
唯一性约束unique约束的字段不能重复,但是可以为NULL。

再次出现ww这个名字插入数据就会报错

新需求:name和Email两个字段联合起来具有唯一性,创建格式如下,这种联合约束不是添加在字段后面,被称为表级约束

同时非空约束和唯一性约束可以对一个字段进行叠加约束,但是这种叠加会让表默认为该字段为主键(Oracle中不一样)
主键约束(primary key):简称PK
任何一张表都应该有主键,没有主键表无效
主键的特征:not null + unique (主键值不能是NULL,同时也不能重复)
一个字段做主键,进行列级约束,叫单一主键;同时也可以使用表级约束,在创建表末尾的时候进行主键的添加,可以添加多个字段进行复合,叫做复合主键
同时一张表主键约束只能有一个。
主键除了单一主键和复合主键还可以如下分类:
自然主键:主键是一个自然数,和业务没有关系。
业务主键:业务和主键紧密关联,例如拿银行卡号做主键,这就是业务主键。
在实际开发中自然主键使用较多,因为主键只需要不重复就行,不需要有意义
在mysql中,有一种机制帮助我们自动维护主键,在列级约束使用主键的时候,在后面添加 auto_increment关键字,也就是自增,从1开始以1自增。
外键约束(foreign key,简称FK):这个玩意不太好解释,直接一点就是说使用外键减少数据冗余,浪费空间,把重复又长的数据起个编号代替,这个编号代替这个数据去使用,也就是看见这个编号就相当于是那个长数据。
格式:在创建表的时候,创建外键,使用表级约束进行创建,在字段全部创建完后,在后续使用foreign key(编号字段) references 关联表(相同编号数据字段)

子表引用父表的某个字段,父表被引用的字段不一定是主键,但一定具有唯一性(unique)约束,同时外键可以为NULL。