C++图书管理系统(一)SQL光速入门

MySQL 基本操作

登录

启动MySQL

net start mysql

关闭MySQL

net stop mysql

在终端中输入。

mysql -u root -p

-u后面输入要登录的用户名,回车后输出密码即可登录

输入

exit

即可登出

查看当前所有的数据库

show databases;

可以看到

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
6 rows in set (0.00 sec)

这就是内置的数据库。

创建新的数据库

假设我们要创建一个数据testdb

create database testdb;

再次看场当前数据库即可看到。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| testdb             |
| world              |
+--------------------+

讲到这里,要提出两个点。第一,SQL语句和C++类似,分号用于标识一条 SQL 语句的结束。第二,SQL语句的关键字是不区分大小写,但是数据库名、表名等取决于不同的系统有些区分,有些不区分。但是行业的默认规范是关键字采用大写。因此刚才命令规划写法应该如下。

SHOW DATABASES;
CREATE DATABASE testdb;

切换数据库

我们切换到刚刚创建的数据库中。

USE testdb;

删除数据库

删除刚刚创建的数据库testdb

DROP DATABASE testdb;

什么是关系型数据库?

  1. :表是关系型数据库中存储数据的核心结构,由行和列构成的二维逻辑单元,用于组织同一类实体(如用户、订单)的数据集合。
  2. :列是表的属性字段,定义数据的类型(如整数、字符串)及约束条件(如主键、非空),用于描述实体的具体特征(如姓名、年龄)。
  3. :行是表中一条完整的记录,由多个列的值组成,代表一个具体的实体实例(如某个用户的姓名、年龄等数据),通常通过主键唯一标识。
  4. 主键:主键是关系型数据库中唯一标识表中每一行记录的字段或字段组合,其值必须唯一且不可为空,并作为数据检索、表间关联及数据完整性的核心保障。

MySQL 基本数据类型

整数类型

类型名称 大小/范围 说明
TINYINT 1字节(-128~127 或 0~255) 微小整数,常用于布尔值(0/1)。
SMALLINT 2字节(-32768~32767 或 0~65535) 较小整数,适用于年龄、数量等小范围数值。
MEDIUMINT 3字节(-838万~838万 或 0~1677万) 中等整数,较少使用。
INT 4字节(-21亿~21亿 或 0~42亿) 标准整数,适用于大多数数值场景。
BIGINT 8字节(±9.2×10¹⁸) 大整数,适用于ID、时间戳等大范围数值。

浮点数与精确小数

类型名称 大小/范围 说明
FLOAT 4字节(单精度) 精度约 6-7 位有效数字
DOUBLE 8字节(双精度) 更高精度的浮点数,适用于科学计算。精度约 15 位有效数字
DECIMAL 变长 精确小数,适用于财务数据。

日期与时间

类型名称 大小/范围 说明
DATE 3字节('1000-01-01'~'9999-12-31') 存储日期(年月日)。
TIME 3字节('-838:59:59'~'838:59:59') 存储时间(时分秒),支持负值(表示时间差)。
DATETIME 8字节('1000-01-01 00:00:00'~'9999-12-31 23:59:59') 存储日期和时间,不依赖时区。
TIMESTAMP 4字节('1970-01-01 00:00:01' UTC~'2038-01-19 03:14:07' UTC) 时间戳,自动记录数据修改时间,依赖时区
YEAR 1字节(1901~2155) 存储年份。

字符串类型

子类 类型名称 大小/范围 说明
文本 CHAR(N) 0~255字符(固定长度) 定长字符串,适合短文本(如性别CHAR(1))。
VARCHAR(N) 0~65535字符(可变长度) 变长字符串,适合长文本(如用户名、地址)。
二进制 BLOB 最大64KB~4GB(TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB 存储二进制数据(如图片、文件)。
TEXT 最大64KB~4GB(TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT 存储长文本(如文章内容),与BLOB类似但不处理字符集。
枚举/集合 ENUM('val1', 'val2') 最多65535个枚举值 单选值集合(如性别ENUM('男', '女'))。
SET('val1', 'val2') 最多64个成员 多选值集合(如兴趣SET('音乐', '运动'))。

其他类型

类型名称 大小/范围 说明
JSON 动态存储 存储JSON格式数据,支持JSON查询语法(如JSON_EXTRACT())。

常用SQL命令

注意以下命令需要在某个数据库中使用,比如USE testdb;之后才能使用。

创建表

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);

比如我们的图书管理系统创建一个表

CREATE TABLE books(
	book_id INT AUTO_INCREMENT PRIMARY KEY,
	title VARCHAR(100),
	author VARCHAR(100),
	published_date DATE
);

这个命令中,book_id比其他行多的就是约束条件。其中

  • AUTO_INCREMENT:自动生成唯一递增整数,无需手动插入(如插入时省略该字段,值会自动+1)
  • PRIMARY KEY:唯一标识每一行,强制非空且唯一,默认建立聚簇索引以加速查询。

然后title,auther的数据类型是VARCHAR(100),长度限制为100字符,实际存储空间按数据长度动态分配。

然后我们可以使用命令来查看

SHOW TABLES;

结果如下

+------------------+
| Tables_in_testdb |
+------------------+
| books            |
+------------------+

如果需要删除表,和删除数据库类似

DROP TABLE books;

插入数据

插入数据格式如下

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

参数说明:

  • table_name 是你要插入数据的表的名称。
  • column1, column2, column3, ... 是表中的列名。
  • value1, value2, value3, ... 是要插入的具体数值。
  • 如果数据是字符型,必须使用单引号 ' 或者双引号 ",如: 'value1', "value1"。

比如我们要插入一条数据

INSERT INTO books(title, author, published_date) VALUES
('The Catcher in the Rye', 'J.D. Salinger', '1951-07-16');

如果我们要插入多条数据

INSERT INTO books VALUES
(2, 'Harry Potter', 'J.K. Rowing', '1997-06-26'),
(1234, 'The Hobbit', 'J.R.R Tolkien', '1937-09-21'),
(NULL, '1984', 'Geogre Orwell', '1949-06-08');

如果要插入所有列,就可以省略列名。NULL就可以让系统自动给book_id赋值,但是请注意,他是根据插入过的最大值进行自增。

查询数据

基础查询

SELECT column1, column2, ... FROM table_name

其中column1, column2, ...表示查询的列。

比如我们查询所有的书名

SELECT title FROM books;

如果要查询完整的表,可以用*代替所有的列。

SELECT * FROM books;

更新数据

以下是语法

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

我们看当前的表格

+---------+------------------------+---------------+----------------+
| book_id | title                  | author        | published_date |
+---------+------------------------+---------------+----------------+
|       1 | The Catcher in the Rye | J.D. Salinger | 1951-07-16     |
|       2 | Harry Potter           | J.K. Rowing   | 1997-06-26     |
|    1234 | The Hobbit             | J.R.R Tolkien | 1937-09-21     |
|    1235 | 1984                   | Geogre Orwell | 1949-06-08     |
+---------+------------------------+---------------+----------------+

比如我想把《1984》的作者该成 Orwell 可以

UPDATE books
SET author = 'Orwell'
WHERE title = '1984';

删除数据

以下是语法,注意删除的是行

DELETE FROM table_name
WHERE condition;

我们看当前的表

+---------+------------------------+---------------+----------------+
| book_id | title                  | author        | published_date |
+---------+------------------------+---------------+----------------+
|       1 | The Catcher in the Rye | J.D. Salinger | 1951-07-16     |
|       2 | Harry Potter           | J.K. Rowing   | 1997-06-26     |
|       4 | test2                  | test2         | 2000-01-01     |
|       6 | test1                  | test1         | 2000-01-01     |
|    1234 | The Hobbit             | J.R.R Tolkien | 1937-09-21     |
|    1235 | 1984                   | Geogre Orwell | 1949-06-08     |
|    1238 | test3                  | test3         | 2000-01-01     |
|    1239 | test4                  | test4         | 2000-01-01     |
+---------+------------------------+---------------+----------------+

比如说我要把这几个test都删除

DELETE FROM books
WHERE book_id = 2;

这样可以删掉一个,如果我想把剩下的一起删掉可以

DELETE FROM books
WHERE book_id = 6 OR book_id = 1238 or book_id = 1239;

列的完整性约束

1. 主键约束(PRIMARY KEY)

  • 作用:唯一标识表中的每一行,确保列值唯一且非空

  • 示例:

    CREATE TABLE Students (
        student_id INT PRIMARY KEY,
        name VARCHAR(100)
    );
    
  • 注意:每个表只能有一个主键,可由单列或多列组成(多列时为表级约束)。

2. 唯一约束(UNIQUE)

  • 作用:保证列中所有值唯一,但允许存在多个NULL值(具体因数据库而异)。

  • 示例:

    CREATE TABLE Users (
        email VARCHAR(255) UNIQUE
    );
    
  • 注意:与主键不同,唯一约束允许空值,适用于需要避免重复但非唯一标识的场景(如邮箱、用户名)。

3. 非空约束(NOT NULL)

  • 作用:强制列不允许NULL值,必须提供有效数据。

  •   CREATE TABLE Employees (
          employee_id INT PRIMARY KEY,
          name VARCHAR(100) NOT NULL
      );
    

4. 默认值(DEFAULT)

  • 作用:当插入数据未指定列值时,自动填充预设的默认值。

  •   CREATE TABLE Orders (
          order_date DATE DEFAULT CURRENT_DATE
      );
    

6. 外键约束(FOREIGN KEY)

  • 作用:维护表间的参照完整性,确保列值引用另一表的主键或唯一键。

  •   CREATE TABLE Orders (
          customer_id INT REFERENCES Customers(customer_id)
      );
    
posted @   PHarr  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!
历史上的今天:
2024-03-19 20240319天梯赛训练
2024-03-19 AtCoder Beginner Contest 345
2023-03-19 AtCoder Beginner Contest 293
2022-03-19 AcWing题目选做
点击右上角即可分享
微信分享提示