《Unix/Linux系统编程》14章学习笔记
本章重点:MySQL关系数据库系统;MySQL;如何在Linux机器上安装和运行MySQL;如何使用MySQL在命令模式和批处理模式下使用SQL脚本创建和管理数据库;如何将MySQL与C编程相结合;如何将MySQL与PHP集成,通过动态Web页面创建和管理数据库。
MySQL简介
MySQL是一个关系数据库系统,是一个开源数据库管理系统,由服务器和客户机组成。在将客户机连接到服务器后,用户可向服务器输入SQL命令,以便创建数据库,删除数据库,存储、组织和检索数据库中的数据。
安装MySQL
Ubuntu Linux
操作如下:
sudo apt-get install mysql-server//安装MySQL
mysql_secure_installation// 配置以获得更好的安全性
第一次运行时报错
查阅资料[https://blog.csdn.net/weixin_43262264/article/details/111865499]后发现,必须使用sudo mysql_secure_installation
来运行。
要求设置密码及等级,选择中等“1”
移除匿名用户
禁止远程登录和删除测试库,重新加载即可
Slackware Linux
由于实验不采用Slackware Linux,因此只进行介绍
- 设置my.cnf
cp /etc/my-small.cnf /etc/my.cnf
- 安装所需数据库
mysql_install_db
- 设置所需的系统权限
chown -R inysql.mysql /var/lib/mysql
- 通过以下操作使Zetc/rc.d/rc.mysqld可执行:
chmod 7S5 /etc/rc.d/rc.mysqld
- 配置完成后,使用以下操作手动启动MySQL守护进程Mysqld
/etc/rc.d/rc.mysqld -start
使用MySQL
用户必须运行一个MySQL客户机来连接到服务器,MySQL支持来自远程IP主机的客户机,但本次将在同一台机器,即默认本地主机来运行服务器和客户机。
- 连接到服务器
从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命令行不区分大小写。
-
显示数据库
SHOW DATABASES;
命令可显示MySQL中的当前数据库
-
新建数据库
CREATE DATABASE dbname;
创建一个名为dbname的数据库,如果数据库已经存在,则可以使用IF NOT EXISTS子句对命令限定
-
删除数据库
DROP DATABASE dbname;
删除已存在的命名数据库,该命令可以用一个可选的IF EXISTS 子句限定
-
选择数据库
USE dbname;
命令选择一个数据库
- 创建表
假设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命令显示表格式和列属性
- 删除表
DROP TABLE table_ name
命令可删除表
示例:
创建表
CREATE TABLE dummy (
id INT PRIMARY KEY, name CHAR(20));
删除表
DROP TABLE dummy;
示例:
-
数据类型
数值类型
- INT:整型(4字节),TINYINT:(1字节),SMALLINT:(2字节)
- FLOAT:浮动指针数
字符串类型
- CHAR:固定长度字符串,长度为1~255字符
- VARCHAR:可变长度字符串,不能使用任何空格
- TEXT:可变长度的字符串
日期和时间类型
- DATE:日期
- TIME:时间:以 HH:MM:SS格式保存
-
插入行
要在表中添加行,可使用INSERT命名,具有语法形式:
INSERT INTO table_name VLAUES(columnValuel,columnValue2,....);
示例:
插入行
INSERT INTO students VALUES (1001, 'Baker', '50');
当需要手动插入多个条目时,命令行较为繁琐,因此可以采用脚本的形式
先编辑一个sql脚本文件
接着输入SOURCE insert.sql;
运行脚本;
注意:如果编辑脚本时退出了数据库,则重新进入时要用命令use重新选中数据库,再运行脚本,否则将报错
-
删除行
使用DELETE命令从表中删除行
DELETE FROM table_name;
DELETE FROM table_name WHERE condition;
示例:
INSERT INTO students VALUES (NULL, 'Zach', '45');
DELETE FROM students WHERE name = 'Zach’;
-
更新表
UPDATE命令用于修改表中的现有记录(列)
`UPDATE table_name SET coll = value1, col2 = value2,…… WHERE condition;`
示例:将walton的分数改成92分
在修改时,要注意单引号必须使用英文的
- 修改表
- 修改表名
`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. 关联表
一个真正的数据库可以能包含多个相互关联的表,使用主键-外键约束条件来定义表关系。在两个表之间创建链接,其中一个表的主键与另一个表的外键相关联
- 一对一关系
- 一对多关系
- 多对多关系
- 自引用关系
-
连接操作
-
MySQL数据库关系图
用数据库关系图来描述表之间的关系非常有用,这类关系图通常称为ERD(实体关系图)或EERD(增强/扩展ERD)
-
MySQL脚本
与普通unix/Linux sh一样,MySQL shell也可以接受和执行脚本文件。MySQL脚本文件的后缀是.sql
C语言MySQL编程
C语言程序与MySQL之间的接口由mysqlclient库中的一系列MySQL C API函数支持
PHP MySQL编程
PHP通常用作Web沾点的前端,它与后端数据库引擎交互,通过动态Web页面在线存储和检索数据。
苏格拉底挑战: