目录
关于库的操作:
1.显示数据库:
语法:show databases;
显示数据库:
2.创建数据库:
语法:create database [if not exists] db_name[create_specification, [create_specification]];
create_specification是创建规格的意思,它主要有两种:
1.[default]character set charset_name指定数据库采用的字符集
(或者:charset charset_name)
2.[default]collate collation_name指定数据库字符集的校验规则(默认是utf8)
说明:[]内的语句表示可选择项。
创建一个数据库db_test如果它还未被创建:
创建一个字符集为utf8的数据库db_test如果它还未被创建:
值得一提的是如果你没有设置数据库的字符集为utf8,那么在后面插入带有中文的数据是就会报错!!!
3.使用数据库:
语法:use db_name;
使用数据库:
只有使用了该数据库,才能在该数据库中修改表数据等操作~~
4.删除数据库
语法:drop database [if exists]db_name;
删除数据库:
注意:删除数据库之后,内部看不到数据库,里面的表和数据全部被删除,所以删库是一种非常危险的操作,千万要谨慎操作!!
数据库类型:
在学习对表的增删查改之前,我们先来认识一下数据库的类型把吧:
1.数值类型:
数据类型 | 大小 | 说明 | 对应Java类型 |
bit[(M)] | M指定位 数,默认 为1 | 二进制数,M范围从1到64, 存储数值范围从0到2^M-1 | 常用Boolean对应BIT,此时 默认是1位,即只能存0和1 |
tinyint | 1字节 | Byte | |
smallint | 2字节 | Short | |
int | 4字节 | Integer | |
bigint | 8字节 | Long | |
float(M, D) | 4字节 | 单精度,M指定长度,D指定 小数位数。会发生精度丢失 | Float |
double(M, D) | 8字节 | Double | |
decimal(M, D) | M/D最大值+2 | 双精度,M指定长度,D表示 小数点位数。精确数值 | BigDecimal |
numeric(M, D) | M/D最大值+2 | 双精度,M指定长度,D表示 小数点位数。精确数值 | BigDecimal |
2.字符串类型:
数据类型 | 大小 | 说明 | 对应Java类型 |
varchar(size) | 0-65,535字节 | 可变长度字符串 | String |
text | 0-65,535字节 | 长文本数据 | String |
mediumtext | 0-16 777 215字节 | 中等长度文本数据 | String |
blob | 0-65,535字节 | 二进制形式的长文本数据 | byte[] |
3.日期类型:
数据类型 | 大小 | 说明 | 对应Java类型 |
DATETIME | 8字节 | 范围从1000到9999年,不会进行时区的 检索及转换。 | java.util.Date、 java.sql.Timestamp |
TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时 区并进行转换。 | java.util.Date、 java.sql.Timestamp |
关于表的操作:
1.创建表:
需要操作数据库中的表之前,首先要使用该数据库:
语法:
create table table_name (
field1 datatype,
field2 datatype,
field3 datatype
...
);
//注意,一定是先写field(字段名字),再写datatype(类型名)
我们可以使用comment增加字段说明:
2.查看表结构:
语法:
desc table_name;
3.删除表:
语法:
drop table [if exists]table_name[,table_name1, ...//可以同时删除多个表结构];
表的增删查改:
1.新增:
语法:
insert [into] table_name [(column, column ...)] values(value_list)
[, (value_list) ... ];
insert语句可以单行数据、多行数据,全列插入、指定列插入
我们先新建一张学生表:
单行数据 + 全列插入:
多行数据 + 指定列插入:
2.查询:
语法:
select
[distinct] {* | {column [,column...] }
from table_name
[where ...]
[order by column[asc | desc],...]
[limit...];
我们先来创建一个考试成绩表:
再插入数据:
1.进行全列查询:
2.指定列查询:
3.查询字段为表达式:
4.别名:
语法:
select from column [as] alias_name [...] from table_name;
将语数英成绩汇总进行查询:
5.去重:distinct
使用distinct关键字
我们先插入一组id为1的数据:
查询一下:
使用distinct:
发现去重了~~
6.排序:
select ... from table_name [where ...] order by colimn [asc|desc], [...];
asc表示升序
desc表示降序
默认是升序
注意:
1.没有order by的查询语句,返回的结果是无序的,大家不要依赖这个初始顺序,因为是有可能变化的。
2.null数据排序,被视为比任何值都要小,升序出现在最上面,降序出现在最下面。
使用表达式 + 别名、升序进行排序
可以使用多个字段进行排序,排序顺序优先级随书写顺序:
7.条件查询
比较运算符:
运算符 | 说明 |
>, >=, <, <= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
<=> | 等于,NULL 安全,例如 NULL NULL 的结果是 TRUE(1) |
!=, <> | 不等于 |
between a0 and a1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
in (option, ...) | 如果是 option 中的任意一个,返回 TRUE(1) |
is null | 是 NULL |
in not null | 不是 NULL |
like | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字 符 |
运算符:
运算符 | 说明 |
and | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
or | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
not | 条件为 TRUE(1),结果为 FALSE(0) |
基本查询:
1.查询英语成绩不及格的同学的英语成绩:
2.查询语文成绩好友英语成绩的同学:
3.查询总分在200一下的同学
注意:where语句里不能使用前面定义的别名:
原因是where语句比前面的定义别名语句先执行。
and、or:
1.查询语文成绩大于80分,且英语成绩大于80分的同学
2.查询语文成绩大于80分,或英语成绩大于80分的同学
3.观察AND 和 OR 的优先级:
访问查询:
1.查询语文成绩在[80. 90]分的同学及语文成绩
2.使用and也可以实现
3.查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
4.使用 or 也可以实现
注意这里是 = 号,而不是 ==
模糊查询:like
1.%匹配任意多个(包括0)个字符
2._匹配严格的一个任意字符
null的查询:is [not] null
1.查询 qq_mail 已知的同学姓名
2.查询 qq_mail 未知的同学姓名
分页查询:
1.从0开始,筛选n条结果
select ... from table_name [where ... ] [order by ... ] limit n;
2.从s开始,筛选n条结果
select ... from table_name [where ... ] [order by ... ] limit s, n;
3.从s开始,筛选n条结果,比第二种更清楚,推荐使用
select ... from table_name [where ... ] [order by ... ] limit n offest s;
第一页:
第二页:
第二页:如果不足n条,不会受影响
3.更新
update table_name set column = expr [, column = expr ...]
[where ...] [order by ...] [limit ...];
1.将孙悟空同学的数学成绩变更为 80 分
2.将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
3.将总成绩倒数前三的 3 位同学的数学成绩加上 10 分
4.将所有同学的语文成绩加10分
4.删除
语法:delete from table_name [where ...] [order by ...] [limit ...];
1.删除孙悟空同学的考试成绩
2.删除整表数据
可以看出表亦然存在,但是表里的数据全部被删除。
删除操作也要谨慎操作!!
本篇完~~