数据库操作——mongoDB、MySQL、KBase、Neo4j

目录

  • 一、mongoDB
    • 1、MongoDB安装
    • 2、启动、重启、关闭MongoDB
      • 1、启动mongodb:
      • 2、重启
      • 3、关闭
    • 3、导入文件:mongoimport | 导出文件:mongoexport | 备份数据库:mongodump | 恢复数据库:mongorestore
      • 1、导入
      • 2、导出
      • 3、备份
      • 4、恢复
    • 4、命令行操作
    • 5、客户端操作:nosqlbooster4mongo
      • 1、客户端安装
      • 2、SSH登录
    • 6、python操作
      • 1)Python连接数据库:
      • 2)python批量操作
    • 7、挂掉的一些情况与对策
  • 二、mysql
    • 1、基于命令行操作
      • 1)Mysql导出库表结构和数据以及导入脚本到数据库
      • 2)为mysql数据库用户授权
      • 3)查看数据库/表占空间大小
      • 4)查看各个用户信息:
      • 5、使用ibd文件恢复数据
    • 2、基于客户端界面操作(Navicat+SQL):
      • 1)CREATE创建
      • 2)SELECT查询
      • 3)ALTER修改操作:添加列、删除行、更改列名、更改列数据类型
      • 4)update更新
      • 5)INSERT插入
      • 6)DELETE删除记录
      • 7)部分函数:
      • 8)MySQL自带数据库,如information_schema
    • 3、存储过程
      • 1、语法结构:
      • 2、示例:若索引index_name不存在则创建索引
    • 4、视图
    • 5、Python中的操作
  • 三、kbase数据库
    • 1、K-SQL
    • 2、 在Python中操作
      • pykbase安装
      • 可能的错误代码:
      • 基于KBaseClient.py:
      • 基于KBase.py:
      • 一些常见的异常
  • 四、Neo4j
    • 1、Cypher
    • 2、python操作Neo4j:py2neo
  • 五、postgreSQL+pgvector插件
      • 客户端操作
      • python操作
  • 六、mycat:数据库中间件

一、mongoDB

1、MongoDB安装

在Ubuntu的命令行中输入:sudo apt-get install mongodb
(一般等待安装,一会便安装成功)
数据库操作——mongoDB、MySQL、KBase、Neo4j_第1张图片
检查是否安装成功:root@cqf-THTF-Chaoqiang-Server:/# mongo
数据库操作——mongoDB、MySQL、KBase、Neo4j_第2张图片

注意:安装时出错,提示“有未满足的依赖关系”,本次解决方法是“重装系统”。

2、启动、重启、关闭MongoDB

1、启动mongodb:

Linux下启动mongodb:
nohup /usr/bin/mongod -f /etc/mongod.conf &
nohup命令 mongo应用 –f mongo配置文件
在这里插入图片描述
service mongod start
(默认设置MongoDB是随Ubuntu启动自动启动的)

2、重启

sudo service mongodb restart

3、关闭

use admin
db.shutdownServer({force : true})
service mongodb stop

3、导入文件:mongoimport | 导出文件:mongoexport | 备份数据库:mongodump | 恢复数据库:mongorestore

1、导入

导入、导出可以是.csv等格式文件。
【其与mongo.exe是同级的,因此不能进入Mongo后执行该命令】
-h 主机ip+端口号
-d 数据库名
-c 集合名
-f 字段名 (mongo中自动会有一个_id字段,相当于主键,因此不可以_id自己命名字段)
-type 文件类型
-file 文件所在目录
在这里插入图片描述

2、导出

在这里插入图片描述

3、备份

备份、恢复基于.bson文件
在这里插入图片描述

示例:备份mongodb数据库到与当前mongodump命令同一位置backup目录下:数据库操作——mongoDB、MySQL、KBase、Neo4j_第3张图片

4、恢复

在这里插入图片描述

示例:-d指定要恢复为的数据库,可以将备份的数据库恢复到与原来不同名的数据库中,这里为mongodb2,–drop表示在恢复前删除集合(若存在)。否则,数据就会与现有集合数据合并,可能会覆盖一些文档。 数据库操作——mongoDB、MySQL、KBase、Neo4j_第4张图片

4、命令行操作

(1)显示所有的数据库:> show dbs;
(2)切换数据库:> use db_name; (当db_name不存在时则会直接创建一个新的)
(3)显示当前数据库中所有的集合:> show collections;> show tables;
(4)查询操作:db.collection_name.find({条件})

  • 查询返回指定字段(jielun):db.paper_2005.find({}, {‘jielun’:1})
  • 模糊匹配(like)查询:
    ① 类似于SQL中的like %str%:db.paper_2005.find({'bjqw': /研究展望/}, {'bjqw':1})
    ②类似于SQL中的like str%:db.paper_2005.find({'bjqw': /^<研究展望>/}, {'bjqw':1})
    ③使用正则:db.paper_2005.find({'title': {'$regex': '一分钟学会'}}, {'bjqw':1})
  • 查询嵌套字段:db.paper_2005.find({'jielun_fet.is_jielunduan': 1})
  • 逻辑比较查询条件:db.paper_2005.find({'user': {'$ne': 'fish'}}).count()
逻辑运算符:
"$lt"    "<"
"$lte"   "<="
"$gt"    ">"
"$gte"   ">="
"$ne"   "!="
  • 判断字段是否存在:db.paper_2005.find({'user': {'$exists': true}})
  • 查询条件为两个字段的比较:db.paper_2005.find({'$where': 'this.Predict_tag_bayes != this.Predict_tag_SVM'})
  • 查询一个字段有几种值:db.collection.distinct(filed_name), 返回结果是list
    如:db.paper_2005.distinct('filename')
    在Python中:coll.find().distinct(filed_name)
  • 查询存在/不存在某个集合的数据($in / $nin):
db.paper_2005.find({
   'nian': {
   '$in': ['2010', '2011', '2012', '2013', '2014', '2015']})

(5)向指定数据库(my_mongo)的集合(my_collection)中插入数据:(之前需要切换到my_mongo):> db.my_collection.insert({'name':'cqf', 'age':12})
(6)更新操作:db.collection_name.update({键值对条件},{$set:{键值对}},upsert, multi)
(条件可以省略,只写{})
 upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
 multi : mongodb默认是false,只更新找到的第一条记录,如果为true,就把按条件查出来多条记录全部更新。
特别的,
①更新字段名:> db.getCollection('my_collection').update({}, {'$rename':{'age':'age_new'}}, false, true);
②删除字段名:> db.my_collection.update({}, {'$unset':{'age':''}}, false, true);
(7)删除操作(删除所有数据,{}中可以加入键-值对条件):db.collection_name.remove({})

5、客户端操作:nosqlbooster4mongo

1、客户端安装

官网下载.exe安装包文件(https://nosqlbooster.com/downloads),双击直接安装即可。

2、SSH登录

注意,我的MongoDB服务是安装在Ubuntu系统上的
安装完成后,我是SSH方式登录:
点击connect–>create,然后进入Basic标签页:其中Sever为MongoDB的配置文件( cat etc/mongod.conf )中net指定的ip、port(如下),Name是连接后显示的连名字。

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

数据库操作——mongoDB、MySQL、KBase、Neo4j_第5张图片
然后切换到SSH标签页:其中Address为MongoDB所在的机器真实ip,端口号为该机器SSH指定的端口号(需要确定SSH服务是启动的,且其端口已经被启用,在Ubuntu使用下面命令查看):

# 查看SSH服务是否为启动状态
sudo service ssh status
# 查看SSH使用的端口号
grep Port /etc/ssh/sshd_config
# 查看端口号启用情况,State为LISTEN表示正在监听,已启用
sudo netstat -plnt

输入正确的用户名、密码就可以成功访问了。
数据库操作——mongoDB、MySQL、KBase、Neo4j_第6张图片

6、python操作

1)Python连接数据库:

1)SSH连接:

import pymongo
from sshtunnel import SSHTunnelForwarder
import atexit
realskip_ip='192.168.52.110'
# mongodb_ip、real_mongodb_port为mongodb配置文件中的bindIp和port(配置文件默认在/etc/mongod.conf)
mongodb_ip='127.0.0.1' 
real_mongodb_port=27017
server = SSHTunnelForwarder((realskip_ip, 22),
							ssh_password='xxx',
							ssh_username='mmgg',
							remote_bind_address=(mongodb_ip, real_mongodb_port)) #mongodb默认端口27017
server.start()

self.client = pymongo.MongoClient('127.0.0.1', server.local_bind_port)
self.db = self.client[db_name]
self.coll=self.db[collection_name]

def shutdown():
    server.stop()
atexit.register(shutdown)

2)用户名、密码连接

# admin 账户 可以操作任意数据库
# 例如:用户名admin,密码admin*ccdd*kkyyxt,ip:192.fff.xxx.110,端口27017
client=pymongo.MongoClient('mongodb://admin:admin*cnkicnki*[email protected]:27017')

2)python批量操作

1、批量操作:bulk
1)

Bulk=db.collection.initialize_unordered_bulk_op() # 或 Bulk=db.collection.initialize_ordered_bulk_op()
# 然后进行相关操作定义,如:
Bulk.find()  # [可加.update({“$set”:{键值对}}) / .remove()]
Bulk.insert()
# 最后统一执行操作:
Bulk.execute()

2)批量写入:db.coll_name.bulk_write( seq ) 。注意seq格式是操作函数组成的列表
在这里插入图片描述在这里插入图片描述
数据库操作——mongoDB、MySQL、KBase、Neo4j_第7张图片

7、挂掉的一些情况与对策

1)too many open files原因挂掉
在这里插入图片描述
解决:
增大系统的open file对应的ulimit参数
(所有操作包括mongo的启动都要在一个shell里进行,且该修改命令只对这个shell起作用)
数据库操作——mongoDB、MySQL、KBase、Neo4j_第8张图片

二、mysql

安装
1、CentOS7.9安装
安装之前需要卸载系统自带的MariaDB:

rpm -qa|grep mariadb
yum remove mariadb-libs -y

(1)安装命令
注意:最后安装时可能出现错误:The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package. Check that the correct key URLs are configured for this repository.
解决:最后一句命令添加参数 --nogpgcheck, 作用是 “禁掉GPG验证检查”

wget http://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm 
yum update 
yum install mysql-community-server --nogpgcheck # 安装mysql

(2)启动mysql
CentOS7.9(同Ubuntu):

service mysqld start

window10

net start mysql80  # 关闭是:net stop mysql80

(3)进入mysql更改密码

grep 'temporary password' /var/log/mysqld.log   # DOS中查看默认密码
mysql -u root -p # 使用该密码进入mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxx@2022'; # 更改(设置)密码

2、win10安装完成后,Navicat连接出现 2059 错误:
 原因:在mysql8之前的版本中加密规则为mysql_native_password,而在mysql8以后的加密规则为caching_sha2_password。
 解决:cmd进入mysql,并执行下述命令

 ALTER USER 'root'@'localhost' IDENTIFIED BY 'your password' PASSWORD EXPIRE NEVER; # 作废原密码
 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your password'; # 修改加密规则并设置新密码

 如下图:
数据库操作——mongoDB、MySQL、KBase、Neo4j_第9张图片
常用引擎
InnoDB 引擎:提供ACID事务支持,提供行级锁和外键约束等,在读写操作时不锁表,所以适合并发度较高的场景使用。
MyISAM 引擎:不提供ACID事务支持,执行写操作的时候会锁表,但会存储表行数,因此查询结果数量时不需要进行全表扫描。

1、基于命令行操作

基本说明:
1、数据类型
1)文本有4有类型:

TINYTEXT 256bytes
TEXT 64kb
MEDIUMTEXT 16Mb
LONGTEXT 4GB

2)时间类型

DATE # 仅年月日,格式:1000-01-01 (占三个字节)
DATETIME # 日期和时间,范围:1000-01-01 00:00:00' ~ '9999-12-31 23:59:59 (占8个字节)
TIMESTAMP # 日期和时间,和时区关联, 范围:'1970-01-01 00:00:01'  ~ '2038-01-19 03:14:07'(占4个字节)

2、数据值型字段不能为空null:int、float、decimal(精确数值)

1)Mysql导出库表结构和数据以及导入脚本到数据库

(1)导出库表结构和数据:mysqldump
在这里插入图片描述
(2)导入数据库脚本:source
①脚本中有创建库直接进mysql环境 :source filePath;
②没有创建库,进mysql环境然后:

create database databse_name; 
use database database_name;
source filePath

报错1:ERROR 2005 (HY000): Unknown MySQL server host 'xxxx'
 原因:可能是导出和导入的编码不一致,可以尝试导入编码utf8、gbk、gb2312等;也可能是mysql低版本导入到高版本所致。
 解决:进入数据库使用命令: mysql -u root -p --default-character-set=utf8
报错2:Failed to open file 'xxx.sql', error: 2
 解决:cmd中从.sql文件所在的路径进入mysql

2)为mysql数据库用户授权

在这里插入图片描述
【授予所有权限:
在这里插入图片描述

3)查看数据库/表占空间大小

进入目标数据库:use information_schema;
数据库操作——mongoDB、MySQL、KBase、Neo4j_第10张图片

4)查看各个用户信息:

root账号下查看,但是密码是加密的,无法查看。
数据库操作——mongoDB、MySQL、KBase、Neo4j_第11张图片

5、使用ibd文件恢复数据

mysql8.0之后没有frm数据结构文件了,但使用 ibd2sdi 命令可以生成类似的TXT文件:
进入 ibd 文件所在的路径(Ubuntu默认:/var/lib/mysql/)

ibd2sdi --dump-file=解析后的文件名.txt 要解析的表名.ibd

TXT 文件中内容如下:

["ibd2sdi",
{
   
	"type": 1,
	"id": 379,
	"object":
		{
   
    "mysqld_version_id": 80021,
    "dd_version": 80021,
    "sdi_version": 80019,
    "dd_object_type": "Table",
    "dd_object": {
   
        "name": "reviews_2019",
        "mysql_version_id": 80021,
        "created": 20200925073618,
        "last_altered": 20200925073618,
        "hidden": 1,
        "options": "avg_row_length=0;encrypt_type=N;key_block_size=0;keys_disabled=0;pack_record=1;stats_auto_recalc=0;stats_sample_pages=0;",
        "columns": [
            {
   
                "name": "篇名",
                "type": 27,
                "is_nullable": false,
                "is_zerofill": false,
                "is_unsigned": false,
                "is_auto_increment": false,
                "is_virtual": false,
                "hidden": 1,
                "ordinal_position": 1,
                "char_length": 65535,
                "numeric_precision": 0,
                "numeric_scale": 0,
                "numeric_scale_null": true,
                "datetime_precision": 0,
                "datetime_precision_null": 1,
                "has_no_default": true,
                "default_value_null": false,
                "srs_id_null": true,
                "srs_id": 0,
                "default_value": "AAAAAAAAAAAAAA==",
                "default_value_utf8_null": true,
                "default_value_utf8": "",
                "default_option": "",
                "update_option": "",
                "comment": "",
 

你可能感兴趣的:(sql与json,SQL,数据库)