数据库的概念
数据库的概念:数据库是用来组织(各个数据之间是有关联,是按规则组织起来的),存储和管理(增,删,改,查)的仓库
数据库管理系统(DBMS):实现对数据的有效组织,管理和存取的系统软件
数据库是一个系统,一个人机系统。包含硬件,os,数据库,DBMS和数据库的用户共同组成。
用户是通过DBMS (各种数据库软件)来对数据库进行操作
随着时代的发展,当今数据库可分为两大类:关系数据库(SQL)和非关系数据库(NO SQL)两大类 。
关系型数据库
关系数据库的存储结构是二维表格 ,表是有行和列。行称为记录,是用来描述一个对象的信息。列称为字段,是用来描述对象的一个属性
关系性数据库常见的有:MYSQL ,Oracle,SQL-Server,MariaDB, postgreSQL
缓存性数据库: redis Memcache
索引型数据库: ES(Elasttic search)
时序型数据库:Prometheus
文档型数据库:MongoDB
非关系型数据库:是键对值的存储结构(key ——————> VALUE)
优点:可高并发读写,对海量数据依旧保持着高效率的存储和访问,具有高扩展性和高可用性
mysql数据库的存储引擎
5.5之前:MYSAM,不支持事物和外键的存储引擎。适用于读的多,写的少
5.6之后默认的引擎:innodb,可以支持事物,外键,行级锁定的存储引擎,支持高并发性能的应用。
事物:在数据库当中,一个或者多个操作组成的数据库操作的序列。这些操作要么全都成功,失败一个就全部不执行。
此操作原因:确保数据一致性和完整性
事物的特点:
1.原子性(数据库的最小工作单位),要么全部执行成功,要么全部不执行,只要有一个操作时间,整个执行的序列都会被回滚。完成的操作也会被撤销
2.一致性:事物执行前后,数据库的完整性约束不能被破坏。只有在满足所有的约束条件下,事物才能被提交。
3.隔离性:事物的执行是相互隔离。一个事物的执行不能收到其他执行事物的干扰。并发事物之间互相隔离,防止数据不一致的情况发生
4.持久性:事物一旦提交他所作的所有修改,会被永久的保存在数据库中。即使系统崩溃,提交的数据也不丢失。确保数据库始终处于一致性的状态。确保数据库的完整性和一致。
Mysql的名词
1.数据库:database
2. 表 : table
行 : row
列 : column
3.索引:index
4.视图:view
5.存储过程:procedure
6.触发器:trigger
7.用户:user
8.权限:privilege
mysql的语句规范
在数据库系统中,sql不区分大小写,但是建议大写。语句不区分,但是表名严格区分大小写。
sql语句可以单行也可以多行书写,但默认都以 ;结尾。
关键词不能跨行或者简写。
子语句通常位于度路航,便于编辑,提高可读性。
数据库命名规范
1.必须已字母开头,后面可以包含数据,特殊字符:#_$
2.不能使用mysql的保留字作为名字 :table select
3.数据库名 表名 用户名严格区分大小写
数据库的字符类型
字符类型 | 用法 |
int | 4个字节,用来存储整数,范围很大 |
char | 只能存取固定长度的字符串,用来存储定长的字符串 |
varchar | 可变长度的字符类型,存储可变长度的字符串。(无限制的可以随便写) |
float (m,d) | 单精度浮点 m:总长度 d:小数位 |
double (m,d) | 双精度浮点数,存储浮点数 。M是总位置,d表示小数位 |
text | 用于存储大文本数据 ,文档,或者字符长度 |
image | 二进制存储的图像,图片,多媒体 |
decimal (5.2) | 用于存储固定精度的小数,其中5表示总位数,2表示小数位。 |
date | 存储日期:YYYY-MM-DD |
datetime | 存储日志 yyyy-mm-dd hh:mm:ss (年-月-日-时-分-秒) |
timestamp | 和datetime格式一致,可以自动更新位当前的时间戳 |
char和varchar的区别
char:无论是否定义了值,他都会占用固定长度的字节大小
varchar:在保存时,varchar14 实际长度是5。结果就是实际长度+隐藏符号=6个
varchar比char节省磁盘空间,但是varchar读写速度比char慢
sql语句的分类
CREATE :创建
DROP :删除
ALTER:修改
show global variables like 'port';
show databases;
查看库
use mysql;
//使用mysql库
show tables;
describe user\G;
//纵向查看
desc test1;
//简写
show databases;
create databases zzr;
create table hj (id int(4) not null,name varchar(10) not null,score decimal(5,2),passwd char(48),primary key(id));
desc hj;
//查看表结构
null和空格的区别:
null表示什么都没有,对象没有任何的描述信息。
DML:数据操纵语言,对表中的数据进行管理
select:查看
update:更新
insert:添加
delect:删除 对表进行删除操作
insert into hj values(4,'ZZR',92,password('789'))
mysql> update hj set passwd=password('456') where id = 3;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> select * from hj;
+----+------+-------+-------------------------------------------+
| id | name | score | passwd |
+----+------+-------+-------------------------------------------+
| 1 | A | NULL | |
| 2 | 啊 | 90.00 | 123 |
| 3 | AAA | 95.00 | *531E182E2F72080AB0740FE2F2D689DBE0146E04 |
| 4 | ZZR | 92.00 | *531E182E2F72080AB0740FE2F2D689DBE0146E04 |
+----+------+-------+-------------------------------------------+
4 rows in set (0.01 sec)
mysql> delete from hj where id = 4;
mysql> select * from hj;
DQL语言:查询数据记录
select * from hj where id = 3;
+----+------+-------+-------------------------------------------+
| id | name | score | passwd |
+----+------+-------+-------------------------------------------+
| 3 | AAA | 95.00 | *531E182E2F72080AB0740FE2F2D689DBE0146E04 |
+----+------+-------+-------------------------------------------+
1 row in set (0.00 sec)
//查看指定行
mysql> select * from hj limit 2,3;
+----+------+-------+-------------------------------------------+
| id | name | score | passwd |
+----+------+-------+-------------------------------------------+
| 3 | AAA | 95.00 | *531E182E2F72080AB0740FE2F2D689DBE0146E04 |
+----+------+-------+-------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from hj limit 1,3;
+----+------+-------+-------------------------------------------+
| id | name | score | passwd |
+----+------+-------+-------------------------------------------+
| 2 | 啊 | 90.00 | 123 |
| 3 | AAA | 95.00 | *531E182E2F72080AB0740FE2F2D689DBE0146E04 |
+----+------+-------+-------------------------------------------+
2 rows in set (0.00 sec)
limit 2;
//表示前两行
mysql> select distinct name from hj;
+-----------+
| name |
+-----------+
| A |
| 啊 |
| AAA |
| zhaozirui |
| 赵子瑞 |
+-----------+
5 rows in set (0.00 sec)
//查看指定列
修改表的名称
mysql> show tables;
+---------------+
| Tables_in_zzr |
+---------------+
| hejing |
+---------------+
1 row in set (0.00 sec)
mysql> alter table hejing rename hj;
//格式
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+---------------+
| Tables_in_zzr |
+---------------+
| hj |
+---------------+
1 row in set (0.00 sec)
mysql> update hj set birth=date('2002-5-31') where id = 4;
//根据唯一索引查看定位
mysql> alter table hj change birth birthday datetime;
删除列
mysql> alter table hj drop birthday;
mysql> alter table hj modify column passwd varchar(52);
Query OK, 5 rows affected (0.01 sec)
DCL:数据控制语言,设置或者更改数据库用户或者用户权限
GRSNT:赋予权限
REMOVE:取消权限
TCL:事物控制语句,管理数据库当中的事物
commit:确认提交事物,一旦提交就无法修改
ROLLBACK:事物提交之后无法回滚。
savepoint保存点,可以回滚