我们可以将用于数据服务的数据库分为关系型数据库和非关系型数据库,关系型数据库最典型的就是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. 解放生产力,自动化生成vue组件文档

    一.现状 Vue框架在前端开发中应用广泛,当一个多人开发的Vue项目经过长期维护之后往往会沉淀出很多的公共组件,这个时候经常会出现一个人 开发了一个组件而其他维护者或新接手的人却不知道这个组件是做什么 ...

  2. NUC980 运行 RT-Thread 时使用 GPIO

    如何使用 GPIO? NuMaker-RTU-NUC980 板子引出的 IO 有: 分别有一个 I2C1.GPIO.SPI0.UART4,RT-Thread 中 NuMaker-RTU-NUC980 ...

  3. 第3章:快速部署一个Kubernetes集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点$ kubeadm in ...

  4. 关于VIM的迁移

    将Gvim7.3从我笔记本拷到公司的电脑上面时, 这问题留了好久没有去解决.语法高亮无效不管我怎么设置 syntax enable,还是遇到这个问题. 后来在偶然的情况下,将我笔记本上面的文件在拷一份 ...

  5. layui 合计行不要边框

    $(".layui-table-total div").attr('style','text-overflow:clip'); //合并合计行单元格 $(".layui- ...

  6. hdu 1540 Tunnel Warfare 线段树 区间合并

    题意: 三个操作符 D x:摧毁第x个隧道 R x:修复上一个被摧毁的隧道,将摧毁的隧道入栈,修复就出栈 Q x:查询x所在的最长未摧毁隧道的区间长度. 1.如果当前区间全是未摧毁隧道,返回长度 2. ...

  7. 第一章 - Java与线程

    目录 01.Java和线程 02.Java与协程 03.CPU缓存结构和java内存模型 04.管程-悲观锁和锁优化 05.乐观锁 - 无锁方案 06.线程安全 07.线程池 08.JUC 09.高并 ...

  8. springboot整合拦截器如何让其不拦截默认的访问路径

    1.注册自定义拦截器2.拦截器3.控制器4.其它说明:我想做控制拦截登陆,将所有的请求拦截下来判断如果当前的session里没有用户名则跳转到登陆页面.问题是目前可以拦截所有请求了,但第一次进入登陆页 ...

  9. 深入理解Java容器——HashMap

    目录 存储结构 初始化 put resize 树化 get 为什么equals和hashCode要同时重写? 为何HashMap的数组长度一定是2的次幂? 线程安全 参考 存储结构 JDK1.8前是数 ...

  10. C语言:猴子吃桃问题

    //猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个. //第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个.以后每天早上都吃了前一天剩下的一半零一个. //到第 10 ...