SQL学习笔记——DDL-建表、DML-插入数据、部分函数补充
表的创建( DDL )
DDL包括:create,drop,alter
create table 表名 (字段名1 数据类型 , 字段名2 数据类型 , 字段名3 数据类型 ……);
create table 表名 (
字段名1 数据类型 ,
字段名2 数据类型 ,
字段名3 数据类型 //最后一个没逗号
);
表名:建议以 t_ 或者 tbl_ 开始,可读性强,见名知意
字段名:见名知意
表名和字段名都属于标识符
mysql的数据类型
常见数据类型:
-
varchar(最长255):可变长度的字符串
比较智能,节省空间
会根据实际的数据长度,动态分布空间
优点:节省空间
缺点:需要动态分配空间,速度慢 -
char(最长255):定长字符串
不管实际的数据长度,分配固定长度的空间去存储数据
使用不恰当时,会等导致空间的浪费
优点:速度快,不需要动态分配空间
缺点:使用不当可能会导致空间的浪费
设置默认值用default:char (1) default 'm'
varchar 和 char 的选择:
定长选 char,可变选 varchar
性别:是固定长度字符串,选 char
姓名:每个人的名字长度不同,选择 varchar
-
int(最长11):数字中的整数型。等同于 java 的 int
-
bigint:数字中的长整型。等同于 java 中的 long
-
float:单精度浮点型数据
-
double:双精度浮点型数据
-
date:短日期类型
-
datetime:长日期类型
-
clob:字符大对象
最多可以存储4G的字符串
比如:存储一篇文章,存储一个说明
超过 255 个字符的都要采用 CLOB 字符大对象来存储 -
blob:二进制大对象
专门用来存储图片、声音、视频等流媒体数据
往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等,需要使用 IO 流
例:
t_movie 电影表(专门存储电影信息的)
编号 | 名字 | 描述信息 | 上映日期 | 时常 | 海报 | 类型 |
---|---|---|---|---|---|---|
no (bigint) | name (varchar) | describtion(clob) | playtime(date) | time(double) | image(blob) | type(char) |
10000 | 哪吒 | …… | 2019-10-11 | 2.5 | ... | '1' |
10001 | 你的名字 | …… | 2020-11-11 | 1.5 | ... | '2' |
例:创建一个学生表
学号、姓名、年龄、性别,邮箱地址
create table t_student(
no int(3), //建议长度3
name varchar(32), //建议长度32
sex char(1),
age int(3), //建议长度3
email varchar (255)
);
删除表:
brop table t_tstudent; //当这张表不存在时会报错
brop table if exists t_tstudent; //如果这张表存在的话,删除
插入数据 insert( DML )
语法格式:
insert into 表名 ( 字段名1 , 字段名2 , 字段名3… ) values ( 值1 , 值2 , 值3 );
注意:字段名和值要一一对应。数量、数据类型要对应
insert语句一旦执行成功,必然会多一条记录
没有给其他字段指定值,默认是NULL
例:
insert into t_student(no,name,sex,age,email) values (1,'zhangsan','m',20,'zhangsan@123.com');
insert into t_student(age,email,no,name,sex) values (20,'lisi@123.com',2,'zhangsan','f');
insert into t_student(no) values(3);
结果insert语句中的字段名可以省略(不建议,可读性低),
相当于所有都写上,
所以值需要都写上,不能颠倒顺序
例:insert into t_student values (2,'list','f',20,'lisi@123.com');
函数模块补充
-
数字格式化:format ( 数字 , '格式' )
例:1600 ——> 1,600
加入千分位:select ename,format(sal,'$999,999') from emp; -
str_to_date:将字符串 varchar 类型转换成 date 类型
str_to_date('字符串','日期格式')
str_to_date函数可以把字符串 varchar 转换为日期 date 类型
通常使用在插入 insert 方面,因为插入的时候需要一个日期类型的数据,
需要通过该函数将字符串转换成 date 。
PS:如果字符串格式为 %Y-%m-%d(如:'1990-01-11'),就不需要str_to_date函数了,可以自动转换
mysql 的日期格式:
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
例:insert into t_user(id,name,birth) values (1,'zhangsan',str_to_date('01-10-1990','%d-%m-%Y')); -
date_formate:将 date 类型转换成具有一定格式的 varchar 字符串类型
将日期类型转换成特定格式的字符串
date_format(日期类型数据,'日期格式')
这个函数通常使用在查询日期方面,设置展示的日期格式
例:
select id,name,date_format(birth,'%m/%d/%Y') as birth form t_user;
java中的日期格式:yyyy-MM-dd HH:mm:ss SSS
数据库中的命名规范
所有标识符全部小写,单词和单词之间时候用下划线进行衔接
-
insert 插入日期
例:
建表
create table t_user(
id int,
name varchar(32),
birth date // 或 birth char (10) 例:1990-10-11,共10位
);
插入数据
insert into t_user(id,name,birth) values (1,'zhangsan',1990-10-11);
字符串转换位日期类型
例:insert into t_user(id,name,birth) values (1,'zhangsan',str_to_date('01-10-1990','%d-%m-%Y'));
date 和 datetime 两个类型的区别:
date:短日期,包括 年、月、日 信息
默认格式:%Y-%m-%d
datetime:长日期,包括 年、月、日、时、分、秒 信息
默认格式:%Y-%m-%d %h:%i:%s
- 获取系统当前时间 now(),并且获取的时间是datetime类型