数据库管理:
sql语句:数据库用来增删改查的语句(重要)
备份:数据库的数据进行备份
主从复制、读写分离、高可用(重要)
Mysql数据库和Sql语句
一、Mysql数据库
1、数据库:组织、存储、管理数据的仓库
2、 数据库的管理系统(DBMS):实现对数据有效组织、管理和存取的系统软件
3、数据库软件:
mysql、oracle(大数据系统一般使用、大企业使用)、sql-server、MariaDB也是mysql mysld、postgreSQL(大象数据库)
4、关系型和非关系型数据库:
关系型数据库:mysql、oracle、postgreSQL
非关系型数据库:
关系型数据存储的结构:是一张二维的表格,表里面有行和列
列:是对象、字段
行:对象的信息、字段的属性
行+列组成一张表
只有关系型数据库才有表
非关系型数据库:
缓存型数据库:Redis
索引型数据库:ES
文档型数据库:MongoDB
键值对形式存储的结构
key value
test1=3
5、关系型和非关系型数据库优缺点:
关系型优点:表的结构清晰、逻辑容易整理、记录的数据比较完整
关系型缺点:读写速度比较慢、并发量差、数据迁移比较麻烦
非关系型数据库优点:可以进行高并发读写、对海量数据依旧可以保持高效率的存储和访问、
架构可扩展
非关系型数据库缺点:键值对形式储存,数据逻辑比较复杂,数据保存咋缓存当中(redis),如果意外重启所有数据都会丢失
6、mysql的数据类型:
char
:固定长度的字符类型、用于存储固定长度的字符串
char
定义好了长度之后,不论写的值是多少,多会占用固定长度的字节大小,保存咋及磁盘上都是四个字节
varchar
:可变长度的字符类型、存储的是可变长度的字符串
varchar
在保存字符串时,是多少就保存多少,在保存的字符串结尾默认有一个隐藏的结束符,会多占一个字节
varchar比char要节约磁盘空间
从读写速度来说,char的读写性能要高于varchar,char是连续的磁盘空间,保存的内容是连续的,varchar在增删改查之后会产生一些磁盘空间的碎片文件,影响读写性能
int
:存储的数据类型为整数
float
:单精数浮点数,用于存储浮点数(小数点) 格式 float(m,d) m表示总位数,d表示小数位数
double
:双精度浮点数 double(m,d) m表示总位数,d表示小数位数
date
:用于存储日期,YYYY-MM-DD,datetime用来存储日期和时间 格式 YYYY-MMM-DD HH:MM:SS
timestamp
:时间戳,和datetime类似,但是它可以自动记录当前时间
smallint
:存储小整数
bigint
:存储大整数
decimal(5,2)
:也是存储浮点数,存储精度的浮点数,5表示总位数,2表示小数位
二、数据库的管理:Sql语句
增删改查-----------sql语句
1、sql中的一些名词
数据区:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:function
调度器:event
2、sql的语言规范
在数据库系统中,
sql的语句是不区分大小的,但是建议使用大写,
sql语句可以单行或者多行,但是结尾必须以英文的分号结束
3、sql的命令规范:
库名、表名、列的名字,必须以字母开头、后面可以是数字,也可以跟上特殊符号
不要使用mysql的保留字符,如table、database、select、show
数据库、表名、用户名严格区分大小写
4、sql语言的分类
DDl
(数据库定义语言):创建数据库的对象语言、库、表和索引等等,如:create drop
DML
(数据库操作语言):对表里面的数据进行管理,如:select、update、insert、delete
DQL
(数据库查询语言):数据库的查询语句,如:select
DCL
(数据控制语言):控制和管理数据库用户的角色和权限。如:grant、revoke
TCL
(事务控制语句):用来管理数据库的事务,用于脚本开发、存储过程等等,如:commit、rollback、savepooint
DDL
:创建库和表的语句
# 一条数据库的语句是连贯的,以分号为结尾表示一条完整的sql语言,但是太长了,不方便阅读和理解,我们可以对一条语句进行分行的写法但是关键词不能跨行
CREATE TABLE student (
id int (4) not null,
# 定义表的列的属性,数据类型和是否为空;
name char (10) not null,
score decimal (5,2)
);
命令行:desc student; (展示student的详细信息)
desc student\G; (纵向展示信息)
±-----±----±--------±------+
| Null | Key | Default | Extra |
±-----±----±--------±------+
| NO | | NULL | |
| NO | | NULL | |
| YES | | NULL | |
±-----±----±--------±------+
key:表示是否是主键或者外键
default:如果没有数据的默认展示结果
extra:提供列的附加信息
5、删库和删表
删库:DROP database xy102;
删表:DROP tables student;
三、DML和DQL 管理语句和查询语句
1、DML:insert 插入数据
DML:insert 插入数据
insert into 表名(字段1,字段2,字段3) values(1,2,3);insert into student(id,name,score) values (1,'赵氏',99.98);
insert into student values (2,'钱氏',99.66);
insert into student values (3,'孙氏',99.33);
insert into student values (4,'李氏',null);insert into student values (null,null,null);
# 此时会报错,因为id和name不能为空insert into student values (5,' ',null);
# 此时表示空值,不同于null的为空insert into student values (6,'吴氏',88.88);select * from student where score is null;
# 可以检索到score为null的行select * from student;desc student;null和空值之间的区别:null就是啥也没有,就是为空,空值也是值,只是值是空
表明:null为NO表示不能为空,为YES表示可以为空,这里表示id和name不可以为空,score可以为空。
2、修改和更新
修改和更新:
# ps:只能对已有数据进行更新和修改
update # 语法
update 表名 set 列名=值 where 条件;update student set score=90 where id=4
select * from student;
# 此时4 李 的score为90update student set name='周 where id=5;
select * from student;
# 此时5 score为99.22 的name为周
3、delete删除表的数据
delete删除表的数据
delete from 表名 where 条件;delete from student where id=2;
select * from student
# 此时第二行 2 '钱' 99.66被删除,其他id不变,因为这个值是由我们自己设置生成的
4、DQL语句,查询语句:select
DQL语句,查询语句:
select *
# *表示所有列select score from student;
# 查询score列,生成结果为core的列select name,score from student;
# 查询name和score的列,生成为那么在前,score在后的列查看指定行:
select * from student limit 2,3;
# 表示显示第二行之后的三行# 显示第一行到第三行
select * from student limit 0,3;# 如何进行去重查询
select distinct name from student;
# 指定去除重复的name
# 只能指定一个内容进行查重,不能指定多个内容进行查重
5、where语句:就是条件的筛选
where语句:就是条件的筛选,select * from student;select * from student where id=7;
# 筛选出id为7的行
# 筛选出id为7且score为88.88的行
select * from student where id=7 and score=88.88;# and 表示逻辑且的意思 or 表示逻辑或的意思
6、模糊查询:like
模糊查询:
likeselect * from student where name like '赵%';
# 以什么(赵)为开头select * from student where name like '%氏';
# 以什么(氏为结尾select * from student where name like '%氏%';
# 只有包含(氏)即可
7、修改表名和表的结构:alter
# ALTER 修改表名和表的结构
如何修改表名
alter table student rename stu01;
# 修改后刷新,查看表名变为stu01如何给表添加一列
alter table stu01 add address varchar(50)default '地址不详细';
select * from stu01;
# 此时新增一列为address 地址不详# 修改字段的数据类型
alter table stu01 modify column address char(10);# 删除例
alter table stu01 drop address;# 修改列的名称
alter table stu01 change name username char(10);
# 后面一定要加数据类型,不然会报错
# 修改前为name 修改后为username
desc stu01;
table stu01 add address varchar(50)default ‘地址不详细’;
select * from stu01;
此时新增一列为address 地址不详
修改字段的数据类型
alter table stu01 modify column address char(10);
删除例
alter table stu01 drop address;
修改列的名称
alter table stu01 change name username char(10);
后面一定要加数据类型,不然会报错
修改前为name 修改后为username
desc stu01;