数据库02

本文介绍了数据库事务的ACID特性,包括原子性、一致性、隔离性和持久性,并详细讲解了四种不同的事务隔离级别。此外,还探讨了数据库字段约束,如默认约束、检查约束、外键约束、主键约束、唯一约束和非空约束,强调了这些约束在确保数据完整性和一致性方面的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、事务

—概述

数据库事务:单个逻辑单元执行的一系列操作,要么完全地执行,要么完全地不执行。

事务四个特性:ACID

原子性(不可分割性)Atomicity:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某一个环节,在执行过程中如果出现了错误,会被回滚(rollback)到事务开始前的状态。

一致性Consistency:在事务开始之前和事务结束后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度,串联性以及后续数据库可以自发性地完成预定的工作。

隔离性(独立性)Isolation:数据库允许多个事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据不一致。

持久性Durability:事务处理结束后,对数据的修改是永久的,即使系统故障也不会丢失。

隔离级别

  • 读未提交( read uncommitted):安全性最差,可能发生并发数据问题,性能最好。
  • 读提交( read committed):Oracle默认隔离级别
  • 可重复读 (repeatable read):MySQL默认的隔离级别,安全性比较好,性能一般。
  • 串行化 (Serializable):表级锁,读写都加锁,效率低下,安全性高,不能并发。

读未提交 read uncommitted

窗口1:

>  mysql>start transaction;  #开启事务
>  mysql>insert into tb_door values(3,"四哈",12345678964,1300);    
>  mysql>commit;  #提交事务
>  mysql>rollback;表示回滚,回滚到事务的起点,之前所有操作被撤消.

窗口2:

mysql>select * from tb_door;

在这里插入图片描述

二、字段约束

–1.默认约束

#默认约束,给字段设置默认值
CREATE TABLE test01(
 id INT PRIMARY KEY AUTO_INCREMENT,
 sex CHAR(3) DEFAULT '男' #默认约束
)

–2.检查约束

#2.检查约束:检查字段的值是否合理性
CREATE TABLE test02(
 id INT PRIMARY KEY AUTO_INCREMENT,
 age INT,
 CHECK(age>0) #检查约束,了解即可
)
INSERT INTO test02 VALUES(4,10);
INSERT INTO test02 VALUES(5,-10);

–3.外键约束

#3外键约束,为了节省内存,使用对方表的主键来描述两张表的关系
CREATE TABLE test03(
 id INT PRIMARY KEY AUTO_INCREMENT,
 NAME vachar(10), 
 age INT,
 phone VARCHAR(11)
)
CREATE TABLE test0300(
 user_id INT PRIMARY KEY,#不能自增!!!
 address VARCHAR(100),
#1.创建外键FK,描述和关联表的关系
#foreign key(本表的主键) references 对方表名(对方主键)
 FOREIGN KEY(user_id) REFERENCES test03(id)
)

情况1:主表的数据记录不能删除,因为关联表的数据还在使用,只有将关联表的对应数据删除,主表才可以删除。
在这里插入图片描述
情况2:关联表的主键不能超过主表的主键,主键值必须与主表主键值一致。
在这里插入图片描述

–4.主键约束

CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30)
);

–5.唯一约束 UNI

CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) UNIQUE NOT NULL,
PHONE VARCHAR(30)
);

–6.非空约束 NOT NULL

CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30) UNIQUE NOT NULL,
PHONE VARCHAR(30)
);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值