数据库管理软件基础 SQL语言增删改查

数据库管理软件的由来

1、程序所有的组件就不可能运行在一台机器上

    如果程序所有的组件全部运行在一台机器上,那么这台机器一旦挂掉就意味着整个软件的崩溃,程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目前的硬件水平,就一台机器的性能垂直进行扩展是有极限的。
    于是我们只能通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行。

2、数据安全问题

    我们将程序的各个组件分布到各台机器,但需知各组件仍然是一个整体,言外之意,所有组件的数据还是要共享的。但每台机器上的组件都只能操作本机的文件,这就导致了数据必然不一致。
    于是我们想到了将数据与应用程序分离:把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件(用socket实现),即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理。。。。

3、并发

    根据2的描述,我们必须写一个socket服务端来管理这台机器(数据库服务器)上的文件,然后写一个socket客户端,完成如下功能

  1. 远程连接(支持并发)
  2. 打开文件
  3. 读写(加锁)
  4. 关闭文件

我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。
数据库管理软件分类

关系型数据库:方便管理

    关系型数据库需要有表结构
常见的关系型数据库:
mysql、oracle、db2、sqlserver、mariadb =====》注意:sql语句通用

非关系型数据库:查询快

  • 非关系型数据库是key-value存储的,没有表结构

常见的非关系型数据库:
mongodb,redis,memcache =====》现在企业更多会把redis,memcache当作缓存用
redis,memcache是把数据存入内存的,并不是直接存入硬盘

Mysql数据库管理软件

安装数据库,需要安装客户端和服务端

yum -y install mariadb mariadb-server

1、mysql数据库管理软件

  • 数据库管理软件本质就是一个socket套接字软件
  • CS架构

2、关系型数据库的基本概念

  • 字段: 表的标题
  • 记录:文件中每一行内容
  • 表:文件
  • 库:文件夹
  • 数据库管理软件:本质就是一个socket软件
  • 数据库服务器:运行数据库管理软件服务端的计算机

我们可以把shell语句和mysql语句做一个对比,如下所示:

     shell命令 <---------------------> sql语句
     shell解释器 <---------------------> mysql服务端软件    
     linux操作系统 <----------------------> linux操作系统
     计算机硬件 <----------------------> 计算机硬件

Mysql数据库的基本使用

修改mysql数据库密码

启动数据库
systemctl start mariadb            # 这是默认启动的服务端

查看数据库进程
ps aux | grep mariadb
mysql      2089  0.2  8.3 968920 83368 ?        Sl   21:28   0:00 /usr/libexec/mysqld
--basedir=/usr
--datadir=/var/lib/mysql             # datadir指的是mysql数据库的根目录
--plugin-dir=/usr/lib64/mysql/plugin
--log-error=/var/log/mariadb/mariadb.log
--pid-file=/var/run/mariadb/mariadb.pid
--socket=/var/lib/mysql/mysql.sock
root       2143  0.0  0.0 112808   964 pts/0    R+   21:30   0:00 grep --color=auto mariadb
我们在数据库里面创建库和表,其实就是在/var/lib/mysql(数据库根目录)目录下创建目录和文件

进入数据库            # 对客户端进行操作
mysql -uroot -p            # 初始化无密码,直接回车进入

给初始化数据库管理员创建密码
mysqladmin -uroot password "123"

修改数据库管理员密码
mysqladmin -uroot -p"123" password "666"
 

忘记密码 破解密码

方式一;方式一了解即可。
rm -rf /var/lib/mysql/mysql         # 所有授权信息全部丢失!!!
systemctl restart mariadb
mysql

方式二:
1. 修改mysql主配置文件
vim /etc/my.cnf            # mysql主配置文件
[mysqld]
skip-grant-table            # 跳过授权表
...

2. 重启mysql服务
systemctl restart mariadb

3. 跳过授权直接进入数据库,修改数据库的账号密码
mysql
update mysql.user set password=password("123") where user="root" and host="localhost";
# password=password("123"),第一个password指的是表中的字段值,第二个password()指的是一个函数
flush privileges;            # 刷新授权

4. 删除mysql主配置文件中的跳过授权
vim /etc/my.cnf
[mysqld]
# skip-grant-table        删除添加的授权表认证
...

5. 重启mysql服务
systemctl restart mariadb


修改Mysql主配置文件,添加用户信息免密登陆数据库,统一数据库字符编码

1. 修改mysql数据库主配置文件,设置免密登陆数据库,统一字符编码
vim /etc/my.cnf
[mysqld]
character-set-server=utf8mb4            # utf8mb4支持表情包    
collation-server=utf8mb4_general_ci
...

[mysql]                    # 添加客户端信息,无须重启服务立即生效
user="root"                    # 添加客户端用户信息和密码信息,可以在客户端免密码登陆数据库
password="123"                
default-character-set=utf8mb4
...

2.查看数据库字符编码
mysql            # 直接登陆数据库
show variables like "%char%";            # 查看数据库设置的字符编码    
 

系统默认的数据库

我们安装好数据库后,系统会默认生成一些库

    information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
    performance_schema: MySQL5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
    mysql: 授权库,主要存储系统用户的权限信息
    test: MySQL数据库系统自动创建的测试数据库

Sql语句

增: create database db1;

查: show databases;            查所有库
    show create database db1;        查指定的单个库

改: alter database db1 charset="utf8";        我们只能修改库的属性

删: drop database db1;

查看当前所在的库的名字: select database();
切换库: use db1;
 

增: create table t1(id int,name char(4));

查: show tables;            查看当前库下的所有表名
    show create table t1;        查看当前库下指定的表信息
    desc t1;                将当前表的信息以表格的形式展示,写全为(describe t1;)

改: alter table t1 modify name char(16);    将当前表属性定义好的4个字符改成16个字符

删: drop table t1;

表的增查改删也可以绝对路径的形式进行操作,无需切换文件路径
create table db1.t2(id int,name char(4));        在db1的库中的创建一个t2的表格
 

数据

增: insert into t1 values(1,"nana"),(2,"dada"),(3,"tank");

查: select * from t1;        *号代表所有的意思

改: update t1 set name="lala" where id = 1;            将id为1的数据名字改成lala

删: delete from t1 where id > 1;
    delete from t1 where name ="tank";

将表所有的数据清空:
方式一: delete from t1;            推荐使用第二种清理方式
方式二: truncate t1;                这种方式清理数据会比较干净
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值