语法格式:
creat table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型
);
表名以t_或者tbl_开始
varchar(最长255)
可变长度的字符串,根据实际长度,动态分配空间(节省空间但速度慢)
char
定长字符串
不管实际的数据长度是多少,分配固定空间存储数据(使用不当浪费空间,但速度快)
varchar和char怎么选择?
性别字段选char、姓名字段选varchar
int(最长11)
数字中的整数型
bigint
数字中的长整型,等同于long
float
double
data
短日期类型
datatime
长日期类型
clob
字符大对象
存储一篇文章、一个说明;超过255个字符的都要采用CLOB大对象来存储
blob
二进制大对象
专门用来存储图片、声音、视频等流媒体数据,需要用IO流
(1)创建表
create table t_student(
-> Num int,
-> name varchar(32),
-> sex int(3),
-> age int(3)
-> );
Query OK, 0 rows affected (0.02 sec)
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Num | int(11) | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| sex | int(3) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
(2)删除表
drop table t_student;
drop table if exists t_student;
(3)插入数据
insert into t_student(Num,name,sex,age)
-> values(1,'zhangsan',1, 26);
// 只插了一条数据
mysql> select * from t_student;
+------+----------+------+------+
| Num | name | sex | age |
+------+----------+------+------+
| 1 | zhangsan | 1 | 26 |
+------+----------+------+------+
一顿insert之后
+------+----------+------+------+
| Num | name | sex | age |
+------+----------+------+------+
| 1 | zhangsan | 1 | 26 |
| 1 | zhangsan | 1 | 26 |
| 2 | lisi | 0 | 86 |
| 3 | wangwu | 1 | 27 |
+------+----------+------+------+
非等值插入会怎么样
insert into t_student(Num)
-> values(3);
mysql> select * from t_student;
+------+----------+------+------+
| Num | name | sex | age |
+------+----------+------+------+
| 1 | zhangsan | 1 | 26 |
| 1 | zhangsan | 1 | 26 |
| 2 | lisi | 0 | 86 |
| 3 | wangwu | 1 | 27 |
| 3 | NULL | NULL | NULL |
+------+----------+------+------+
insert但凡执行成功,那么必然会多一条记录。
(4) 指定默认值
插入的时候,没有数据的值,都会被默认值**填充
**。
(5) insert 语句中的"字段名"是可以省略的。注意:省略 == 都写上
insert into t_table values(2,'lisi','w',15,'[email protected]');
format
select ename,format(sal,'$999,999') as sal from emp;
+--------+-------+
| ename | sal |
+--------+-------+
| SMITH | 800 |
......
| FORD | 3,000 |
| MILLER | 1,300 |
+--------+-------+
str_to_date : 将字符串varchar类型转换成date类型
date_format :将date类型转换成具有一定格式的varchar类型
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
(1) str_to_date :
str_to_date : 将字符串varchar类型转换成date类型数据,通常使用在插入insert方面,因为插入的时候需要一个日期类型的数据,需要通过该函数将字符串转换成date
好消息
如果你提供的日期字符串是这个格式,str_to_date函数就不需要了!!!
%Y-%m-%d
即:'1990-10-01'
(2) data_fromat:
查询的时候以某个特定的日期格式展示,这个函数可以将日期类型转换成特定格式的字符串。
date_format(日期类型数据, '日期格式')
data 是短日期:只包括年月日信息
datetime 长日期类型:包含年月日、时分秒信息
mysql 短日期默认格式:%Y-%m-%d
mysql 长日期默认格式:%Y-%m-%d %h:%i:%s
create table t_user(
-> id int,
-> name varchar(32),
-> birth date,
-> creat_time datetime);
insert into t_user(id, name, birth, creat_time) values (1, 'zhangsan', '1990-10-01', '2023-7-5 20:06:15') ;
+------+----------+------------+---------------------+
| id | name | birth | creat_time |
+------+----------+------------+---------------------+
| 1 | zhangsan | 1990-10-01 | 2023-07-05 20:06:15 |
+------+----------+------------+---------------------+
insert into t_user(id, name, birth, creat_time) values (2, 'lisi', '1980-10-11', now() ;
+------+----------+------------+---------------------+
| id | name | birth | creat_time |
+------+----------+------------+---------------------+
| 1 | zhangsan | 1990-10-01 | 2023-07-05 20:06:15 |
| 2 | lisi | 1980-10-11 | 2023-07-05 20:09:12 |
+------+----------+------------+---------------------+
now()
函数可获得当前日期和时间,是datetime类型
的
语法格式:
update 表名 set 字段名1=值1, 字段名2 = 值2, 字段名3 = 值3 .... where 条件
注意:没有条件限制会全部更新
+------+----------+------------+---------------------+
| id | name | birth | creat_time |
+------+----------+------------+---------------------+
| 1 | zhangsan | 1990-10-01 | 2023-07-05 20:06:15 |
| 2 | lisi | 1980-10-11 | 2023-07-05 20:09:12 |
+------+----------+------------+---------------------+
示例:把2的name改成jack,生日改成2000-01-11
update t_user set name='jack', birth='2000-01-11' where id = 2;
+------+----------+------------+---------------------+
| id | name | birth | creat_time |
+------+----------+------------+---------------------+
| 1 | zhangsan | 1990-10-01 | 2023-07-05 20:06:15 |
| 2 | jack | 2000-01-11 | 2023-07-05 20:09:12 |
+------+----------+------------+---------------------+
语法格式
delete from 表名 where 条件;
注意:没有条件,整张表会全部删除!!!
delete from t_user where id = 3;
ack | 2000-01-11 | 2023-07-05 20:09:12 |
±-----±---------±-----------±--------------------+
#### // where好丝滑呀
### 8. delete(删除数据):
```sql
语法格式
delete from 表名 where 条件;
注意:没有条件,整张表会全部删除!!!
delete from t_user where id = 3;
insert into t_user (id,name,birth,creat_time) values(3,'wangwu','1998-10-03',now()),(4,'zhaoliu','1987-12-13',now()),(5,'chenwu','2018-05-13',now());
+------+----------+------------+---------------------+
| id | name | birth | creat_time |
+------+----------+------------+---------------------+
| 1 | zhangsan | 1990-10-01 | 2023-07-05 20:06:15 |
| 2 | jack | 2000-01-11 | 2023-07-05 20:09:12 |
| 3 | wangwu | 1998-10-03 | 2023-07-06 17:03:44 |
| 4 | zhaoliu | 1987-12-13 | 2023-07-06 17:03:44 |
| 5 | chenwu | 2018-05-13 | 2023-07-06 17:03:44 |
+------+----------+------------+---------------------+
create table emp2 as select * from emp;
原理:
将第一个查询结果当做一张表新建!完成表的快速复制
create table mytable as select empno,ename from emp where job = 'MANAGER';
+-------+-------+
| empno | ename |
+-------+-------+
| 7566 | JONES |
| 7698 | BLAKE |
| 7782 | CLARK |
+-------+-------+
delete from mytable;
# Empty set (0.00 sec)
表中的数据被删除了,但是这个数据在硬盘上的空间不会被释放,还可以回滚。
效率较高,删的彻底,但无法恢复。
truncate table 表名
大表非常大,上亿条记录,delete一小时,truncate一秒钟
和删除表的指令不一样,删除表是
drop table 表名