(一)DDL语句
建表属于DDL语句,DDL:create、drop、alter…
(1)create建表语法:
建表语句如下:
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型,
...);
(2)数据类型
常见的数据类型:
varchar:可变长度字符串,最长255,可以实际的数据长度动态分配空间,可节省资源。
char:定长字符串,最长255,不管实际数据长度,直接分配固定指定空间存储数据,使用不恰当可能会导致空间浪费。
但是char相对于varchar效率更高,因为不必处理空间。
所以一般固定长度的都选char,例如:身份证号、性别等
int:数字中的整型。
bigint:数字中的长整型。
float:单精度浮点型数据。
double:双精度浮点型数据。
datatime:长日期类型。
data:短日期类型。
clob:字符大对象,超过255字符的都要用,最多可以存储4G的字符串,一般可以存储一些说明、文章。
blob:二进制大对象,专门用来存储图片、声音、视频等媒体数据。往blob插入数据时需要IO流。
①创建表
创建一个宿舍表room(宿舍号r_id、人数num、姓名name、学号t_id):
create table room(
r_id varchar(10),
num char(6),
name varchar(10),
t_id bigint);
创建成功,观察其结构:
当然对表的查询结果也可以快速建表:
create table 表2 as select * from 表1;
②删除表
语法:
drop table 表名;
但是需要注意的是当删除的表不存在时,便会报错。
那么可以这样写:
drop table 表名 if exists;//如果这张表存在的话,删除
(二)DML语句
(1)insert ()插入语句
①insert into tables() values();
insert基本语法格式:
insert into表名(字段名1,字段名2,字段名3) values(值1,值2,值3);
注意:字段和值要在数量和数据类型上都相对应,且当没有给字段写入值时默认值为NULL。
案例:对表room进行数据插入。
insert into room(r_id,num,name,t_id) values(541,6,'章健雄',2206210762);
插入成功:
当然前面表名里的字段也可以省略,但是后面的插入值便必须全部输入。
insert into 表名 values(值1,值2,值3);
案例:
insert into room values(541,3,'蒋文隆',2206210738);
结果:
一次性插入多条语句:
insert into room3 values
(541,3,'蒋文隆',2206210738),
(541,3,'蒋文隆',2206210738);
这里还可以将查询结果插入另一张表,前提是表的字段名必须一致,但是这种方式很少用:
②default
除了这里进行对空表插入值,也可以在建表时对字段指定默认值(default)。
create table room2(
r_id varchar(10),
num char(6) default 6, //default指定默认值
name varchar(10),
t_id bigint);
这里能看到num已经被默认为6。
③format
format数字格式化,基本语法:
format(数字,'格式');
案例:对薪水进行千分位显示.
select ename,format(sal,'$999,999') as sal from emp;
结果:
④str_to_date
语法格式:
str_to_date('字符串日期',日期格式);
其作用是将字符串转化为日期,即将字符串varchar类型转换为data类型。
先建一个表:
create table t_user(
-> name varchar(20),
-> id bigint,
-> birth date,
-> sex char(10));
在进行插入:
insert into t_user values('章健雄',2206210762,'1997-01-01',male);
能明显看到这里的birth是date类型的,但传入的’1997-1-1’是字符串类型的,这里便可以进行转化:
mysql日期格式:
%Y 年
%m 月
%d 日
%h 时
%i 分
%s 秒
str_to_date('1997-01-01','%Y-%m-%d')
insert into t_user values(
'章健雄',
2206210762,
str_to_date('1997-01-01','%Y-%m-%d'),
'男');
插入成功:
⑤data_format
将日期转换为字符串,将data类型转换为具有一定格式的varchar类型。
语法格式:
data_format(日期类型数据,'日期格式')
但是在mysql中查询时也会自动转换:
案例:
select name,id,date_format(birth,'%Y/%m/%d') as 'new birth' from t_user;
⑥date和datetime的区别:
date是短日期,只包含年月日。mysql默认短日期格式:%Y-%m-%d
datetime是长日期,包含年月日时分秒。mysql默认长日期格式:%Y-%m-%d %h:%i:%s
那么在mysql当中怎么获取当前系统时间:now()函数,该函数获取的时间是datetime类型的。
在使用时便直接可以用now()代替某一字段数据。例如:
insert into 表名 values(数据1,数据2,now());
(2)updata修改语句
语法格式:
update 表名 set 字名1=值1,字段名2=值2,字段名3=值3...where 条件
注意:没有条件限制会导致所有数据全部更新。
案例:将room3的name改为杨启航
update room3 set name = '杨启航' where id = 2206310838;
(3)delete/truncate/drop删除语句
①delete
语法格式:这里注意delete删除数据,只会清除数据但是数据在硬盘的真实存储空间还在。
优点:支持rollback,后面还可以在恢复数据。
缺点:删除效率低。
delete from 表名 where 条件;
注意:没有条件,整张表的数据会全部删除 !即:
delete from 表名;
案例:删除room3的表中数据
delete from rooms where id = 2206310838;
删除结果:
②truncate
还有一种快速删表
的方法:truncate
(属于DDL语句)
这种删除效率比较高,表被一次截断,物理删除。
这种删除缺点:不支持回滚这种
删除优点: 快速。
语法格式:
truncate table 表名;
③drop
这里delete和truncate其实都是删除表中的数据,其实表的结构还在,只有当时用drop语句时才是真正的将表删除:
drop table 表名;