初识数据库(MYSQL)
数据库是什么?
数据库是用来组织数据,提供功能:增删改查 。数据库来进行对数据的管理。使用的是SQL语言。Mysql只是一种具体的工具。
数据库都有哪些?
Oracle:(甲骨文)数据库领域一哥,收费。Mysql被收购 --》开发MariaDB
SQlite:安卓机内置。
SQL Server :微软 和windows平台进行捆绑
Redis: Hbase: MongoDB: NoSql 数据库 非关系型数据库
关系型数据库:对数据库的约束比较严格使用表来存储。
非关系型数据库:对数据的约束不够强,通过文档结构来存储。
mysql的服务器是本体用来存储数据
客户端是用户和数据库之间沟通的桥梁
mysql 和 sql有什么区别 mysql是一种软件 sql是一种编程语言
数据库是一类软件依赖很多数据结构 数据结构一种学科 更加抽象
数据库中的类型 每一列都有自己的类型
数据库数据类型
数值类型
BIT【M】 m指定位数 默认为1 二进制从1到64
TINYINT 1字节 byte
SMALLINT 2字节 short
INT 4字节 int
BIGINT 8字节 long
FLOAT(M,D)4字节 M长度 D小数位数 float(不够精确)IEEE754标准
DOUBLE(M,D)8字节 double
DECIMAL(M,D)(M/D最大值+2)双精度 M指长度 D小数位数
NUMERIC(M,D) 和DECIMAL一样
字符串类型
VAECHAR(SIZE) 0-65535字节 可变长度 String
TEXT 0-65535字节 长文本数据 String
MEDIUMTEXT 0-16777215字节 中度长度文本 string
BLOB 0-65535 字节 二进制形式文本 byte[]
日期类型
DATETIME 8字节 1000-9999 不进行时区转换 java.util.Date java.sql.Timestamp
TIMESTAMP 4字节 1970-2038 自动检索时区进行转换 java.util.Date java.sql.Timestamp
时间戳:占用空间小 方便计算 (日志)
增删改查(基础)
数据库的使用
显示数据库:show databases;
创建数据库: CREATE DATABASE 【IF NOT EXISTS】 db_test2 【CHARACTER SET utf8mb4】;
使用数据库: use db_test2;
删除数据库:drop database if exists db_test2;
表的使用
先选中数据库:use 数据库名;
创建表:
create table [IF not EXISTS] stu_test (
id int,
name varchar(20) comment '姓名',
password varchar(50) comment '密码',
age int,
sex varchar(1),
birthday timestamp,
amout decimal(13,2),
resume text
);
可以使用comment增加字段说明 --
查看表的结构:desc 表名;
删除表: drop table if exists 表名;
默认表名列名不能使用关键字,但可以使用反引号引起来` `;
针对表的增删改查
**新增:**INSERT 【INTO】 表名 VALUES (100, 10000, ‘唐三藏’, NULL);
单行插入 数据类型必须和列匹配
指定列多行新增:
INSERT 【INTO】 表名 (id, sn, name) VALUES
(102, 20001, ‘曹孟德’),
(103, 20002, ‘孙仲谋’);
在插入时间的时候 insert into 表名 values(1,now());插入当前时间
insert into 表名 values(1,‘2021-05-29 10:75:00’);
也可以只插入日期 不能插入时间
设计表的时候 设置成为 datetime 不用timestamp 更不用字符串 datetime 会进行合法性校验
**查询:**全列查询 SELECT * FROM 表名; (临时表并不会存储在磁盘)
指定列查询 SELECT id, name, english FROM 【表名】;
查询字段表达式:SELECT id, name, chinese + math + english FROM 表名;(新的列的类型和之前不同)
别名 :通过AS来起别名
SELECT id, name, chinese + math + english 【as 】totle FROM 表名;
去重:DISINCT 多个行重复了 去掉重复的 去除多列则相当于按组查询 去除每一列重复的
SELECT DISTINCT math ,english FROM exam_result;
排序 ORDER BY
ASC 升序 DESC 降序
select * from 表名 order by 列名 desc; 默认升序
多列排序 先按照第一列排序 如果相同按照第二列 以此类推。
条件查询 where+具体的查询条件
运算符
= null=null 结果是null 不安全 <=> null<=>null 结果是true
不相等!= <>
BETWEEN a AND b [a,b]
is null is not null 空和非空
like 模糊匹配 %表示多个包括(0)任意字符 _任意一个字符
AND 多个条件必须是true or 任意一个为true NOT 条件为true 结果为false
AND优先级高于or
总分小于200分
SELECT name, chinese + math + english 总分 FROM exam_result WHERE chinese + math + english < 200;
(where 语句中不能使用别名)
查询语文成绩大于80分,且英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 and english > 80;
查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
SELECT name FROM exam_result WHERE name LIKE ‘孙%’;-- 匹配到孙悟空、孙权
SELECT name FROM exam_result WHERE name LIKE ‘孙_’;-- 匹配到孙权
查询空置<=> is null
分页查询(目的和条件查询类似 防止大数据太多 导致数据库卡死) LIMT
select * from 表名 limit 3 0开始检索3条
select * from 表名 order by Chinese asc limit 2 ,3 select * from 表名 order by Chinese asc limit 3 offset 2; 语文成绩按照升序从第二个开始检索3条
修改
UPDATE 表名 set 列名 =值 加上条件【where 】 【order by 】【limit】
将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT 3;
多列修改 用逗号隔开。
删除
DELETE FROM 表名 [WHERE …] [ORDER BY …] [LIMIT …]
删除整张表 不写where字句 但是和drop table 表名不一样 前者表的本身还在 后者整张表都不在了