1、数据库
1.1、数据库管理:
-
sql语句 数据库用来增删改查的语句。重要*
-
备份 数据库的数据进行备份。
-
主从复制,读写分离 高可用。重要*,原理–面试。
-
数据库的概念、语法和规范
1.2、数据库的定义
数据库:组织,存储,管理数据的仓库。
数据库的关系系统(DBMS):实现对数据有效组织,管理和存取的系统软件。
- mysql
- oracle–##大数据系统一般使用
- sql-server
- MariaDB也是mysql mysqld
- postgreSQL 大象数据库
1.3、数据库的类型:关系型数据库和非关系型数据库。
1.3.1、关系型数据库
mysql
oracle
postgreSQL
关系型数据存储的结构:是一张二维的表格,表里面有行和列。
列是对象,字段。
行:对象的信息,字段的信息。
行+列组成一张表。
只有关系型数据库才有表。
1.3.2、非关系型数据库:
缓存型数据库:redis
索引型数据库:ES
文档型数据库:MongoDB
键值对形式存储的结构:
key value
test1=3
1.4、关系型数据库和非关系型数据库的优缺点:
- 关系型的优点:表的结构清晰,逻辑容易整理,记录的数据比较完整。
- 关系型的缺点:读写数据比较慢,并发量差,数据迁移比较麻烦。每个表都是关联的。
- 非关系型数据库优点:高并发读写,对海量数据依旧可以保持高效率的存储和访问,架构可扩展。
- 非关系型数据库缺点:键值对形式存储,数据逻辑比较复杂,数据是保存在缓存(内存)当中(redis),如果意外重启,所有数据都会丢失。
1.5、mysq的数据类型:
char
:固定长度的字符串类型,用于存储固定长度的字符串。
varchar
:可变长度的字符串类型,存储的是可变长度的字符串。
char
定义好长度之后,不论写了值是多少,都会占用固定长度的字节大小。保存在磁盘上都是4字节。
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-MM-DD HH:MM:SS
timestamp
和datetime
类似,但是他可以自动记录当前时间。
smallint
:存储小整数。
bigint
:存储大整数
decimal(5,2)
:存储浮点,存储精度的浮点数,5表示总位数,2,表示小数位。
2、数据库的管理:
增删改查----sql语句
2.1、sql中的名词:
- 数据库:databases
- 表:table
- 行:row
- 列:column
- 索引:index
- 视图:view
- 用户:user
- 权限:privilege
- 存储过程:procedure
- 存储函数:funcrion
- 调度器:exent
2.2、sql的语言规范:
在数据系统中,sql语言不区分大小写,但是建议大写。
sql语句可以分单行和多行,但是必须要以";"
结尾。
2.3、命令规范:
库名、表名、列的名字,必须以字母开头,后面可以数字。后面也可以跟上特殊符号。
不要使用mysql的保留字,table select show databases
数据库名,表名,用户名严格区分大小写。
2.3.1、sql语言的分离:
1、DDL 数据库定义语言:用来创建数据库的对象语言,库,表和索引等等。
create
创建 drop
丢弃删除
2、DML:数据库操作语言,可以对表里面的数据进行管理
select
筛选 update
改 insert
增 delete
删
3、DQL 数据库查询语言。
select筛选
4、DCL 数据控制语言,控制和管理数据用户的角色和权限。
grant:GRANT命令用于授予用户对数据库对象的特定访问权限。数据库管理员可以使用GRANT命令来精确地控制用户对数据库对象(如表、视图、存储过程等)的访问和操作权限。
revoke:REVOKE命令用于回收已经授予的权限。当一个用户或角色不再需要访问特定的数据库对象,或者他们的访问权限需要被限制时,数据库管理员可以使用REVOKE命令来撤销他们的权限。
5、tcl 事务控制语句,用来管理的数据库的事务,脚本开发,存储过程等等。
commit rollback savepoint
DDL:一条数据库的语句是连贯的,已分号为结尾表示一条完整的sq1,但是太长了,不方便阅读和理解。我们可以对一条语句进行分行的写法。
关键词不能跨行
2.4、创建库的语句:
CREATE DATABASE 数据库名;
点击运行
F5##刷新
xshell命令行:
use 库名;
show tables;
2.5、创建表的语句:
select * FROM student;
##查询表所有列的内容
desc student;
##查看表结构
CREATE table 表名 (
ID INT (4) NOT NULL,
#定义表的列的属性,数据类型和是否为空;
NAME CHAR(10) NOT NULL,
score DECIMAL(5,2)
);
select * FROM student;
##查询表所有列的内容
use xy102;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------+
| Tables_in_xy102 |
+-----------------+
| student |
+-----------------+
1 row in set (0.00 sec)
mysql> desc student;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| ID | int | NO | | NULL | |
| NAME | char(10) | NO | | NULL | |
| score | decimal(5,2) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
-----+---------+-------+
Key | Default | Extra |
-----+---------+-------+
| NULL | |
| NULL | |
| NULL | |
-----+---------+-------+
key:
表示是否是主键或者外键
default:
如果没有数据的默认展示结果
extra:
提供列的附加信息。自增长等等。
desc student;
##查看表结构
desc student\G;
mysql> desc student\G;
*************************** 1. row ***************************
Field: ID
Type: int
Null: NO
Key:
Default: NULL
Extra:
*************************** 2. row ***************************
Field: NAME
Type: char(10)
Null: NO
Key:
Default: NULL
Extra:
*************************** 3. row ***************************
Field: score
Type: decimal(5,2)
Null: YES
Key:
Default: NULL
Extra:
3 rows in set (0.01 sec)
2.6、数据库命令操作
2.6.1、删除数据表
DROP table 表名;
删除表
CREATE table student (
ID INT (4) NOT NULL,
#定义表的列的属性,数据类型和是否为空;
NAME CHAR(10) NOT NULL,
score DECIMAL(5,2)
);
DROP table student;删除表
2.6.2、删除数据库
DROP database 数据库名;
删除库
CREATE table student (
ID INT (4) NOT NULL,
#定义表的列的属性,数据类型和是否为空;
NAME CHAR(10) NOT NULL,
score DECIMAL(5,2)
);
DROP database student;删除库
2.6.3、数据表中插入数据
DML和DQL 管理语句和查询语句
DML:insert插入数据
insert into 表名(字段1,字段2,字段3) values(1,2,3);
insert into 表名(字段1,字段2,字段3) values(1,2,3);
insert into student(id,name,score)values(1,'成千',87.6);
insert into student values(2,'zhai',88.8);
insert into student values(3,'zhai',null);
select * from student;
insert into student(id,username,score,address) values(10,'成千',null,null);##只有null为yes,可以输入null。但是不能空。
insert INTO student VALUES(11,' ',98,NULL);
null和空值之间的区别;
null就是啥也没有,就是为空。
空值也是值,只是值为空
select * from student where name is null;
select * from student where score is NULL;
2.6.4、修改和更新:
update更新
update 表名 set 列名=值 where 条件;
update student set score=90 where id = 3;--------##把id=3的行的score的值更新为90
select * from student;
delete删除表中行的数据
delete from 表名 where 条件;
delete from student where id=3;-----##删除student表中的id=3的那一行
select * from student;
DQL语句,查询语句:-----查询列
select score,name from student;--------##表示筛选列名为score,name列展示。
select * from student;--------##*表示所有列。。
查看指定行:
SELECT * FROM student LIMIT 2,2;----##查看3-4行,不包含第二行
SELECT * FROM student LIMIT 0,3;##查看1-3行,相当于从0开始后,筛选3行,就是1-3行。
去重查询:
SELECT DISTINCT id FROM student;----##对id相同的内容进行去重
insert into student values(7,'ji',85);
SELECT DISTINCT NAME from student;----##对username相同的内容进行去重
WHERE 语句 条件的筛选:
AND 且
or 或
select 筛选内容 from student where 条件1 or/and 条件2;
select * from student;
select name from student where id = 7 or score =91;----##筛选名称,条件是id=7或者score=91;
AND 且
or 或
模糊查询:like
以zh开头;
SELECT * FROM student WHERE name like 'zh%';---##筛选名字以zh开头的所有列
以ai结尾;
SELECT * FROM student WHERE name like '%ai';---##筛选名字以ai结尾的所有列
包含ji即可
SELECT * FROM student WHERE name like '%ji%';---##筛选名字包含ji的所有列
SELECT * FROM student WHERE name like '%i%';---##筛选名字包含i的所有列
ALTER 修改表名和修改表结构
alter table student rename stu01;表名student改为stu01
ALTER 修改表名和修改表结构
alter table stu01 rename student;
给表添加一列:
ALTER table student add address varchar(50) default '地址不详';
DESC student;##添加address列,可变长度,默认'地址不详'
修改字段的数据类型:
ALTER TABLE student MODIFY COLUMN address char(10);
DESC student;
删除列:
ALTER table student DROP address;
#修改列的名称
alter table student change name username char(10);
DESC student;
dent改为stu01
### ALTER 修改表名和修改表结构
alter table stu01 rename student;
### 给表添加一列:
ALTER table student add address varchar(50) default ‘地址不详’;
DESC student;##添加address列,可变长度,默认’地址不详’
### 修改字段的数据类型:
ALTER TABLE student MODIFY COLUMN address char(10);
DESC student;
### 删除列:
ALTER table student DROP address;
### #修改列的名称
alter table student change name username char(10);
DESC student;