《信息安全系统设计与实现》学习笔记12

一、学习笔记

1.什么是MySQL

      MySQL是一个关系数据库系统。在关系数据库中,数据存储在表中。关系数据库系统的标准查询语言是SQL(结构化查询语言)

2.Ubuntu Linux下MySQL的安装与使用

(1)安装MySQL

      命令sudo apt-get install mysql-server可以安装一个mysql—server包,mysql-server包包括一个MySQL服务器和一个客户机。

(2)连接MySQL

      首先要运行MySQL客户机程序,从X-window终端输入MySQL客户机命令mysql,它连接到同一台计算机上默认本地主机上的MySQL服务器。连接到MySQL服务器后,即可访冋MySQL shell,它只接受MySQL命令或MySQL脚本,而不接受普通sh命令。在输入MySQL命令时,要注意以下几点。

  • 所有的MySQL命令行末尾必须是分号。
  • MySQL命令行不区分大小写。

(3)显示数据库

      SHOW DATABASES命令可显示MySQL中的当前数据库。

(4)新建数据库

      CREATE DATABASE XXX命令将创建一个名为XXX的新数据库。

(5)删除数据库

      DROP DATABASE dbname会删除已存在的命名为dbname的数据库。DROP操作是不可逆的。一旦数据库被删除,就无法撤销或恢复

(6)选择数据库

      假设MySQL已经有几个数据库。为了操作特定的数据库,必须通过USE dbname命令选择一个数据库。

(7)创建表

      CREATE TABLE table_name命令会在当前数据库中创建一个表。DESCRIBE或DESC命令显示表格式和列属性。

(8)删除表

      DROP TABLE table_name命令可删除表。

(9)插入行

      要在表中添加行,可使用INSERT命名,具有如下语法形式:INSERT INTO table_name VLAUES(column Vaiuel, column Value2,...);

(10)删除行

      用DELETE命令从表中删除行,其语法形式如下:

(11)更新表

      UPDATE命令用于修改表中的现有记录(列)。它的语法形式如下:UPDATE table_name SET coll = valuel, col2 = value2,... WHERE condition;

(12)修改表

      ALTER TABLE命令用于添加、删除或修改当前表中的列。它还用于添加和删除当前表 中的各种约束条件。

2.MySQL中的数据类型

      MySQL中使用的基本数据类型,主要有三类:数字、字符串、日期和时间。

  • 数值类型:

    INT:整数(4字节),TINYINT:(1字节),SMALLINT:(2 字节)
    FLOAT:浮动指针数。
  • 字符串类型:

    CHAR(size):固定长度字符串,长度为1〜255字符。
    VARCHAR(size):可变长度字符串,但不能使用任何空格。
    TEXT:可变长度的字符串。
  • 日期和时间类型:

    DATE:日期格式为 YYYY-MM-DD。
    TIME:以S格式保存时间。

3.关联表

      一个真正的数据库可能包含多个相互关联的表。在MySQL中,使用主键-外键约束条件来定义表关系。在两个表之间创建链接,其中一个表的主键与另一个表的外键相关联。在MySQL中,表可能以几种方式相关联,包括:

  • 一对一(1-1)关系:
          一对一(1-1)关系是指两个表仅基于一个匹配行相互关联的关系。可以使用主键-外键约束条件创建这类关系。

  • 一对多(l-M)关系:

          一对多关系是指一个表中的一行在另一个表中有多个匹配行的关系。可以使用主键-外键关系来创建这种关系。
  • 多对多(M-M)关系:

          如果一个表中的多条记录与另一个表中的多条记录相关,则两个表具有多对多(M-M) 关系。处理M-M关系的标准方法是在两个表之间创建一个连接表。连接 表使用外键来引用两个表中的主键,从而在两个表之间创建连接。
  • 自引用关系

4.连接操作

      在MySQL中,可使用连接操作在多个表中检索数据。连接操作有4种不同的类型。

  • (INNER) JOIN table 1, table2:检索两个表中共有的项。
  • LEFT JOIN table 1, table2:检索表1中的项以及两个表中共有的项。
  • RIGHT JOIN tablel,table2:检索表2中的项以及两个表中共有的项。
  • OUTER JOIN tabell,table2:检索两个表中非共有以及没有用的项。

          对于正则集运算,MySQL中的连接操作可以解释如下。+表示两个集合的并集,^表 示两个集合的交集。

二、问题与解决办法

      运行书上代码时遇到了问题,首先我先安装了MySQL

      接着我运行书上使用C语言构建MySQL客户机程序这部分代码

#include <stdio.h>
#include <my_global.h>
#include <mysql.h>
int maln(int argc, char *argc[])
{
    printf("MySQL client version is : %s\n", mysql_get_client_info());
}  

      报错显示my_global.h:没有那个文件或目录。后面的代码也都有这样的报错

//连接MySQL服务器
#include <stdio.h>
#include <stdlib.h>
#include <my_global. h>
#include <mysql.h>
int main(int argc, char *argv[])
{
    // 1. define a connection object
    MYSQL con;
    // 2. Initialize the connection object
    if (mysql_init(&con))
    { // return object address
            printf("Connection handle initialized\n");
    }
    else
    {
            printf("Connection handle initialization failed\n");
            exit(1);
    }
    // 3. Connect to MySQL server on localhost
    if (mysql_real_connect(&con, "localhost", "root", "root_password", "CS360", 3306, NULL, 0))
    {
       printf("Connection to remote MySQL server 0K\n");
    }
    else
    {
       printf("Connection to remote MySQL failed\n");
       exit(1);
    }
    // 4. Close the connection when done
    mysql_close(&con);
}

      在网上找了一种解决办法是:输入sudo apt-get install libmysqlclient-dev命令安装libmysqlclient-dev包,但是我安装了之后仍然有这个报错,到现在还没有找到解决办法,希望上课的时候能得到解答。

三、学习感悟

      数据库在大二下学期上web课的时候就接触过,那时候没太好好学。然后数据库在公文传输系统中也用到了,但是那时候就是跟着网上的教程一步一步来,照葫芦画瓢,但其实对其中的基本知识和原理还是不太清楚的。这次在自学的时候很明显能发现跟着教程走和自己从头学还是不一样的。跟着别人的教程走虽然省事,但是由于别人已经解决了问题,缺少了自己发现问题解决问题的过程,有些东西已经学不到了。这次自学的时候遇到了好多困难,虽然有的还没找到解决办法,但是我觉得已经比之前的收获大很多了。

      

posted @ 2021-12-12 11:39  20191316王秋雨  阅读(42)  评论(0编辑  收藏  举报