SQL

SQL语句帮助

User: Anonymous (jiangjy233@gmail.com)
Created: 8/8/2025 15:34
Updated: 8/12/2025 16:21
Exported: 8/12/2025 17:13
Link: https://chatgpt.com/c/6895a877-2e78-8326-ae88-64e92fbff2b2

Prompt:

ddl语句是什么

Response:

DDL 是 Data Definition Language(数据定义语言) 的缩写,它是 SQL(结构化查询语言)的一部分,用于 定义或修改数据库结构,比如:数据库、表、视图、索引、约束等。


🔧 常见的 DDL 语句包括:

语句 功能说明
CREATE 创建数据库对象(如表、数据库、视图等)
ALTER 修改已存在的数据库对象结构
DROP 删除数据库对象(表、数据库等)
TRUNCATE 清空表中的所有数据(但保留表结构)
RENAME 重命名数据库对象

✅ 常用 DDL 示例:

1. 创建数据库

1
CREATE DATABASE school;

2. 创建数据表

1
2
3
4
5
6
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
enrollment_date DATE
);

3. 修改表结构(添加列)

1
ALTER TABLE students ADD email VARCHAR(100);

4. 删除表

1
DROP TABLE students;

5. 清空表数据,但保留表结构

1
TRUNCATE TABLE students;

🆚 DDL vs DML vs DCL 简要对比

类型 全称 用途
DDL Data Definition Language 定义和修改数据库结构(表、列、索引)
DML Data Manipulation Language 操作数据(增删查改)例如 SELECTINSERTUPDATEDELETE
DCL Data Control Language 控制访问权限,例如 GRANTREVOKE

如果你需要某个具体场景下的 DDL 语句,我可以帮你写出来——只需告诉我你希望设计的表结构或功能。

Prompt:

ddl表操作

2/2

Response:

你提到“DDL 表操作”,指的是使用 DDL(数据定义语言) 来对**数据表(Table)**进行的各种结构定义和修改操作。下面我会系统地列出:


DDL 表操作总览

1. 创建表(CREATE TABLE)

1
2
3
4
5
6
7
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
position VARCHAR(50),
salary DECIMAL(10, 2),
hire_date DATE
);

2. 修改表结构(ALTER TABLE)

➤ 添加新列:

1
ALTER TABLE employees ADD email VARCHAR(100);

➤ 修改列的数据类型:

1
ALTER TABLE employees MODIFY salary DECIMAL(12, 2);

➤ 重命名列:

(MySQL)

1
ALTER TABLE employees CHANGE name full_name VARCHAR(150);

➤ 删除列:

1
ALTER TABLE employees DROP COLUMN email;

➤ 添加主键 / 外键 / 唯一约束:

1
2
3
4
5
6
7
8
-- 添加主键
ALTER TABLE employees ADD PRIMARY KEY (id);

-- 添加唯一约束
ALTER TABLE employees ADD CONSTRAINT unique_email UNIQUE (email);

-- 添加外键
ALTER TABLE employees ADD CONSTRAINT fk_department FOREIGN KEY (dept_id) REFERENCES departments(id);

3. 删除表(DROP TABLE)

1
DROP TABLE employees;

4. 清空表数据但保留结构(TRUNCATE TABLE)

1
TRUNCATE TABLE employees;

5. 重命名表(RENAME TABLE)

1
RENAME TABLE employees TO staff;

🧠 补充说明

操作 会删除数据? 会删除表结构? 可回滚?
DROP TABLE ✅ 是 ✅ 是 ❌ 不可回滚
TRUNCATE TABLE ✅ 是 ❌ 否 ❌ 不可回滚
DELETE FROM(DML) ✅ 是(可加条件) ❌ 否 ✅ 可回滚(需开启事务)

如果你有某张具体的表结构或想实现的业务(比如学生成绩管理、订单管理、用户管理等),我可以帮你写出完整的 DDL 建表语句,告诉我你的需求即可。

Prompt:

创建表时常用约束有什么

Response:

创建表时,常用的 SQL 约束(Constraints) 用于限定数据的合法性,确保数据库中数据的准确性和完整性。


✅ 常用约束及作用一览

约束名 作用说明
PRIMARY KEY 唯一标识一条记录,不允许为 NULL 且唯一
FOREIGN KEY 保证两表数据之间的引用一致性(外键)
UNIQUE 限定某列(或组合列)值不能重复
NOT NULL 强制该字段不能为 NULL
DEFAULT 指定字段的默认值
CHECK 限定字段的值必须满足某种条件(部分数据库如 MySQL 8.0+ 才支持)
AUTO_INCREMENT 自动增长(通常用于主键,MySQL 专有)

🧱 示例:创建带各种约束的表

1
2
3
4
5
6
7
8
9
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键 + 自增
username VARCHAR(50) NOT NULL UNIQUE, -- 用户名不能为空,且唯一
email VARCHAR(100) DEFAULT 'unknown@example.com', -- 默认值
age INT CHECK (age >= 18), -- 检查约束:年龄不能小于18
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 默认当前时间
role_id INT,
FOREIGN KEY (role_id) REFERENCES roles(id) -- 外键约束:引用角色表的id
);

🔍 每种约束的解释和示例

1. PRIMARY KEY

  • 确保每条记录有唯一标识(主键)
1
id INT PRIMARY KEY

2. NOT NULL

  • 强制该列不能为空
1
username VARCHAR(50) NOT NULL

3. UNIQUE

  • 防止重复值(可用于邮箱、用户名等字段)
1
email VARCHAR(100) UNIQUE

4. DEFAULT

  • 如果插入时未提供值,则使用默认值
1
status VARCHAR(20) DEFAULT 'active'

5. CHECK

  • 限制字段值范围(如年龄必须 ≥ 18)
1
age INT CHECK (age >= 18)

⚠️ 注意:MySQL 在 8.0 之前版本对 CHECK 语法支持不好,可能会被忽略。

6. FOREIGN KEY

  • 创建引用另一个表的字段,确保引用数据存在
1
FOREIGN KEY (role_id) REFERENCES roles(id)

7. AUTO_INCREMENT

  • 整数主键自动增长(MySQL 专用)
1
id INT AUTO_INCREMENT

🧠 小贴士:

  • 每个表只能有一个主键,但可以有多个唯一约束。
  • 外键约束默认会拒绝删除或更新引用表中的数据,可以加 ON DELETE / ON UPDATE 条件控制行为。
    1
    FOREIGN KEY (dept_id) REFERENCES departments(id) ON DELETE CASCADE

如你有特定业务场景(如学生管理、订单系统等),我可以帮你定制建表语句和推荐合适的约束。需要的话直接告诉我。

Prompt:

mysql数据类型

Response:

在 MySQL 中,数据类型决定了表中字段能存储什么类型的数据。它们可以分为以下几类:


📦 一、数值类型

✅ 1. 整数类型

类型 大小(字节) 范围(有符号) 说明
TINYINT 1 -128 ~ 127 适用于很小的整数
SMALLINT 2 -32,768 ~ 32,767
MEDIUMINT 3 -8百万 ~ 8百万
INTINTEGER 4 -21亿 ~ 21亿 常用
BIGINT 8 超过 ±9千万亿 适用于大数,如金额、ID

加上 UNSIGNED 关键字可使范围变为非负(从 0 开始翻倍)
例:INT UNSIGNED → 0 ~ 42亿多


✅ 2. 小数/浮点类型

类型 说明
DECIMAL(M,D)NUMERIC(M,D) 精确小数,适用于金额。M 是总位数,D 是小数位数。例:DECIMAL(10,2)
FLOAT(M,D) 单精度浮点,适用于不要求精度的计算
DOUBLE(M,D)REAL(M,D) 双精度浮点,误差更小

🕒 二、日期和时间类型

类型 格式 说明
DATE YYYY-MM-DD 日期
TIME HH:MM:SS 时间
DATETIME YYYY-MM-DD HH:MM:SS 日期+时间
TIMESTAMP DATETIME 通常用于记录创建或更新时间(可自动更新)
YEAR YYYY 表示年份(如 2025)

🔤 三、字符串类型

✅ 1. 定长与变长字符

类型 说明
CHAR(n) 固定长度,适用于定长字段,如身份证号
VARCHAR(n) 变长,最大长度 65535 字节,适合变长文本,如姓名、邮箱等

推荐使用 VARCHAR,节省空间。CHAR 适合长度一致的场景。


✅ 2. 文本类型(适用于长文本)

类型 最大长度 用途
TINYTEXT 255 字节 短文本
TEXT 65KB 普通文本,如评论
MEDIUMTEXT 16MB 较大文本
LONGTEXT 4GB 超长文本,如文章正文

📁 四、二进制类型(少用)

类型 用途
BINARY(n) 定长二进制
VARBINARY(n) 变长二进制
BLOB 存储二进制大对象,如图片、音频等

🧠 小提示

  • 选择合适的数据类型有利于节省存储、提高性能。
  • 在金额相关场景中推荐使用 DECIMAL 而不是 FLOAT/DOUBLE,因为浮点数有精度问题。
  • VARCHARTEXT 更高效,可以创建索引;TEXT 不能直接作为索引字段(需加前缀)。

如你需要为某张表选择合适的数据类型或做设计,我可以帮你写一个建表语句或推荐字段类型。需要的话请提供表的结构或业务需求。

Prompt:

DQL语句中的聚合函数

Response:

DQL(Data Query Language,数据查询语言)中,聚合函数(Aggregate Functions)用于对一组数据进行计算并返回单一结果,常与 GROUP BY 搭配使用。


📊 常见聚合函数

函数 作用 示例
COUNT() 统计行数(记录数) COUNT(*) 统计总行数,COUNT(column) 统计非 NULL 的行数
SUM() 计算总和 SUM(salary) 计算工资总和
AVG() 计算平均值 AVG(salary)
MAX() 求最大值 MAX(salary)
MIN() 求最小值 MIN(salary)

🔹 基本用法

1
2
3
4
5
6
7
SELECT 
COUNT(*) AS total_employees, -- 总人数
AVG(salary) AS avg_salary, -- 平均工资
MAX(salary) AS highest_salary, -- 最高工资
MIN(salary) AS lowest_salary, -- 最低工资
SUM(salary) AS total_salary -- 工资总额
FROM employees;

🔹 搭配 GROUP BY 使用

1
2
3
4
5
6
7
-- 按部门统计员工数量和平均工资
SELECT
department_id,
COUNT(*) AS emp_count,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;

🔹 搭配 HAVING 过滤分组结果

1
2
3
4
5
6
7
-- 查询平均工资高于 5000 的部门
SELECT
department_id,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 5000;

🧠 小提示

  1. COUNT(*) 会统计所有行,包括 NULL 值;
    COUNT(column) 只统计该列非 NULL 的行。
  2. 聚合函数忽略 NULL 值COUNT(*) 除外)。
  3. 聚合函数通常不能直接与普通列混用,必须配合 GROUP BY

如果你需要的话,我可以帮你整理 DQL 聚合函数 + GROUP BY + HAVING 的速查表,方便你考试或面试用。
你要我帮你做吗?


Powered by ChatGPT Exporter