我们可以将用于数据服务的数据库分为关系型数据库和非关系型数据库,关系型数据库最典型的就是Mysql,以及和他同源的MariaDB数据库,oracle等,非关系型数据库则有redis数据库,mongodb(文档型的数据库),ES等,未来很火的NewSQL数据库,TiDB、Tdengine等等。

下面我们以MariaDB数据库为例来说在Linux中的各种操作。

1.安装MariaDB数据库

[root@local ~]# yum install mariadb-server mariadb -y

2.开启数据库服务和设置开机自动启动

[root@local ~]# systemctl start mariadb
[root@local ~]# systemctl enable mariadb

如果在安装或操作的过程中,进程出现了错误,我们可以在日志里面去查看

[root@local ~]# cat /var/log/mariadb/mariadb.log

3.安装完成之后,我们用命令检查下数据库3306端口(默认)是否开放

[root@local ~]# netstat -lntup|grep mysql

或者用管道命令查看3306端口是否开放

[root@local ~]# netstat -lntup|grep 3306

4.在较高版本的MariaDB中,默认登录时会产生一串随机数密码,但是在较低的版本(5.7.0)中,默认值是空,我们使用的是(5.5.68-MariaDB)版本,所以给Mariadb配置登陆密码,并使用新密码进行登录数据库。

[root@local ~]# mysqladmin password 'test123'

这里我们将密码设置为test123.,设置好之后沃恩可以用命令登录到数据库

[root@local ~]# mysql -uroot -ptest123

上面一行代码表示,我们用root账户,密码为test123登录到MariaDB,退出时键入quit即可。

5.修改MariaDB数据库密码,在修改数据库密码时,必须输入原登录账户和密码,后接新密码才可以,

[root@local ~]# mysqladmin -uroot -ptest123 password 'test'

以上命令就是将数据库的密码由test123改为test,这时我们再登录数据库就要用test登录,原密码不能再使用

可以看到,已经登录成功了,此时如果我们再用原密码登录,则会失败

6.找回数据库的密码,如果我们忘记了root用户的密码,怎么样能够找回,我们可以用命令忽略授权表启动,就是绕过密码启动,首先停掉数据库,再启动

[root@local ~]# systemctl stop mariadb
[root@local ~]# /bin/sh /usr/bin/mysqld_safe --basedir=/usr --skip-grant-table &
--skip-grant-table    #此选项就是忽略授权表
&              #&符号是放在后台启动

MariaDB>mysql

MariaDB> UPDATE mysql.user SET password=PASSWORD("oldboy123") WHERE user='root' and host='localhost';
MariaDB> flush privileges;

用以上命令将数据库密码设置为test123,flush privileges命令就是让配置生效

下面我们就可以用新密码进行数据库登录操作

因为数据库是讲究及其安全的,我们刚才用了忽略授权表启动,所以我们要将其进程杀掉

现在3306端口已经停掉了,我们再用密码登录

[root@local ~]# systemctl start mariadb
[root@local ~]# mysql -uroot -ptest123

7.数据库用户管理

7.1查看数据库有哪些用户

以上命令就是从数据库的用户表里面查询有哪些用户

7.2 删除用户

drop user 'user'@'主机域';

以上代码我们就删掉了一个host名为"::1"的用户

7.3创建用户

因为用户的权限大多涉及到对数据库的各种操作,比如root用户,它的权限极大,我们就赋予它l域名为localhost访问,也就是说它只能再本地进行登录操作,在我们自己创建用户的时候,可以指定域名字段,允许在其规定的域名段内访问数据库,创建用户名的语法:create user  ceshi@'10.0.0.%' identified by 'ceshi123';(ceshi:数据库用户名,10.0.0.%:规定用户只能在此端内访问数据库,ceshi123:数据库用户密码)

用户默认是没有权限的,下面是授权的方法

7.3.1查看用户权限:show grants for ceshi@'10.0.0.%';

显示可以登录但是没有权限,并且我们设置的密码系统经过了加密。

7.3.2 用户授权

我们授权某一个用户管理某一个数据库,前提是我们在整个数据库中有此库存在,我们先来看一下有哪些数据库

我们就以test库为例,将ceshi用户赋予管理此库的权限

以上命令旨在ceshi用户拥有管理test库下所有数据的一切权限,查看一下授权,测试用户就会有一个管理数据库的权限

7.4 直接增加用户权限

grant all privileges on dbname.* to username@localhost identified by 'passwd';

但是新版的MariaDB数据库支持用户和权限分离,这样安全性更高一些,当我们所有用户创建完成后,都要执行:flush privileges;让配置生效。

这里有一个重要的问题,就是自己创建的用户,其用户本身是否再有执行创建用户的权限,这个是至关重要的,所以我们在实际的工作当中,不能给创建的用户:grant all privileges,所有权限

all privileges包含以下所有能执行的权限:

SELECT 查询(数据)
INSERT 插入(数据)
UPDATE 修改(数据)
DELETE 删除(数据)
=============================================
CREATE 创建(数据库、表等对象)
DROP 删除(数据库、表等对象)
RELOAD 重载
SHUTDOWN 关闭

PROCESS 进程
FILE 文件
REFERENCES 参考资料
INDEX 索引
ALTER 修改(数据库、表等对象)
SHOW DATABASES 查看数据库
SUPER 超级权限
CREATE TEMPORARY TABLES 创建临时表
LOCK TABLES 锁表
EXECUTE 执行
REPLICATION SLAVE 从复制权限
REPLICATION CLIENT 从客户端复制
CREATE VIEW 创建视图
SHOW VIEW 查看视图
CREATE ROUTINE 创建存储过程
ALTER ROUTINE 修改存储过程
CREATE USER 创建用户
EVENT 事件
TRIGGER 触发器
CREATE TABLESPACE 创建表空间

所以在实际生产环境中,我们可以给创建的用户分配部分权限,命令可以这样:

grant SELECT,INSERT,UPDATE,DELETE on test.* to ceshi@localhost identified by 'test123';

只允许有增删改查的权限。

7.数据库表管理

7.1查看库

7.2查看当前使用的库

我们目前在test库下

7.3 查看库下的表

这里显示为空,因为我们还没有在此库下创建表,为更加直观的表示,我们选择blog库,查看其数据表的结构

可以看到blog库下创建了数据表,我们现在可以查看一下blog_users一列的信息

以下方法也是查看blog_users一列的信息,两者一样

8.数据库管理

8.1创建数据库

8.2查看建库的语句

可以看见数据库默认的字符是拉丁字符,稍后我们在配置文件中修改默认字符集,工作字符是:utf8,gbk,utf8mb4,修改之一的做法就是我们创建一个utf8的数据库,这样在插入中文的时候就不会乱码

8.3删除库

9.数据表

9.1创建数据表

9.2 查看建表语句:

这里需要注意的是,表是在库下面,所以先有库,再有表。

9.3 修改表的名称

9.4删除表

9.5 表中插入数据

9.6 查看表结构

9.7解决表中中文乱码,修改字符集配置文件

9.7.1备份和修改配置服务端文件

9.7.2修改客户端配置文件

这个时候我们回到数据库里面,发现依然是乱码

查看建库和建表语句,发现原来他们的初始默认字符是拉丁

9.8更改字符集

可以将数据库文件导出来,做一次备份,临时放到/tmp下面

[root@local ~]# mysqldump -uroot -ptest123 -B test>/tmp/a.sql

[root@local /tmp]# vim a.sql

现在我们将修改过的文件导入到数据库中,因为我们已经做过备份,所以可以将数据库中的表删除

利用写入重定向命令,将编辑好的文件导入数据库

可以看到,test数据库已经存在了,为保证修改过的数据库文能够正常加载运行,我们建议先停掉数据库服务,再重新启动

1 [root@local /tmp]# systemctl stop mariadb
2 [root@local /tmp]# systemctl start mariadb
3 [root@local /tmp]# mysql -uroot -ptest123

可以看到,我们已经成功将字符集修改,在表中插入中文,不再显示乱码,这就是修改字符集的方法之一。当然还可以用命令行去修改字符集。

9.9更新数据库(update)

我们以test库为例,来修改(更新)数据表中id=4的字段

再有,我们也可以修改(更新)数据表中某一行的某一列,比如我们修改test1表中的第一行的第四列

或者

以上我们取name或者id都可以将数据更新,因为他们都在同一行。

9.10 删除数据表中的字段

仍然使用test1数据表,现在删除id=4的行,我们就可以有如下操作

当然,我们也可以同时删除多个行

在这里,有个逻辑概念,就是我们在删除多个id行的时候,不能用and,因为一个表中不可能同时有两者或两者以上id是相同的情况,所以我们如果在命令中使用and来并列删除,会出现逻辑错误。

还有一个需要注意的是,我们在删除的时候,极其危险,我们一定要在delete 后面跟条件where ,如若不然,会将整个数据表删除,那将是天大的灾难。

下面再删除年龄大于28岁的字段

也可以多个条件套用进行删除,这里的逻辑和上面的例子是一样的,比如要删除年龄小于26岁,并且大于27岁的字段

综合以上就是数据库的增删改查,以及数据表的增删改查,包括修改默认字符集等等,希望对有需要的小伙伴有所帮助。

---《墨云流香》

QQ:1757468585

 

Linux 数据库操作(一)的更多相关文章

  1. 使用c语言实现linux数据库的操作

    前言:上一篇讲解了linux下使用命令行操作数据库,这篇继续讲解怎么使用c语言实现linux数据库的操作. 使用c语言实现环境搭建:既然我们要使用c语言实现linux数据库操作,那么首先我们得先把数据 ...

  2. 连接Linux服务器操作Oracle数据库

    连接Linux服务器操作Oracle数据库   由于项目已经上线,现场的数据库服务器不允许直接用Oracle的客户端plsqldev.exe来连接,只能通过Linux服务器的命令来操作. 以下是用Se ...

  3. linux mysql 数据库操作导入导出 数据表导出导入

    linux mysql 数据库操作导入导出 数据表导出导入 1,数据库导入 mysql -uroot -p show databases; create database newdb; use 数据库 ...

  4. linux上操作mysql数据库

    sudo /etc/init.d/mysql start启动mysql netstat -lntup|grep 3306查看端口3306 grant all privileges on *.* to ...

  5. linux中mysql,mongodb,redis,hbase数据库操作

    .实验内容与完成情况:(实验具体步骤和实验截图说明) (一) MySQL 数据库操作 学生表 Student Name English Math Computer zhangsan lisi 根据上面 ...

  6. python之数据库操作

    数据库操作 Python 操作 Mysql 模块的安装 1 2 3 4 5 linux:     yum install MySQL-python   window:     http://files ...

  7. Python Paramiko模块与MySQL数据库操作

    Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...

  8. Python之路【第九篇】堡垒机基础&数据库操作

    复习paramiko模块 Python的paramiko模块,是基于SSH用于连接远程服务器并执行相关操作. SSHClient #!/usr/bin/env python #-*- coding:u ...

  9. android中的数据库操作

    如何在android中调用数据库资源 在android中主要有两种方法来实现对数据库的访问,一种是adb shell方式,另一种是通过相关的android 的java类来间接的对数据库来进行操作.其中 ...

随机推荐

  1. Docker笔记--ubuntu安装docker

    Docker笔记--ubuntu安装docker 1.更换国内软件源,推荐中国科技大学的源,稳定速度快(可选) sudo cp /etc/apt/sources.list /etc/apt/sourc ...

  2. 日常BUG-01 之 @Sl4j

    问题描述: 需要打印日志,使用的是lombok包中的sl4j,lombok依赖如下: <dependency> <groupId>org.projectlombok</g ...

  3. 36、网卡绑定bond

    注意:虚拟机需要网卡模式为同一模式,否则无法进行通信: 36.1.mode0(平衡负载模式): 平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术. ...

  4. 徒手从零实现 uTools 系列(三)- 屏幕取色和截屏

    前言 为了进一步提高开发工作效率,最近我们基于 electron 开发了一款媲美 uTools 的开源工具箱 rubick.该工具箱不仅仅开源,最重要的是可以使用 uTools 生态内所有开源插件!这 ...

  5. SpringBoot统一处理返回结果和异常情况

    如果文章有帮助到你,还请点个赞或留下评论 原因 在springboot项目里我们希望接口返回的数据包含至少三个属性: code:请求接口的返回码,成功或者异常等返回编码,例如定义请求成功. messa ...

  6. CentOS-关闭防火墙和禁用安全策略

    关闭防火墙 默认使用的是firewall作为防火墙 查看防火墙状态 $ firewall-cmd --state 停止firewall $ systemctl stop firewalld.servi ...

  7. ExtJs4学习(十)Grid单元格换色和行换色的方法

    Grid单元格换色 { text:'类别', dataIndex:'type', align:'center', renderer:function(value,metaData){ console. ...

  8. 初步了解Unix系统的I/O模式

    I/O模式 对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间. 当一个read操作发生时,它会经历两个阶段: 等待数据 ...

  9. 【重学Java】多线程进阶(线程池、原子性、并发工具类)

    线程池 线程状态介绍 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.线程对象在不同的时期有不同的状态.那么Java中的线程存在哪几种状态呢?Java中的线程 状态被定 ...

  10. CF1458D Flip and Reverse[题解]

    Flip and Reverse 题目大意 给定一个 \(01\) 字符串,有机会进行若干次操作,对于每一次操作: 选择该字符串的子串,要求是该子串内包含数量相同的 \(0\) , \(1\) 字符. ...