目录
(一)数据库操作
写在前面:本文只写到数据库中基本的CRUD,其他如联合查询,外内自链接,数据库约束并未提及,为避免浪费读者时间,请寻找其他文章
(1)显示数据库
显示所有数据库
show databases;
(2)创建数据库
如果没有名为test的数据库则创建一个名为test的数据库,并用utf8mb4数据集
create database if not exists test character set utf8mb4;
(3)使用数据库
使用test数据库
use test;
(4)删除数据库
删除test数据库(危险操作)
drop database test;
(二)表操作
想要进行表操作需要先进入数据库(use 数据库名)后才能进行
(1)创建表
创建一个名为student的表,字段有id,name,password,age,棕色字段为数据类型,comment为对字段添加的说明,相当于注释
create table student(id int,
name varchar(15) comment '名字',
password varchar(30) comment '密码',
age int
);
(2)查看表结构
查看student表的结构
desc student;
(3)删除表
删除student表
--删除student表
drop table student;
--如果存在student表则删除student表
drop table if exists student;
(三)常用数据类型总结
数据类型为设置字段时,需要指定的类型
(1)数值类型
数据类型 | 大小 | 解释 | java中对应类型 |
---|---|---|---|
bit[(M)] | M指定位数,默认是1 | 二进制数,M范围从1到64(64位系统)数值范围为2^M-1 | 常用Boolean对应bit用来表示,此时默认1位,用来表示true和false |
tinyint | 1字节 | Byte | |
smallint | 2字节 | Short | |
int | 4字节 | Integer | |
bigint | 8字节 | Long | |
float(M,D) | 8字节 | 单精度浮点数,M指定长度,D指定小数位数,会发生精度丢失 | Float |
double(M,D) | 8字节 | Double | |
decimal(M,D) | M或D中的最大值+2 | 双精度,M指定长度,D指定小数点位数。精确数值 | BigDecimal |
numeric(M,D) | M或D中的最大值+2 | 同decimal | BigDecimal |
(2)字符串类型
数据类型 | 大小 | 解释 | 对应java类型 |
---|---|---|---|
varchar(size) | 0-65535字节 | 可变长字符串 | String |
text | 0-65535字节 | 长文本数据 | String |
mediumtext | 0-16777215字节 | 中等长度文本数据 | String |
blob | 0-65535字节 | 二进制形式长文本数据 | byte[] |
(3)日期类型
数据类型 | 大小 | 解释 | 对应java类型 |
---|---|---|---|
datetime | 8字节 | 范围1000-9999年,不会进行时区的检索及转换 | java.util.Date, java.sql.timestamp |
timestamp | 4字节 | 范围1970-2038年,自动检索当前时区并转换 | java.util.Date, java.sql.timestamp |
(四)新增
此处新增指的是对表中字段的操作
假设我们创建了一个表,表中字段有姓名,年龄,性别,学号,和自增id,如下
CREATE TABLE student (
id SERIAL PRIMARY KEY, --自动生成唯一id
student_id VARCHAR(20) NOT NULL UNIQUE, -- 学号,假设是VARCHAR类型,且每个学号都是唯一的
name VARCHAR(100) NOT NULL, -- 姓名
age INT CHECK (age >= 0), -- 年龄,假设不允许负数
gender ENUM('male', 'female', 'other') NOT NULL -- 性别,使用ENUM类型限制可能的值
);
(1)单行全列插入
就是插入一行,将所有字段都插入进去
insert into student values(1,'54221332','张三',20,'male');
(2)多行指定列插入
表中只指定student_id,name,age字段进行插入,没有指定id和gender,但因为id是自增类型,会自动填充,gender是枚举类型,会自动将性别设置为默认的值,若是其他普通字段,未插入的部分默认值为null.
insert into student(student_id,name,age) values('12345','李四',21);
(五)查询
此处查询依然以上方的student表为模板
(1)全列查询(危险操作)
查询student表中的所有列
select * from student;
(2)指定列查询
只查询姓名和年龄
select name,age from student;
(3)查询字段为表达式
查询姓名和年龄+10
select name,age + 10 from student;
(4)别名
将student_id的列设置别名为code
select student_id as code ,name from student;
结果:
(5)去重(distinct)
下图是有年龄重复的student表
对age重复的进行去重查询
select distinct age from student;
结果:
(6)排序
注意:null数据视为比其他任何数据都小
6.1asc升序
将查询结果按照年龄升序排序
select * from student order by age asc;
结果:
6.2desc降序
将查询结果按照年龄降序排序
select * from student order by age desc;
结果:
6.3多字段排序
对多个字段进行排序,排序优先级随书写顺序
首先对age进行降序排序,再对id进行升序排序
select * from student order by age desc ,id asc;
(7)WHERE:条件查询
7.1运算符汇总
运算符 | 说明 |
---|---|
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,null不安全,null = null结果是null |
<=> | 等于,null安全,null<=>null结果为true |
!=,<> | 不等于 |
between a0 and a1 | 范围匹配,[a0,a1],如果a0<=value<=a1,返回true |
in(option,....) | 如果是option中的任意一个,返回true |
is null | 是null 返回true |
is not null | 不是null返回true |
like | 模糊匹配,%表示任意多个任意字符(包括0个),_表示任意一个字符 |
and | 多个条件都是true,结果才为true |
or | 任意一个条件为true,结果就是true |
not | 条件是false,结果才是true |
7.2简单用例
查询name为李四,age大于10的结果(and, = ,>)
select * from student where name = '李四' and age>10;
查询年龄在10到20之间的数据(between and)
select * from student where age between 10 and 20;
查询年龄是21,10,15的数据(in)
select * from student where age in(21,15,10);
模糊查询 (like)
查询姓王的二字的人的数据
select * from student where name like '王_';
查询姓王的人的数据
select * from student where name like '王%';
查询年龄不是20岁的数据 (not)
select * from student where not age = 20;
(8)LIMIT:分页查询
如果一个表中的数据很多,如果一下查出来完可能会导致数据库卡死,所以需要对查出来的数据进行分页操作,保证一次查到的数据不会太多
(由于需要的测试用例原因,我把表名从student,改成了students)
查询数据库中十条数据,并显示第一页的内容
limit 10 :意思是查询十条数据
offset 0:意思是从第一条数据开始(0,就像数组下标一样,第一个是0,然后是1,2,3)
如果你想看第二页的offset应该是 10,因为一页10个数据,从第11个数据开启第二页
select * from students limit 10 offset 0;
(六)修改(update set)
将students 表中姓王的学生的年龄都改成20岁
update students set age = 20 where name like '王%';
(七)删除(delete)
删除表中的数据
删除表中年龄大于20的学生的数据
delete from students where age >20;