一,表的创建
1.语法格式
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
......
字段名n 数据类型
);
那么我们现在来创建一个t_student表,要求字段有:学号,姓名,性别,年龄,email)
create table t_student(
no int,
name varchar(23),
sex char,
age int,
email varchar(255)
);
上面代码有些数据类型不知道是什么没关系,下面会开始讲数据类型。
2.MySQL中的数据类型
符号 | 数据类型 |
---|---|
varchar | 可变长度字符串 |
char | 定长字符串 |
int | 整数类型 |
bigint | 超大整数类型 |
float | 单精度浮点数类型 |
double | 双精度浮点数类型 |
date | 短日期类型 |
datetime | 长日期类型 |
clob | 字符大对象 |
blob | 二进制大对象 |
bigint :类似Java中的long长整型。
date :短日期类型包含年,月,日。
datetime :长日期类型包含年,月,日,时,分,秒。
date和datetime的使用方法会在插入数据中的插入日期中讲述。
clob:字符大对象能够存储4G的字符串,通常用来存储文章或长度超过255的字符串。
blob:二进制大对象存储图像,声音,视频等流体数据。(注意:往blob类型传入数据时,需要使用IO流进行传输)
3.varchar和char
varchar是可变长度字符串,其中的可变长度体现在哪呢?
假设varchar(10)里存储了’JACK’字符串,那么’JACK’字符串只占有4个空间。
char是定长字符串
假设char(10)里同样存储了’JACK’字符串,那么’JACK’字符串占有10个空间。
通过这样的对比,应该能够理解varchar和char的区别了吧。
4.快速复制表(了解)
语法:
create table 表名 as select语句;
原理:将查询结果当做一个新表。
such:
create table t_stu_2 as select * from t_student;
!!!特别需要注意的是,在建表时,数据类型不能直接写varchar,必须规定varchar的长度
二,表的删除
1.语法格式
drop table 表名;
按照上面代码的写法的话,如果表不存在,就会报错。
那么要防止报错,就得说到另一种删表的写法,且这种写法是非常常用的。
drop table if exists 表名;
三,表的修改
无
四,插入数据
1.语法格式
insert into 表名(字段名1,字段名2,...) values(值1,值2,...);
!!!:字段的数据类型应该与值的数据类型一一对应。
我们用上面创建的表t_student
insert into t_student (no,name,sex,age,email) values(10101,'Wang','M',19,'wang@qq.com');
insert语句一旦执行成功,那么必然会多一条记录
2.省略字段名
省略部分字段名
首先我们试试省略部分字段名
insert into t_student(no) values(232144);
通过插入后的数据我们可以发现,省略了的字段默认变成了null。
结论:如果在插入时,为给其他字段指定值,则默认为null
那么我们能不能修改一下这个默认值呢。
当然可以我们可以在创建表的时候添加defaoult就行
create table t_student(
no int,
name varchar(23),
sex char(1) default 'M',
age int(3),
email varchar(255)
);
可以看到现在sex的默认值改成了’M’
那么我们再插入一条数据试试。
省略全部字段名
insert into t_student value(2312);
报错的原因是,行数和值的数量不匹配。
原因是:若将字段名全部省略,则默认插入所有字段,所以都得写上
insert into t_student values(2312,'Wang','F',20,'Wang@123.com');
3.插入多条数据
语法:
insert into 表名
(字段1,字段2,...)
values
(值1.1,值1.2,...),
(值2.1,值2.2,...),
.......;
such:
insert into t_user
(name,birth,create_time)
values
('Wang','1992-08-09',now()),
('Zhang','1997-10-23',now()),
('Yang','2000-01-19',now());
4.插入日期
两个跟日期有关的函数:
str_to_date:将varchar转换为date
date_format:将date转换为varchar
MySQL中的默认日期格式
MySQL中的日期格式
符号 | 含义 |
---|---|
%Y | 年 |
%m | 月 |
%d | 日 |
%h | 时 |
%i | 分 |
%s | 秒 |
date短日期默认格式:%Y-%m-%d
datetime长日期默认格式:%Y-%m-%d %h:%i:%s
插入日期要使用的表t_user
str_to_date函数(varchar→date)
格式:str_to_date(‘字符串日期’,‘日期格式’)
str_to_date函数通常使用在insert语句中
insert into t_user(name,birth) values('Li',str_to_date('01-10-1990','%d-%m-%Y'));
如果你符合date短日期的日期默认格式(%Y-%m-%d),那么不用函数就会自动转换。
insert into t_user(name,birth) values('Ming','1998-05-17');
一样能够存进去。
date_format函数(date→varchar)
格式:date_format(日期类型数据,‘日期格式’)
date_format函数通常用在select语句中
select
u.name,date_format(u.birth,'%m/%d/%Y') as birth
from
t_user u;
date和datetime的区别
date | datetime | |
---|---|---|
含义 | 短日期,只包含年,月,日 | 长日期,包含年,月,日,时,分,秒 |
日期默认格式 | %Y-%m-%d | %Y-%m-%d %h:%i:%s |
insert into t_user(name,birth,create_time) values('Wang','2000-04-09','2022-08-30 12:08:00');
获取当前系统时间的函数–now()
now():MySQL中获取当前系统时间的函数,并且返回的数据类型是datetime。
insert into t_user(create_time) values(now());
将查询结果插入表中(了解)
语法:
insert into 表名 select语句;
查询结果必须满足表的结构
insert into t_user select * from t_user;
五,删除数据
1.语法格式
delete from 表名 where 条件
如果没有条件限制会导致整张表的数据都被删除(只是数据,不是表的结构)
delete from t_user where name='Wang';
试试不加限制条件
delete from t_user;
2.快速删除表中数据(truncate)
truncate属于DDL语句,而delete属于DML语句
delete from 表名
原理:一个一个数据的删,但是硬盘上的真实存储空间不会释放。
缺点:效率低
优点:支持回滚(如何回滚会在事务中讲解),可以恢复数据
truncate table 表名
truncate只能删除整张表内的数据,不能删单条
truncate不会删除整张表,只是删除表内的数据
原理:表被一次截断,物理删除
缺点:不支持回滚
优点:快
语法:
truncate table 表名;
六,更新数据
1.语法格式
update
表名
set
字段名1=值1,
字段名2=值2,
...
where
条件
如果没有条件限制会导致所有的数据全部更新
update
t_user u
set
u.name='JACK',
u.birth='1988-01-23'
where
u.name='Li';
试试不加限制条件
update
t_user u
set
u.name='JACK',
u.birth='1988-01-23';