创建表和增删改(DML)
表的创建
建表的语法格式
create table 表名(字段名1 数据类型, 字段名2 数据类型,字段名3 数据类型);
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);
表名建议以t_或者tb1_开始,可读性强。
字段名:见名知意
快速创建表
mysql> create table t_user2 as select * from t_user;
Query OK, 1 row affected (0.34 sec)
Records: 1 Duplicates: 0 Warnings: 0
原理:
将一个查询结果当做一张表新建!!!
这个可以完成表的快速复制!!!
表创建出来,同时表中的数据也存在!!!
关于mysql中的数据类型
常见数据类型
-
varchar(最长255)
可变长度的字符串,根据传过来的数据长度动态分配空间,最大值为varchar()括号里面的值,
优点:节省空间
缺点:需要动态分配空间,速度慢。
-
char(最长255)
定长字符串,分配的空间为char()括号里面的值
优点:不需要动态分配空间,速度快
缺点:可能会导致空间的浪费
varchar和char怎么选择?
性别字段选char
姓名字段选varchar
-
int(最长11)
数字中的整数型,等同于Java中的int
-
bingint
数字中的长整型,等同于java中的long
-
float
单精度浮点型整数
-
double
双精度浮点型整数
-
date
短日期类型
xxxx-yy-zz
-
datetime
长日期类型
-
clob
字符大对象
最多可以存储4G的字符串。
比如:存储一篇文章,存储一个说明。
超过255个字符串的都要采用clob字符大对象来存储。
-
blob
二进制大对象
Binary Large OBject
专门用来存储图片,声音,视频等流媒体数据。
往BLOB类型的字段上插入数据的时候,例如插入一张图片,视频等
你需要使用IO流才行。
删除表
drop table t_student;//当这张表不存在的时候会报错!
drop table if exists t_student;//当这张表存在的时候就删除。
插入数据insert(DML)
语法格式:insert into 表名(字段名1,字段名2,字段名3,…)values(值1,值2,值3,…);
一次插入多条数据
语法格式:insert into 表名(字段名1,字段名2,字段名3,…)values((),(),()…);
插入日期
str_to_date:将字符串varchar类型转换为date类型
语法格式:
str_to_date(‘字符串日期’,‘日期格式’);
date_format:将date类型转换成具有一定格式的varchar类型
mysql> create table t_user(
-> id int,
-> name varchar(32),
-> birth date);
Query OK, 0 rows affected (1.18 sec)
//格式不匹配,无法插入
mysql> insert into t_user(id,name,birth) values(1,'zhangsan','01-10-1999');
1292 - Incorrect date value: '01-10-1999' for column 'birth' at row 1
mysql的日期格式:
- %Y 年
- %m 月
- %d 日
- %h 时
- %i 分
- %s 秒
//通过str_to_date函数把字符串转换为日期date类型
mysql> insert into t_user(id,name,birth) values(1,'zhangsan',str_to_date('01-10-1999','%d-%m-%Y'));
Query OK, 1 row affected (0.07 sec)
如果你的日期是 %Y-%m-%d 这种格式,str_to_date就不需要了
mysql> insert into t_user(id,name,birth) values(2,'lisi','1998-11-02');
Query OK, 1 row affected (0.05 sec)
使用date_format将日期格式按自己需要的格式输出出来
mysql> select id,name,date_format(birth,'%Y年%m月%d日') as birth from t_user;
+----+----------+----------------+
| id | name | birth |
+----+----------+----------------+
| 1 | zhangsan | 1999年10月01日 |
| 2 | lisi | 1998年11月02日 |
+----+----------+----------------+
2 rows in set (0.13 sec)
date和datetime两个类型的区别
date是短日期:只包括年月日信息。
datetime是长日期:包括年月日时分秒信息
mysql> drop table if exists t_user;
Query OK, 0 rows affected (0.46 sec)
mysql> create table t_user(
-> id int,
-> name varchar(32),
-> birth date,
-> cteate_time datetime);
Query OK, 0 rows affected (0.30 sec)
mysql短日期默认格式:%Y-%m-%d
mysql长日期默认格式:%Y-%m-%d %h:%i:%s
mysql> insert into t_user(id,name,birth,cteate_time) values(1,'张三','1999-11-03','2022-06-12 20:56:23');
Query OK, 1 row affected (0.14 sec)
mysql> select * from t_user;
+----+------+------------+---------------------+
| id | name | birth | cteate_time |
+----+------+------------+---------------------+
| 1 | 张三 | 1999-11-03 | 2022-06-12 20:56:23 |
+----+------+------------+---------------------+
1 row in set (0.03 sec)
在mysql中获取系统时间
now()函数,并且获取的时间带有:时分秒信息!!!是datetime类型
mysql> insert into t_user(id,name,birth,cteate_time) values(1,'张三','1999-11-03',now());
Query OK, 1 row affected (0.12 sec)
修改数据(DML)
语法格式:
update 表名 set 字段名1=值1,字段名2=值2,…where 条件;
注意:没有条件限制会导致所有数据全部更新。
mysql> update t_user set id=2 where cteate_time='2022-06-12 21:13:25';
Query OK, 1 row affected (0.05 sec)
删除语句(DML)
语法格式:
delete from 表名 where 条件;
注意:没有条件,整张表的数据都会删除;
mysql> delete from t_user where id=2;
Query OK, 1 row affected (0.37 sec)
快速删除表中数据
//这种删除数据的方式比较慢
delete from t_user;
delete语句删除数据原理(这种操作属于DML语句)
表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!!
这种删除的缺点:删除效率低。
这种删除的优点:支持回滚,后悔了可以再次恢复数据!!!
truncate table t_user;
truncate语句删除数据的原理(这种操作属于DDL操作)
这种删除效率高,表一次截断,物理删除。
这种删除的缺点:不支持回滚。
这种删除的优点:快速。