数据库01
数据库
数据库就是存储数据的仓库(容器)
存放数据的方式
1 变量 无法永久保存
2 文件处理 可以永久储存
文件处理的弊端:
1 文件处理速度慢
2 文件只能在自己的计算机上读写 无法被共享
单台计算机的性能终归有限,一旦把服务器拆分后,数据就必须能够被不同计算机共享,必须通过网络,也就是socket
数据库软件的本质就是一个基于socket(tcp)的c/s结构的程序
如果自己实一个数据库软件,需要解决几个问题
1 一旦数据共享,就存在竞争问题,需要处理锁
2 不是所有的TCP连接请求都要接受,得加上安全验证
3 文件处理带来的效率问题,需要想办法来提高处理速度
现在很多数据库软件可以直接使用
1 关系型数据库
该类型的数据,提供某种机制,可以帮你维护
数据与数据之间存在某种关系
一般都是基于文件实现
优点:容量大,可以永久存储
例如:
mysql 免费开源,支持中小型企业并发
oracle 商用收费,学习免费,功能比mysql强大,用户挂了和集群
SQLServer 属于微软生态圈,只能运行于windows上
mariaDB 基于mysql开发的mariaDB 使用起来一模一样
DB2 IBM公司
sqlite 非常轻量级的数据库
共同特征都支持SQL :结构化查询语句,学习数据库的重点也就是SQL语句
2 非关系型数据库
数据与数据之间是独立,不存在任何关联关系
以key:value的形式来存储数据,一般基于内存
优点:速度快 问题:断电丢失
mongoDB redis memcache
这两种数据库应该搭配使用,把数据量大的存在关系型中
把经常访问的放到非关系型中,提高访问速度
数据库相关概念
数据:本质上是一堆带有含义的符号
数据记录:多个数据组成了一条完整的记录
表:本质就是一个文件,里面存储一堆数据记录
库:本质就是一个文件夹,里面存放一堆表
DBMS:data base manager system
数据库管理系统(TCP的服务器)
负责挂了一堆文件夹
数据库服务器:指定是运行有TCP服务器的程序的计算机
DBMS和服务器一般是由运维管理
mysqld是服务器主程序
mysql 是无界面客户端需要在CMD运行
mysql连接服务器需要指定以下参数
-h 主机地址(ip)
-p 端口号(默认3306)
-u 用户名
-p 密码
服务器和客户端在同一台电脑,可以省略主机地址和端口号
mysql安装
1 带界面的路next
2 压缩包,直接解压
添加环境变量
注册系统服务(mysqld --install)
修改管理员密码
1 知道原密码(mysqladmin -uroot -p password 新密码)
2 不知道原密码 可以在启动服务器时跳过授权表(mysqld --skip-grant-tables)
无密码登录服务器,执行修改密码的指令
(updata mysql.user set password = password("新密码") where user = "root" and host = "localhost")
关于库的语句
创建库 (create database 库名称;)
删除库 (drop database 库名称;)
修改库的属性 (alter database 库名称 charset = "新编码";)
查看创建库详细信息 (show create database 库名称;)
查看所有数据库 (show databases;)
选择一个数据库 (use 库名称;)
关于表
创建表
create table 表名称(字段 类型,字段,类型);
create table 库.表名称(字段 类型,字段,类型);
查看所有表 (show tables;)
查看表的详细信息 (show create table 表名;)
查看表结构 (desc 表名;)
改
alter table 表名 charset = "新编码"; 改编码
alter table 表名 add 字段 类型; 添加字段
alter table 表名 drop 字段; 删除字段
alter table 表名 modify 字段 新类型; 修改字段的类型
alter table 表名 change 旧字段 新字段 新类型; 修改字段的名称和类型
rename table 旧表名 to 新表名; 修改表的名称
删除 drop table 表名;
数据相关
插入
insert into 表名 values(值,值...); 插入一条
insert into 表名 values(值,值...),(值,值...),(值,值...)...; 插入多条
insert into 表名(字段) values(值) 指定插入字段
查看 select * from 表名;
修改 update 表名 set 字段 = 值 where 字段 = 值;
删除 delete from 表名 where 字段 = 值;