我们可以将用于数据服务的数据库分为关系型数据库和非关系型数据库,关系型数据库最典型的就是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. Linux 命令行查看etcd v2所有的Key

    etcd 是一个树型的数据结构,这样看所有的key: curl localhost:2379/v2/keys 这样看某个key的内容: curl localhost:2379/v2/keys/key ...

  2. js笔记16

    动画 (1)css样式提供了运动  过渡的属性transition 从一种情况到另一种情况叫过渡 transition:attr   time   linear   delay attr 是变化的属性 ...

  3. POJ 2826 An Easy Problem? 判断线段相交

    POJ 2826 An Easy Problem?! -- 思路来自kuangbin博客 下面三种情况比较特殊,特别是第三种 G++怎么交都是WA,同样的代码C++A了 #include <io ...

  4. Object 中的默认方法

    1.public final native Class<?> getClass() getClass方法,返回该实例的java.lang.Class类,例如 Object obj = ne ...

  5. 【Java集合】ArrayList源码分析

    ArrayList是日常开发中经常使用到的集合,其底层采用数组实现,因此元素按序存放.其优点是可以使用下标来访问元素,时间复杂度是O(1).其缺点是删除和增加操作需要使用System.arraycop ...

  6. Linux:CentOS-7配置VMware-15.5与本机IP同网段

    确认本机IP ctrl+R:输入cmd 回车 输入命令:ipconfig  可以看出一下信息:本机ip: 192.168.1.162网关:192.168.1.1DNS服务器:192.168.1.1 设 ...

  7. 资源:HTML调色板

    调色板路径 https://encycolorpedia.cn/

  8. pip 下载时出现问题TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

    我这里解决就是更新下载源,马德,中科的源居然不够快,我就只能换源了,一换就成功了 1.一次性(临时使用): 可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.ed ...

  9. ZooKeeper 分布式锁 Curator 源码 01:可重入锁

    前言 一般工作中常用的分布式锁,就是基于 Redis 和 ZooKeeper,前面已经介绍完了 Redisson 锁相关的源码,下面一起看看基于 ZooKeeper 的锁.也就是 Curator 这个 ...

  10. C语言:类型转换

    1.自动类型转换:将小范围数据类型转换为大范围的数据类型 2.赋值号两边的数据类型不一致时,会自动将右边的数据类型转换为左边的数据类型.若右边数据的类型级别高,则根据左边变量的长度截取低字节数据部分 ...