《Unix/Linux系统编程》14章学习笔记

本章重点:MySQL关系数据库系统;MySQL;如何在Linux机器上安装和运行MySQL;如何使用MySQL在命令模式和批处理模式下使用SQL脚本创建和管理数据库;如何将MySQL与C编程相结合;如何将MySQL与PHP集成,通过动态Web页面创建和管理数据库。

MySQL简介

MySQL是一个关系数据库系统,是一个开源数据库管理系统,由服务器和客户机组成。在将客户机连接到服务器后,用户可向服务器输入SQL命令,以便创建数据库,删除数据库,存储、组织和检索数据库中的数据。

安装MySQL

Ubuntu Linux

操作如下:

  1. sudo apt-get install mysql-server//安装MySQL
  2. mysql_secure_installation// 配置以获得更好的安全性

    第一次运行时报错
    查阅资料[https://blog.csdn.net/weixin_43262264/article/details/111865499]后发现,必须使用sudo mysql_secure_installation来运行。

    要求设置密码及等级,选择中等“1”

    移除匿名用户

    禁止远程登录和删除测试库,重新加载即可

Slackware Linux

由于实验不采用Slackware Linux,因此只进行介绍

  1. 设置my.cnf
    cp /etc/my-small.cnf /etc/my.cnf
  2. 安装所需数据库
    mysql_install_db
  3. 设置所需的系统权限
    chown -R inysql.mysql /var/lib/mysql
  4. 通过以下操作使Zetc/rc.d/rc.mysqld可执行:
    chmod 7S5 /etc/rc.d/rc.mysqld
  5. 配置完成后,使用以下操作手动启动MySQL守护进程Mysqld
    /etc/rc.d/rc.mysqld -start

使用MySQL

用户必须运行一个MySQL客户机来连接到服务器,MySQL支持来自远程IP主机的客户机,但本次将在同一台机器,即默认本地主机来运行服务器和客户机。

  1. 连接到服务器
    从X-window终端输入MySQL客户机命令mysql,它连接到同一台计算机上默认本地主机上的MySQL服务器
mysql -u root –p# specify the root user with password
Enter password: # enter the MySQL root user password
mysql> # mysql prompt

第一次运行时,提示ACCESS DENIED

只能采用 sudo mysql方式进入,修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
注意:此时由于之前设置了密码等级,不符合要求的密码将无法通过

对照如下:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
修改好后,记得关闭MySQL并重启,方可正常登录

连接到服务器后,即可访问MySQL shell
注意:

  • 所有的命令行末尾必须是分号。
  • MySQL命令行不区分大小写。
  1. 显示数据库
    SHOW DATABASES;命令可显示MySQL中的当前数据库

  2. 新建数据库

    CREATE DATABASE dbname; 创建一个名为dbname的数据库,如果数据库已经存在,则可以使用IF NOT EXISTS子句对命令限定

  3. 删除数据库

    DROP DATABASE dbname; 删除已存在的命名数据库,该命令可以用一个可选的IF EXISTS 子句限定

  4. 选择数据库

USE dbname;命令选择一个数据库

  1. 创建表
    假设cs360数据库包含以下学生记录:
struct students{
int student_id; # an integer ID number must exist
char name[20]; # name string of 20 chars
int score; # an integer exam score, which may not exist
}

CREATE TABLE table _ name; 命令回在当前数据库中创建一个表

CREATE TABLE [IF NOT EXISTS]tableName (
columnName columnType columnAttribute, ...
PRIMARY KEY(columnName),
FOREIGN KEY (columnNmae) REFERENCES tableName (columnNmae)
)

对于单个表,不需要FOREIGN KEY子句

describe or desc命令显示表格式和列属性

  1. 删除表

DROP TABLE table_ name 命令可删除表
示例:
创建表

CREATE TABLE dummy (
id INT PRIMARY KEY, name CHAR(20));

删除表
DROP TABLE dummy;

示例:

  1. 数据类型

    数值类型

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

    字符串类型

    • CHAR:固定长度字符串,长度为1~255字符
    • VARCHAR:可变长度字符串,不能使用任何空格
    • TEXT:可变长度的字符串

    日期和时间类型

    • DATE:日期
    • TIME:时间:以 HH:MM:SS格式保存
  2. 插入行

    要在表中添加行,可使用INSERT命名,具有语法形式:
    INSERT INTO table_name VLAUES(columnValuel,columnValue2,....);
    示例:
    插入行
    INSERT INTO students VALUES (1001, 'Baker', '50');


当需要手动插入多个条目时,命令行较为繁琐,因此可以采用脚本的形式
先编辑一个sql脚本文件

接着输入SOURCE insert.sql; 运行脚本;
注意:如果编辑脚本时退出了数据库,则重新进入时要用命令use重新选中数据库,再运行脚本,否则将报错

  1. 删除行

    使用DELETE命令从表中删除行
    DELETE FROM table_name;
    DELETE FROM table_name WHERE condition;
    示例:
    INSERT INTO students VALUES (NULL, 'Zach', '45');
    DELETE FROM students WHERE name = 'Zach’;

  2. 更新表

UPDATE命令用于修改表中的现有记录(列)
`UPDATE table_name SET coll = value1, col2 = value2,…… WHERE condition;`

示例:将walton的分数改成92分
在修改时,要注意单引号必须使用英文的

  1. 修改表
- 修改表名 

  `ALTER TABLE table name renAme To new_name;`

- 添加列

  `ALTER TABLE table name ADD column name datatype;`

- 删除行

  `ALTER TABLE table name DROP column name datatype;`

- 更改/修改行

  `ALTER TABLE table name ALTER COLUNN column_name datatype;`

示例:在studeng中加入一个grade 的列,并更新其中的内容

也可以使用where 条件语句中的分数范围来分配字母等级

此处教材中出现了问题,当score=80时没有分配等级,只需将其分配给A或B都可
13. 关联表

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

- 一对一关系
- 一对多关系
- 多对多关系
- 自引用关系
  1. 连接操作

  2. MySQL数据库关系图

    用数据库关系图来描述表之间的关系非常有用,这类关系图通常称为ERD(实体关系图)或EERD(增强/扩展ERD)

  3. MySQL脚本

    与普通unix/Linux sh一样,MySQL shell也可以接受和执行脚本文件。MySQL脚本文件的后缀是.sql

C语言MySQL编程

C语言程序与MySQL之间的接口由mysqlclient库中的一系列MySQL C API函数支持

PHP MySQL编程

PHP通常用作Web沾点的前端,它与后端数据库引擎交互,通过动态Web页面在线存储和检索数据。
苏格拉底挑战: