FreeBSD 中文社区 2025 第二季度问卷调查
FreeBSD 中文社区(CFC)
VitePress 镜像站QQ 群 787969044视频教程Ⅰ视频教程Ⅱ
  • FreeBSD 从入门到追忆
  • 中文期刊
  • 状态报告
  • 发行说明
  • 手册
  • 网络文章集锦
  • 笔记本支持报告
  • Port 开发者手册
  • 架构手册
  • 开发者手册
  • 中文 man 手册
  • 文章
  • 书籍
  • UNIX 四分之一世纪
  • FreeBSD 从入门到追忆(第三版:草稿)
  • 编辑日志
  • 目录
  • 致谢
  • 初版序言:好望角与塔吊
  • 再版序言:回到复制粘贴,面向教程本身
  • 三版序言:且有大觉而后知此其大梦也(草稿)
  • 前言
  • 第 1 章 FreeBSD 初见
    • 第 1.1 节 操作系统的历程:UNIX、Unix-like、Linux & FreeBSD
    • 第 1.2 节 FreeBSD 简史
    • 第 1.3 节 谁在使用 FreeBSD?
    • 第 1.4 节 为什么要使用 FreeBSD?
    • 第 1.5 节 Linux 用户迁移指南
    • 第 1.6 节 FreeBSD 桌面发行版
    • 第 1.7 节 BSD 许可证概览
  • 第 2 章 安装 FreeBSD
    • 第 2.1 节 安装前准备(新手入门版本)
    • 第 2.2 节 FreeBSD 安装图解(新手入门版本)
    • 第 2.3 节 UNIX 基础(新手入门版本)
    • 第 2.4 节 命令行基础(新手入门版本)
    • 第 2.5 节 安装 FreeBSD——基于 VMware Workstation Pro
    • 第 2.6 节 安装 FreeBSD——基于 Virtual Box
    • 第 2.7 节 手动安装双系统(先安装 FreeBSD)
    • 第 2.8 节 手动安装双系统(后安装 FreeBSD)
    • 第 2.9 节 安装 FreeBSD——基于 Apple M1 & Parallels Desktop 20
    • 第 2.10 节 安装 FreeBSD——基于 Apple M1 & VMware Fusion Pro
    • 第 2.11 节 Qemu 安装 RISC-V FreeBSD(基于 x86 Windows)
    • 第 2.12 节 云服务器安装 FreeBSD(基于腾讯云轻量云)
    • 第 2.13 节 安装 FreeBSD——基于 Hyper-V
  • 第 3 章 包管理器与 FreeBSD 系统更新
    • 第 3.1 节 FreeBSD 镜像站现状
    • 第 3.2 节 FreeBSD 换源方式
    • 第 3.3 节 gitup 的用法
    • 第 3.4 节 通过 pkg 包管理器安装二进制包
    • 第 3.5 节 通过 Ports 以源代码方式安装软件
    • 第 3.6 节 通过 DVD 安装软件
    • 第 3.7 节 通过 freebsd-update 更新 FreeBSD
    • 第 3.8 节 通过源代码更新 FreeBSD
    • 第 3.9 节 使用 pkgbase 更新 FreeBSD
  • 第 4 章 桌面环境
    • 第 4.1 节 显卡驱动(英特尔、AMD)
    • 第 4.2 节 显卡驱动(NVIDIA)
    • 第 4.3 节 GNOME
    • 第 4.4 节 Mate
    • 第 4.5 节 Xfce
    • 第 4.6 节 Cinnamon
    • 第 4.7 节 Lumina
    • 第 4.8 节 LXQt
    • 第 4.9 节 bspwm
    • 第 4.10 节 IceWM
    • 第 4.11 节 Budgie
    • 第 4.12 节 i3wm
    • 第 4.13 节 CDE
    • 第 4.14 节 Hyprland
    • 第 4.15 节 LXDE
    • 第 4.16 节 Window Maker
    • 第 4.17 节 Fluxbox
    • 第 4.18 节 KDE6
    • 第 4.19 节 主题美化
    • 第 4.20 节 远程桌面
    • 第 4.21 节 root 登录桌面
  • 第 5 章 中文环境配置
    • 第 5.1 节 本地化环境变量
    • 第 5.2 节 Fcitx 输入法框架
    • 第 5.3 节 IBus 输入法框架
    • 第 5.4 节 五笔输入法
    • 第 5.5 节 网络浏览器
    • 第 5.6 节 QQ(Linux 版)
    • 第 5.7 节 更换字体
    • 第 5.8 节 金山 WPS(Linux 版)
    • 第 5.9 节 压缩与解压
    • 第 5.10 节 微信(Linux 版)
  • 第 6 章 多媒体与外设
    • 第 6.1 节 声卡
    • 第 6.2 节 蓝牙
    • 第 6.3 节 打印机
    • 第 6.4 节 触摸板
    • 第 6.5 节 音频播放器
    • 第 6.6 节 视频播放器
    • 第 6.7 节 音频图形图像处理
  • 第 7 章 代理服务器
    • 第 7.1 节 HTTP 代理
    • 第 7.2 节 V2ray
    • 第 7.3 节 Mihomo(原 Clash)
    • 第 7.4 节 OpenVPN
  • 第 8 章 账户与权限
    • 第 8.1 节 sudo 与 doas
    • 第 8.2 节 用户与组
    • 第 8.3 节 用户权限
  • 第 9 章 Jail
    • 第 9.1 节 Jail 配置
    • 第 9.2 节 Jail 更新
    • 第 9.3 节 使用 Qjail 管理 Jail
  • 第 10 章 虚拟化与容器
    • 第 10.1 节 通过 BVCP 以网页管理 BHyve
    • 第 10.2 节 使用 bhyve 安装 Windows 11(vm-bhyve)
    • 第 10.3 节 Podman
  • 第 11 章 计算机概论
    • 第 11.1 节 存储卡参数简介与测试
    • 第 11.2 节 总线接口与协议
    • 第 11.3 节 网络基础
    • 第 11.4 节 操作系统
    • 第 11.5 节 MySQL 数据库
  • 第 12 章 引导恢复与 TTY 配置
    • 第 12.1 节 单用户模式与密码重置
    • 第 12.2 节 配置 rEFInd(双系统用)
    • 第 12.3 节 FreeBSD 中文 TTY 控制台
    • 第 12.4 节 引导界面与控制台界面
    • 第 12.5 节 Grub & UEFI 与 efibootmgr
  • 第 13 章 FreeBSD 系统管理
    • 第 13.1 节 FreeBSD src 源码概览
    • 第 13.2 节 FreeBSD 系统概览
    • 第 13.3 节 bsdconfig 系统配置工具
    • 第 13.4 节 SSH 配置与相关工具
    • 第 13.5 节 BSD init 管理服务
    • 第 13.6 节 利用脚本自动生成 BSDlibc 库文本
  • 第 14 章 网络管理
    • 第 14.1 节 TCP 堆栈
    • 第 14.2 节 WiFi
    • 第 14.3 节 USB 网络共享(USB tethering)
    • 第 14.4 节 USB 网卡 & 以太网卡
  • 第 15 章 FreeBSD 防火墙
    • 第 15.1 节 网络参数配置命令
    • 第 15.2 节 Packet Filter(PF)
    • 第 15.3 节 IPFilter(IPF)
    • 第 15.4 节 ipfirewall(IPFW)
    • 第 15.5 节 Fail2Ban(基于 IPFW、PF、IPF)
  • 第 16 章 服务器
    • 第 16.1 节 FTP 服务器
    • 第 16.2 节 MinIO 对象存储服务
    • 第 16.3 节 Gitlab-EE
    • 第 16.4 节 时间服务
    • 第 16.5 节 WildFly
    • 第 16.6 节 Rsync 同步服务
    • 第 16.7 节 Samba 服务器
    • 第 16.8 节 NFS 服务器
    • 第 16.9 节 Webmin
  • 第 17 章 网络服务器
    • 第 17.1 节 Apache
    • 第 17.2 节 Nginx
    • 第 17.3 节 PHP 8.X
    • 第 17.4 节 MySQL 5.X
    • 第 17.5 节 MySQL 8.X
    • 第 17.6 节 NextCloud——基于 PostgreSQL
    • 第 17.7 节 Telegraf+InfluxDB+Grafana 监控平台
    • 第 17.8 节 PostgreSQL 与 pgAdmin4
    • 第 17.9 节 AList
    • 第 17.10 节 prometheus 监控部署
    • 第 17.11 节 MongoDB 80
    • 第 17.12 节 Tomcat
    • 第 17.13 节 Caddy
    • 第 17.14 节 OnlyOffice(基于 PostgreSQL)
    • 第 17.15 节 Zabbix 监控(基于 PostgreSQL)
  • 第 18 章 嵌入式(树莓派、RISCV)
    • 第 18.1 节 树莓派简介与配件选用
    • 第 18.2 节 树莓派安装 FreeBSD
    • 第 18.3 节 树莓派 FreeBSD 配置
    • 第 18.4 节 树莓派与 Linux 兼容层
    • 第 18.5 节 树莓派与 OpenBSD
    • 第 18.6 节 在 RISCV 开发板上安装 OpenBSD
    • 第 18.7 节 Radxa X4(x86)
  • 第 19 章 文学故事
    • 第 19.1 节 BSD 与哲学家 George Berkeley(乔治·贝克莱)
    • 第 19.2 节 加州大学伯克利分校与“Fiat Lux”(要有光)
  • 第 20 章 游戏与科学
    • 第 20.1 节 游戏
    • 第 20.5 节 科研与专业工具
    • 第 20.6 节 我的世界(Minecraft)
  • 第 21 章 Linux 兼容层
    • 第 21.1 节 Linux 兼容层实现
    • 第 21.2 节 RockyLinux 兼容层(FreeBSD Port)
    • 第 21.3 节 Ubuntu/Debian 兼容层
    • 第 21.4 节 ArchLinux 兼容层(基于 ArchLinux bootstrap)
    • 第 21.5 节 ArchLinux 兼容层(基于 archlinux-pacman)
    • 第 21.6 节 OpenSUSE 兼容层
    • 第 21.7 节 Gentoo Linux 兼容层
    • 第 21.8 节 Rocky Linux 兼容层
    • 第 21.9 节 Slackware Linux 兼容层
    • 第 21.10 节 Deepin 兼容层
    • 第 21.11 节 Linux 兼容层与 Jail
    • 第 21.12 节 Linux 兼容层故障排除与未竟事宜
  • 第 22 章 编程环境与软件开发
    • 第 22.1 节 如何报告 Bug
    • 第 22.2 节 如何开发一个 Port
    • 第 22.3 节 如何参与 FreeBSD 开发
    • 第 22.4 节 C/C++ 环境的配置
    • 第 22.5 节 Java 环境的配置
    • 第 22.6 节 QT 环境的配置
    • 第 22.7 节 Python 与 VS Code
    • 第 22.8 节 Rust/Go 环境的配置
    • 第 22.9 节 Shell
    • 第 22.10 节 通过 IDA 7 调试 FreeBSD
    • 第 22.11 节 如何订阅 FreeBSD 的邮件列表
    • 第 22.12 节 code-server 和 clangd
    • 第 22.13 节 Node.js
  • 第 23 章 文件系统与磁盘管理
    • 第 23.1 节 自动挂载文件系统
    • 第 23.2 节 ZFS
    • 第 23.3 节 磁盘扩容
    • 第 23.4 节 NTFS & Fat32
    • 第 23.5 节 Swap 交换分区的设置
    • 第 23.6 节 Linux 文件系统
    • 第 23.7 节 ZFS 磁盘加解密
  • 第 24 章 DragonFly BSD
    • 第 24.1 节 DragonFly BSD 概述
    • 第 24.2 节 安装 DragonFly BSD
    • 第 24.3 节 配置 DragonFly BSD
  • 第 25 章 TwinCAT/BSD
    • 第 25.1 节 TwinCAT/BSD 系统安装与基本配置
    • 第 25.2 节 TwinCAT/BSD 开发环境配置
  • 第 26 章 OpenBSD
    • 第 26.1 节 OpenBSD 概述
    • 第 26.2 节 安装 OpenBSD
    • 第 26.3 节 配置 OpenBSD
    • 第 26.4 节 OpenBSD 包管理器
    • 第 26.5 节 桌面与其他软件
  • 第 27 章 NetBSD
    • 第 27.1 节 NetBSD 概述
    • 第 27.2 节 NetBSD 安装图解
    • 第 27.3 节 NetBSD 换源与包管理器
    • 第 27.4 节 桌面与中文环境常用软件
由 GitBook 提供支持
LogoLogo

FreeBSD 中文社区(CFC) 2025

在本页
  • UNIX 中连接到数据库、执行 SQL 脚本
  • 建立数据库
  • 数据库重命名
  • 查看数据库
  • 进入数据库
  • 删除数据库
  • 更改数据库字符集
  • SQL 数据类型
  • 建立表
  • 表重命名
  • 查看数据库有哪些表
  • 展示表结构
  • 显示表全部信息(select 后面细说)
  • SQL 语法:注释
  • 主键、唯一、不许为空、自动编号
  • 信息写入表
  • 表新增列
  • 表删除列
  • 表修改列数据类型
  • 表添加主键
  • 表删除主键
  • 唯一性约束
  • 表添加唯一性约束
  • 表删除唯一性约束
  • 外键
  • 表添加外键
  • 表删除外键
  • 外键的概念
  • 删除父表数据时失败
  • 下面是一个父、子表格和外键的示例
  • 修改列数据类型
  • 修改表信息、删除行
  • “Where 子句”
  • 这里就需要一个知识:SQL 运算符
  • 自动维护父表和子表之间的参照完整性
  • SELECT 语句
  • 升序输出和降序输出
  • 怎么把别的表给带上(连接查询)
在GitHub上编辑
导出为 PDF
  1. 第 11 章 计算机概论

第 11.5 节 MySQL 数据库

UNIX 中连接到数据库、执行 SQL 脚本

# mysql -u root -p
# source FileName.sql

建立数据库

create database db_name;
  • db_name:数据库名

数据库命名区分大小写,最长 64 字符,别名最长 256 字符,不能使用数据库关键字。

数据库重命名

rename database old_name to new_name;
  • old_name:旧数据库名

  • new_name:新数据库名

查看数据库

show databases;

进入数据库

use db_name;
  • db_name:数据库名

删除数据库

drop database db_name;
  • db_name:数据库名

更改数据库字符集

alter database xxx
default character set UTF-8;

SQL 数据类型

  • tinyint (1B), smallint (2B), mediumint (3B), int (4B), bigint (8B)

  • float (4B), double (8B), decimal(整体位数, 小数点后位数)

  • char 是字符类型,想存字符串用 char(字符数)

  • unsigned + 数据类型 可以设置为无符号的数据类型。

建立表

create table table_name (
  column_name data_type,
  column_name data_type,
  column_name data_type
);
  • table_name:表名

  • column_name:列名

  • data_type:数据类型

表重命名

alter table old_name rename to new_name;
  • old_name:旧表名

  • new_name:新表名

查看数据库有哪些表

show tables;

展示表结构

desc tables;

显示表全部信息(select 后面细说)

select * from tables;

SQL 语法:注释

-- 注释不会被执行

写脚本加注释是一个好习惯,防止你过一段时间不知道自己写的什么...

主键、唯一、不许为空、自动编号

create table 表名
(
  -- 主键
  列名 数据类型 primary key,
  -- 唯一
  列名 char(20) unique,
  -- 不许为空
  列名 数据类型 not null,
  -- 自动编号
  列名 数据类型 auto_increment
);

信息写入表

insert into table_name (col1, col2) values (123, "李明");
  • col1:列名 1

  • col2:列名 2

表新增列

alter table table_name
add column new_col data_type;
  • new_col:新列名

  • data_type:数据类型

表删除列

alter table 表名 drop 列名;

表修改列数据类型

alter table table_name modify column col_name new_data_type;
  • new_data_type:新数据类型

表添加主键

alter table table_name
add primary key (col_name);
  • col_name:新列名

表删除主键

alter table table_name drop primary key;

唯一性约束

表添加唯一性约束

alter table table_name
add constraint constraint_name unique (col_name);
  • constraint_name:唯一约束名

  • col_name:列名

表删除唯一性约束

alter table table_name
drop index constraint_name;

外键

表添加外键

ALTER TABLE table_name
ADD CONSTRAINT fk_column_name
FOREIGN KEY (fk_column)
REFERENCES tstu(sid);
  • fk_name:外键名

  • fk_col:外部表格列名

表删除外键

alter table table_name
drop foreign key fk_name;
  • table_name:子表名

  • fk_name:外键名

外键的概念

  • 父表:外键引用的表。父表中的被引用列通常是主键(PRIMARY KEY)或唯一键(UNIQUE)。例如上面的黄色表。

  • 子表:包含外键的表。子表中的外键列指向父表中的主键或唯一键。例如上面的绿色表。

删除父表数据时失败

  • 原因:子表中存在引用该数据的记录。

  • 解决:使用 ON DELETE CASCADE 或先删除子表中的记录。

下面是一个父、子表格和外键的示例

-- 创建父表 customers
CREATE TABLE customers (
    id INT AUTO_INCREMENT PRIMARY KEY, -- 主键,自动编号
    name VARCHAR(100) NOT NULL,        -- 客户名
    email VARCHAR(150) UNIQUE          -- 唯一的电子邮件
);

-- 创建子表 orders
CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY, -- 主键,订单编号
    order_date DATE NOT NULL,                -- 订单日期
    customer_id INT,                         -- 外键列,关联客户 ID
    amount DECIMAL(10,2),                    -- 订单金额
    FOREIGN KEY (customer_id) REFERENCES customers(id) -- 定义外键
    ON DELETE CASCADE -- 当父表记录被删除时,级联删除子表相关记录
    ON UPDATE CASCADE -- 当父表主键更新时,子表外键自动更新
);
  1. 创建父表 customers: 包含列: id:主键,用于唯一标识客户。 name:客户姓名。 email:唯一约束,用于防止重复的电子邮件地址。

  2. 创建子表 orders: order_id:主键,用于唯一标识订单。 order_date:记录订单日期。 customer_id:外键列,用于关联客户。 amount:订单金额。

  3. 设置外键:FOREIGN KEY (customer_id) REFERENCES customers(id) 表示子表的 customer_id 列引用父表的 id 列。 ON DELETE CASCADE 删除父表记录时,子表中引用该记录的行也会被删除。 ON UPDATE CASCADE 更新父表主键时,子表外键列会自动更新。

修改列数据类型

ALTER TABLE 表名
MODIFY COLUMN 列名 新数据类型;

-- 例如(重设数据类型并不许为空、设置默认值)
ALTER TABLE book_table
MODIFY COLUMN BookName CHAR(100) NOT NULL DEFAULT "《书名》";

-- 如果修改的列是外键,必须先删除外键约束,然后修改数据类型,再重新添加外键
alter table 子表格 drop FOREIGN KEY 外键名;
alter table 子表格 modify column 列名 新数据类型;
alter table 子表格 add constraint 外键名 FOREIGN KEY (列名) REFERENCES 父表名(父列名);

修改表信息、删除行

-- 修改表信息
update 表名
set 列名 = 新的值
where 条件;

注:set 你选择了一整列,想修改单个或多个位置的值,就需要 where 的条件来限定,你是要修改整列,还是其中哪个。类似横竖交叉定位一个坐标点。

-- 删除行
DELETE FROM book_table
WHERE BookNumber < 200;

下面给几个示例:

update book_table
set Price = Price * 1.2
where Publisher = "人民邮电出版社";

翻译成人话:把表 book_table 中 Publisher 值为 "人民邮电出版社" 的行,Price 值全乘以 1.2(就是增加 20%)

DELETE FROM book_table
WHERE BookNumber < 200;

DELETE FROM book_table
WHERE author IN ('王阳', '刘天洋');

“Where 子句”

...(update 或 delete)
where Price < 50;
...(update 或 delete)
WHERE author = '王阳' or author = '刘天洋';
...(update 或 delete)
WHERE name in ('张三', '李四');
  1. 如果 Price 值小于 50,就...

  2. 如果 author 值是王阳或者刘天洋,就...

  3. 如果 name 值是张三或者李四,就... where 接收写在后面的表达式,表达式会运算出一个布尔值。

这里就需要一个知识:SQL 运算符

算术运算符

  • + 加法运算符

  • - 减法运算符

  • * 乘法运算符

  • / 除法运算符

  • % 取模运算符

比较运算符

  • = 等于(也是赋值运算符)

  • != 不等于

  • < 小于

  • > 大于

  • <= 小于等于

  • >= 大于等于

  • <=> NULL 安全等于,NULL <=> NULL,返回结果是 TRUE

逻辑运算符

  • and 两条件都为真才返回真,否则为假

  • or 两条件有一个为真就是真,全是假才为假

  • not 反转真假

  • xor 仅一个条件为真才返回真,否则返回假。

特殊运算符

  • in :“值在列表中”运算符,用来筛选符合条件的表项,并对符合的项返回一个“真”的布尔值,交给前面 update 或者 delete 进行操作。例如 5 in (1, 3, 5) 返回真。

  • between 范围匹配:例如 5 between 1 and 10 返回真。

  • like 模式匹配:'abc' like 'a%' 返回真。百分号在这里类似 sh 的通配符。

  • IS NULL ”判断表项是否为 NULL“:NULL IS NULL 返回 TRUE。 例子:查看书名有没有叫《xxx 设计 xxx》的

select * from book_table
where BookName like '%设计%';

select * from book_table
where BookName like '_____';
-- 五个下划线代表五个字,返回长度为 5 个字的书名。

在一个书籍管理库中会返回类似《mysql 数据库设计》的书名。

这样一来,上面 where 后面的东西不就能看懂了?

自动维护父表和子表之间的参照完整性

  • CASCADE 级联操作:父表记录删除/更新时,子表中相关记录也被删除/更新。

  • SET NULL 将子表中的外键列设置为 NULL(要求外键列允许 NULL)。

  • RESTRICT 拒绝操作:不允许删除/更新父表中被引用的记录(立即返回错误)。

  • NO ACTION 类似 RESTRICT,但延迟到事务结束时才检查完整性。

  • SET DEFAULT 设置为默认值,MySQL 不支持。

SELECT 语句

select 后面是列名,写上 * 则是选择所有列

select * from student_table
where age=(select max(age) from student_table;);

显示 student_table 中,年龄为“student_table 中‘年龄为最大值’的条目”

升序输出和降序输出

ASC 升序,DESC 降序。

SELECT student_name FROM student_table DESC;

LIMIT a, b 截取内容。a 是索引,从 0 开始,b 是偏移量,写几就偏移几。

SELECT * from `学生表`
ORDER BY `学号` desc
LIMIT 0,3;

怎么把别的表给带上(连接查询)

显式连接

SELECT name, score --name 来自学生表,score 来自分数表
FROM stu_table -- 表一
JOIN score_table -- 表二
ON stu_table.stu_id = score_table.s_id; -- 连接条件
WHERE name = 'Jack' -- 筛选条件,后面还可以接上 AND 或 OR。

name 取自 stu_table score 取自 score_table

隐式连接

SELECT name, score
FROM stu_table, score_table
WHERE stu_table.stu_id = score_table.s_id
AND name = 'Jack';

显然隐式连接更加简洁,所以这里推荐大家使用。

上一页第 11.4 节 操作系统下一页第 12.1 节 单用户模式与密码重置

最后更新于1个月前

ON DELETE CASCADE 又是一堆内容,先略过。看。

往下数三个章节