数据库
文章目录
MySQL
MySQL的安装与初步认识
库和表的操作以及MySQL中的数据类型
基础增删改查
进阶增删改查
索引与事务
MySQL的安装与初步认识
初步认识:
数据库: 存储数据的仓库
存储介质: 本质上数据的存储介质依然是磁盘 (也有内存数据库, 但是基于内存的易失特性, 因此最终还是需要持久化存储)
数据库与文件存储的区别: 数据库不单单是存储数据的仓库还包含一套数据库管理系统
数据安全问题: 文件是在磁盘上随意存储, 但是数据库的数据通过管理系统提议进行管理
文件不利于海量存储, 查询: 数据库管理系统为数据的存储设计了一套合适的数据结构
文件在进程中控制不方便: 数据库管理系统通常是C/S架构, 不仅仅支持本地访问, 也支持远程访问, 并且内部实现安全操作
数据库种类:
关系型数据库: 以某种关系模型 (库, 表, 行, 列) 进行数据组织的数据库
Oracle, SqlServer, MySQL, mariadb, sqlite…
非关系型数据库: 当前更多指的是不基于sql实现的数据库
Redis, MongoDB, memcached,
sql: 结构化查询语言
MySQL服务器安装
CentOS 7通过yum安装mariadb
https://zhuanlan.zhihu.com/p/49046496
mysql -uroot 打开mysql客户端
查看字符集的设置正确与否:
1. 打开客户端连接服务器成功
show variables like"%char%";
数据库基础
库的操作,数据类型,表的操作
sql语法规则-注意事项:
sql语句并不区分大小写;
sql语句每一条都要以英文分号结尾;
sql语句中并不区分单引号与双引号;
sql语句中库名称,表名称,字段属性名称不能随意使用关键字;
库的操作
查看所有数据库:
show databases;
创建数据库:
create database if not exists db_name;
删除数据库:
drop database db_name;
选择所要操作的数据库:
use db_name;
查看当前选定的数据库:
select database();
表的操作
因为涉及到一张表中数据类型的定义
如一张学生表,其中应该有年龄,学号,姓名……
数据类型
整型:bit(n), tinyint, smallint, int, bigint
浮点型:float(m, d), double(m, d), decimal(m, d), numeric(m, d); m表示数字的格式,d表示其中小数的数字占据的个数
字符串类型:varchar(n), text, mediumtext, blob; n表示字符的个数限制, 不是所占字节长度的限制
日期类型:timestamp,datestamp
表的操作:前提是一定要先选择所操作的数据库
查看库中所有的表:
show tables;
创建表:
create table if not exists student_tb(sn int, name varchar(8), age int, ch decimal(4, 2), en decimal(4, 2), birth datetime);
查看表结构:
describe student_tb; desc student_tb;
修改表结构:
alter table student_tb add math decimal(4, 2); alter table student_tb drop age;
删除表:
drop table student_tb;
基础增删改查
新增:insert [into]
默认全列插入:
insert student_tb values(1101, "张三", 18, 87.55, 9.999, "2003-08-07 12:12:32");
指定列插入:
insert student_tb (sn, name, ch, en, age) values(1002, "李四", 67.5, 87.5, 19);
多列插入:
insert student_tb (sn, name, ch, en, age) values(1002, "赵六", 57.5, 47.5, 19)(1003, "王五", 77.5, 94.5, 17);
修改:update……set……; 修改数据需要注意的是一定要设置过滤条件,否则会针对全部数据进行修改
默认全部修改:
update student_tb set birth="2003-08-15 08:32:54";
会对表中所有学生的生日进行修改
修改指定列指定行数据:
update student_tb set birth="2003-08-15 08:32:54" where name="张三";
删除:delete from……
默认删除表中所有数据:
delete from student_tb;
删除指定行数据:
delete from student_tb where name="赵六";
查询:select……from……
默认全列查询:
select * from student_tb;
指定列查询:
select sn, name, ch, en, from student_tb;
查询字段是表达式:
select sn, name, ch+en from student_tb;
查询字段起别名:
select sn, name, ch, en, ch+en, as total, from student_tb;
去重查询:distinct; 去重的查询结果只有去重依据字段
单列去重:
select distinct sn from student_tb;
多列去重:
select distinct sn, name from student_tb;
排序查询:order by … desc/asc; desc-降序、asc-升序; 默认是升序
以单列排序:
select * from student_tb order by ch desc;
以多列排序:
select * from student_tb order by sn desc, ch desc;
第一列相同情况下使用第二列进行排序
分页查询:limit n -限制去除前n条; limit n offset s --从偏移量第s条开始取出n条数据
查询语文成绩前三名:
select * from student_tb order by ch desc limit 3;
每页2条,获取第1条数据:
select * from student_tb order by ch desc limit 2 offset 2;
(第0页是第0条和第1条,则第1页偏移量从2开始)
条件查询:给查询设置一个过滤条件,符合条件的数据才能被查询出来
而条件查询会使用到条件表达式
比较的关系运算符:<, >, >=, <=, =, !=, <=>, <>
范围查询:between … and…
select * from student_tb where ch between 60 and 80;
集合查询:in (a, b, c…)
select * from student_tb name in("张三", "张老三", "张小三");
模糊查询:like
select * from student_tb where name like "%四%";
空值查询:is null, is not null
select * from student_tb where birth is not null;
逻辑运算符:
逻辑与:and -双目运算符,连接两个条件表达式,两个同为真
逻辑或:or -双目运算符,连接两个条件表达式,任意一个为真,则结果为真
逻辑非:not
版权归原作者 李憨憨_ 所有, 如有侵权,请联系我们删除。