☰
数据库基础入门:数据类型、约束、DDL、DML 与事务详解
2026/10/28 10:12:05 网站建设 项目流程

一、数据库的常用数据类型

1. 字符串类型

char:char 的长度是固定的(指的是当定义了一个长度之后,如果你存入的字符不足以达到定义的上限,那么会在后面补上空格凑齐长度),因此速度会略快。

varchar:varchar 的长度是可变的(指的是定义了一个长度之后,如果存入的字符不足以达到定义的上限,那么只会存多少就会占用多少空间,如果后面还有加上则会加长空间,而不是加长定义的长度),因此速度会略慢。

在使用过程中一般使用 varchar,除非一些非常固定的需要存储才会用到 char。

  • blob:二进制形式的长文本数据
  • text:长文本数据
  • longtext:极大文本的数据

2. 数字类型

  • int或者integer:4 字节
  • bigint:8 字节,64 位
  • float:4 字节
  • double:8 字节

整数使用 int,浮点数使用 float、double。

3. 日期和时间类型

  • date:日期
  • datetime:日期 + 时间

二、表命名的规范

  • 必须以字母开头
  • 字符长度在 2-30 之间
  • 只能包含 A-Z、a-z、0-9、# 和 $ 等等
  • 被同一个用户拥有的对象不能有重复的名字
  • 不能是 Oracle 服务器保留字

三、主键

表中经常有一个或者多个列的组合,其值可以唯一准确地标识表中的每一行。

四、约束

约束用来限制加入表的数据的类型。

1. 主键约束

可以定义在表级或者列级。

  1. 键列必须具有唯一性,且不可以为空
  2. 一个表里面只能有一个主键
  3. 主键所在的列必须具有索引,如果没有,则在添加索引的时候自动创建

2. 唯一性约束

可以定义在表级或者列级。

  1. 索引是必须的,如果不存在则会自动创建一个
  2. 允许 null 值,UNIQUE 约束可以存在多个 null,因为 UNIQUE 的唯一性通过 B+ 树索引来实现,而 B+ 树索引中不包含 null。但是这也造成了 where 语句中用 null 值进行过滤会造成全表扫描。

3. 非空约束

只能定义在列级。

非空约束作用的列也叫强制列,也就是说强制列中必须有值,如果在建表的时候使用 default 关键字指定了默认值的话,那么就不可以输入了。

4. 外键约束

可以定义在表级或者列级。

外键约束是在具有父子关系的两个表当中,子表中的某一列对应了父表中的主键列,用来维护数据库的完整性。

  1. 外键约束中子表对应父表的列数据类型必须相同,但是列名可以不同
  2. 子表对应的父表的列必须存在主键约束或唯一约束
  3. 列允许 null 值,但是这一行的话就会变成孤行了

5. 检查约束

检查约束是用来实施一些简单的规则,比如说让值必须要在某个范围内,结果必须是一个为 true 或者 false 的表达式。

五、DDL 语法

DDL 是用来创建、修改、删除表和索引,核心的四个关键字为 create、alter、delete 和 truncate。

1. 库 database

-- 1. 创建数据库 CREATE DATABASE testdb; -- 2. 查看数据库 SHOW DATABASES; -- 3. 切换数据库 USE testdb; -- 4. 修改数据库字符集 ALTER DATABASE testdb; -- 5. 删除数据库 DROP DATABASE testdb;

2. 表 table

-- 1. 创建表 CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键', name VARCHAR(20) NOT NULL COMMENT '学生姓名', age TINYINT COMMENT '年龄', birthday DATE COMMENT '生日', create_time DATETIME COMMENT '创建时间' ) COMMENT = '学生表'; -- 2. 查看建表语句 SHOW CREATE TABLE student; -- 3. 查看表结构 DESC student; DESCRIBE student; -- 4. 删除表 DROP TABLE student;

使用 alter 修改表:

-- 1.新增字段 ALTER TABLE student ADD COLUMN email VARCHAR(50) COMMENT '邮箱'; -- 2.修改字段类型/约束/注释 ALTER TABLE student MODIFY COLUMN age INT COMMENT '学生年龄'; -- 3.修改字段名字 + 类型(CHANGE) ALTER TABLE student CHANGE COLUMN email phone VARCHAR(11) COMMENT '手机号'; -- 4.删除字段 ALTER TABLE student DROP COLUMN phone; -- 5.修改表注释 ALTER TABLE student COMMENT '学生信息表'; -- 6.修改表名 ALTER TABLE student RENAME TO stu;

六、设计范式

1. 第一范式(1NF)

数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。

2. 第二范式(2NF)

在满足 1NF 的情况下,要求表中的所有列都必须依赖主键,而不能有任何一列与主键没有关系。

3. 第三范式(3NF)

在满足 2NF 的情况下,要求表中的每一列都要与主键直接相关,不可以间接相关,也就是表中的每一列都只能依赖于主键。

七、DML

1. insert 插入数据

INSERT INTO 表名(字段1,字段2) VALUES(值1,值2),(值3,值4);

2. update 修改数据

UPDATE 表名 SET 字段1=值1,字段2=值2 WHERE 条件;

3. delete 删除数据

DELETE FROM 表名 WHERE 条件;

4. select 查询

固定的语法顺序是:

SELECT 字段列表 FROM 表名 WHERE 行过滤条件 GROUP BY 分组字段 HAVING 分组后的过滤 ORDER BY 排序字段 [ASC/DESC]

例子:

SELECT class_id 班级编号, COUNT(*) 人数 FROM student WHERE age > 18 GROUP BY class_id HAVING COUNT(*) > 2 ORDER BY 人数 DESC LIMIT 0,2;

八、数据库事务

事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

1. ACID 性质(事务四大特性)

  • 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么全部不执行。
  • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态,一致状态的含义是数据库中的数据应该满足完整性的约束。
  • 隔离性(Isolation):多个事务并发运行时,一个事务的执行不应影响其他事务的执行。
  • 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中,不能回滚。

2. 事务的并发问题

  • 脏读:事务 A 读取了事务 B 更新的数据,然后 B 回滚操作,那么 A 读取到的数据就是脏数据。
  • 不可重复读:事务 A 多次读取同一数据,事务 B 在事务 A 多次读取的过程中,对数据做了更新并提交,导致事务 A 多次读取同一数据时,结果不一致。
  • 幻读:系统管理员 A 将数据库中所有学生的成绩从具体分数改为 ABCDE 等级,但是系统管理员 B 就在这个时候插入了一条具体分数的记录,当系统管理员 A 改完检查发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

3. 事务隔离级别

隔离级别用来定义多个并发事务之间的可见性规则,级别越高,数据一致性越强,但并发性能越低。SQL 标准定义了四种隔离级别,它们分别能解决脏读、不可重复读、幻读中的一部分问题。

隔离级别脏读不可重复读幻读性能说明
READ UNCOMMITTED读未提交没有没有没有最高能读别人未提交数据,几乎不用
READ COMMITTED读已提交解决没有没有较高Oracle 默认
REPEATABLE READ可重复读解决解决理论有中MySQL 默认,InnoDB 靠间隙锁解决幻读
SERIALIZABLE串行化解决解决解决最低事务串行,完全不并发

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询