NetDevOps常用数据库安装与基本操作--SQL数据库

概述:

数据库是NetDevOps中不可或缺的一部分,而为了满足具体场景的需求,使用不同类型的数据库来存储信息也是必然之势。在NetDevOps中,常用的数据库有如下几种类型:

  1. 关系型数据库:PSQL、MYSQL
  2. 文档型数据库:MongoDB
  3. 时序型数据库:InfluxDB
  4. 搜索型数据库:ElasticSearch

文档型、时序型、搜索型等非关系型数据库,也被称为NoSQL数据库。术业有专攻,对于数据库领域相关的知识,网络工程师并不需要深入的学习,但是常用数据库的基本知识还是必要的。

注意:一般代码和数据库最好分开存储在不同的设备上。

PSQL:

PSQL快速安装请参考:
https://blog.csdn.net/tushanpeipei/article/details/115905946?spm=1001.2014.3001.5501

关系型数据库,也是最常用的数据库,在数据组织比较复杂时的首选。关系模型中常用的概念:

  1. 数据库: 数据库是一些关联表的集合。
  2. 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  3. 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
  4. 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  5. 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  6. 外键:外键用于关联两个表(关系型数据库的精髓)。
  7. 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

需要说明的是,在NetdevOps中,使用ORM将类和数据库进行映射(例如Django的ORM),然后使用程序语言进行数据库的操作更为常见和主流。

数据类型:
在这里插入图片描述

常用命令:

  1. 登陆psql:
    Linux直接登陆:

    psql -U dbuser(用户名) -d exampledb(数据库名称) -h 192.168.0.166(数据库IP地址) -p 5432(PSQL默认端口)
    

    psql图形化界面:使用pycharm等自带的图形化查看工具,或者专门查看psql的图形化工具pgadmin连接。

  2. 创建数据库:

    CREATE DATABASE runoobdb(数据库名称);
    
  3. 删除数据库:

    DROP DATABASE runoobdb(数据库名称);
    
  4. 创建数据库管理员,并赋予对应数据库的权限:

    CREATE USER dev_dbuser WITH PASSWORD 'Cisc0123';
    GRANT ALL ON DATABASE runoobdb TO dev_dbuser;
    
  5. 查看已经存在的数据库:

    使用 \l 用于查看已经存在的数据库:

    postgres=# \l
    							 List of databases
       Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
    -----------+----------+----------+---------+-------+-----------------------
     postgres  | postgres | UTF8     | C       | C     | 
     runoobdb  | postgres | UTF8     | C       | C     | 
     template0 | postgres | UTF8     | C       | C     | =c/postgres          +
               |          |          |         |       | postgres=CTc/postgres
     template1 | postgres | UTF8     | C       | C     | =c/postgres          +
               |          |          |         |       | postgres=CTc/postgres
    (4 rows)
    
  6. 进入对应数据库:
    使用\c进入对应的数据库:

    postgres=# \c runoobdb
    You are now connected to database "runoobdb" as user "postgres".
    runoobdb=# 
    
  7. 其他控制台命令:
    \h:查看SQL命令的解释,比如\h select。
    ?:查看psql命令列表。
    \d:列出当前数据库的所有表格。
    \d [table_name]:列出某一张表格的结构。
    \du:列出所有用户。
    \e:打开文本编辑器。
    \conninfo:列出当前数据库和连接的信息。

数据库操作:

  1. 创建表格:

    CREATE TABLE COMPANY(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    );
    

    创建了一个表,表名为 COMPANY 表格,主键为 ID,NOT NULL 表示字段不允许包含 NULL 值。

  2. 删除数据库的表格:

    drop table  company;
    
  3. 在表格中插入数据:

    INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY,JOIN_DATE) VALUES (1, 'Paul', 32, 'California', 20000.00,'2001-07-13');
    
  4. 查询表格中数据:
    查看表格中的所有信息:

    runoobdb=# SELECT * FROM company;
    
    ID        NAME        AGE        ADDRESS     SALARY   JOIN_DATE
    ----      ----------  -----      ----------  -------      --------
    1         Paul        32         California  20000.0      2001-07-13
    2         Allen       25         Texas                    2007-12-13
    3         Teddy       23         Norway      20000.0
    4         Mark        25         Rich-Mond   65000.0      2007-12-13
    5         David       27         Texas       85000.0      2007-12-13
    

    查看表格中的指定信息:

    runoobdb=# SELECT ID,NAME FROM company;
     id | name  
    ----+-------
      1 | Paul
      2 | Allen
      3 | Teddy
      4 | Mark
      5 | David
    (5 rows)
    

    读取 SALARY 字段大于 50000 的数据:

    runoobdb=# SELECT * FROM COMPANY WHERE SALARY > 50000;
     id | name  | age |address    | salary
    ----+-------+-----+-----------+--------
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
    (2 rows)
    

    读取 AGE 字段大于等于 25 且 SALARY 字段大于等于 6500 的数据:

    runoobdb=# SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 6500;
     id | name  | age |                      address                  | salary
    ----+-------+-----+-----------------------------------------------+--------
      1 | Paul  |  32 | California                                    |  20000
      2 | Allen |  25 | Texas                                         |  15000
      4 | Mark  |  25 | Rich-Mond                                     |  65000
      5 | David |  27 | Texas                                         |  85000
    (4 rows)
    

    除了AND,其他逻辑运算符如下:
    在这里插入图片描述

  5. 更新表格:
    以下实例将更新 COMPANY 表中 id 为 3 的 salary 字段值:

    UPDATE COMPANY SET SALARY = 15000 WHERE ID = 3;
    

    结果如下:

    id | name  | age | address    | salary
    ----+-------+-----+------------+--------
      1 | Paul  |  32 | California |  20000
      2 | Allen |  25 | Texas      |  15000
      4 | Mark  |  25 | Rich-Mond  |  65000
      5 | David |  27 | Texas      |  85000
      6 | Kim   |  22 | South-Hall |  45000
      7 | James |  24 | Houston    |  10000
      3 | Teddy |  23 | Norway     |  15000
    
  6. 删除操作:
    删除表格中的ID为2的一行:

    runoobdb=# DELETE FROM COMPANY WHERE ID = 2;
    

    删除整个表格:

    DELETE FROM COMPANY;
    
  7. 对表格进行排序:
    按照age属性,升序:

     runoobdb=# SELECT * FROM COMPANY ORDER BY AGE ASC;
    

    结果如下:

     id | name  | age |                      address                       | salary 
    ----+-------+-----+----------------------------------------------------+--------
      6 | Kim   |  22 | South-Hall                                         |  45000
      3 | Teddy |  23 | Norway                                             |  20000
      7 | James |  24 | Houston                                            |  10000
      4 | Mark  |  25 | Rich-Mond                                          |  65000
      2 | Allen |  25 | Texas                                              |  15000
      5 | David |  27 | Texas                                              |  85000
      1 | Paul  |  32 | California                                         |  20000
    (7 rows)
    

    如果是降序排列,仅需将ASC修改为DESC。

  8. 对相同的数据进行分组:
    GROUP BY 语句和 SELECT 语句一起使用,用来对相同的数据进行分组。GROUP BY 在一个 SELECT 语句中,放在 WHRER 子句的后面,ORDER BY 子句的前面。

    以如下数据为基础:

     id | name  | age | address      | salary
     ----+-------+-----+--------------+--------
       1 | Paul  |  32 | California   |  20000
       2 | Allen |  25 | Texas        |  15000
       3 | Teddy |  23 | Norway       |  20000
       4 | Mark  |  25 | Rich-Mond    |  65000
       5 | David |  27 | Texas        |  85000
       6 | Kim   |  22 | South-Hall   |  45000
       7 | James |  24 | Houston      |  10000
       8 | Paul  |  24 | Houston      |  20000
       9 | James |  44 | Norway       |   5000
      10 | James |  45 | Texas        |   5000
    

    现在再根据 NAME 字段值进行分组,找出每个客户的工资总额:

    runoobdb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME;
    

    结果如下:

    name  |  sum
    -------+-------
     Allen | 15000
     David | 85000
     James | 20000
     Kim   | 45000
     Mark  | 65000
     Paul  | 40000
     Teddy | 20000
    (7 rows)
    

    可以看到,James的工资总额(sum)为10000+5000+5000 = 20000。Paul的工资总额为20000+20000=40000。由于其他的名字唯一,所以没有进行叠加。

  9. 筛选分组后的各组数据:
    HAVING 子句可以让我们筛选分组后的各组数据。WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。

    下面实例将找出根据 NAME 字段值进行分组,并且 name(名称) 字段的计数少于 2 数据:

    SELECT NAME FROM COMPANY GROUP BY name HAVING count(name) < 2;
    

    结果为:

      name
     -------
      Teddy
      Paul
      Mark
      David
      Allen
      Kim
      James
    
  10. psql约束:
    NOT NULL:指示某列不能存储 NULL 值。

    CREATE TABLE COMPANY1(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    );
    

    UNIQUE:确保某列的值都是唯一的。

    CREATE TABLE COMPANY2(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL UNIQUE,
       ADDRESS        CHAR(50),
       SALARY         REAL    DEFAULT 50000.00
    );
    

    PRIMARY Key:PRIMARY KEY 称为主键,是数据表中每一条记录的唯一标识。设置 UNIQUE 的列可能有多个,但是一张表只有一列可以设置 PRIMARY KEY。我们可以使用主键来引用表中的行,也可以通过把主键设置为其他表的外键,来创建表之间的关系。主键是非空约束和唯一约束的组合。入下述表:ID为主键。

    CREATE TABLE COMPANY3(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL
    );
    

    FOREIGN Key: FOREIGN KEY 即外键约束,指定列(或一组列)中的值必须匹配另一个表的某一行中出现的值。通常一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。
    如下是一个students表:

    CREATE TABLE STUDENTS(
       ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       CLASS          CHAR(50)     NOT NULL,
       GRADE		  INT	  NOT NULL,
    );
    

    COURSE使用了STUDENTS_ID作为外键,指向STUDENTS表的主键ID:

    CREATE TABLE COURSE(
       ID INT PRIMARY KEY     NOT NULL,
       COURSE_NAME    TEXT    NOT NULL,
       STUDENTS_ID    INT     references STUDENTS(ID)
    );
    

    外键查询:

    Left join:即左连接,是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。

    Right join:即右连接,是以右表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将右表所有的查询信息列出,而左表只列出ON后条件与右表满足的部分。右连接全称为右外连接,是外连接的一种。

    举例:要查询选择了音乐课学生的情况,查询语句为:

    SELECT * FROM STUDENTS LEFT JOIN COURSE ON STUDENTS.ID=COURSE.STUDENTS_ID WHERE COURSE.COURSE_NAME = 'music';
    

    左外连接查询中左端表(STUDENTS表)中的所有元组的信息都得到了保留。

整理资料来源:
https://www.runoob.com/postgresql/postgresql-tutorial.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值