java大数据学习---第二阶段---第三天---事务. 字段约束(检查 默认 外键)

一.事务 transaction 面试必问

1.概念

英文叫transaction,主要作用是用来保证多条SQL,要么全成功要么全失败.

2. 四个特性ACID

1.原子性 atomicity:    同一个事物里的多条SQL语句,是一个原子 密不可分,要么全成功  要么全失败--------------又叫 不可分割性
2.一致性 consistency:  保证多台服务器里的数据是一致的(分布式系统)
3.隔离性 isolation:    数据库为了提高操作的效率允许高并发的访问,并采用了隔离性保证了数据的安全性(采用锁机制)-------------又叫 独立性
4.持久性 durability:   是指,我们对数据库的操作(增删改)是持久生效的  

3. 隔离级别

1.读未提交(Read uncommitted)     安全性最差,性能最好,,可能发生并发数据问题,
2.读提交(read committed)         安全性有所提升,效率低一些,Oracle数据库默认的隔离级别
3.可重复读(repeatable read)      安全性有所提升,但是效率又会低一些.MySQL数据库的默认隔离级别
4.串行化(Serializable)          表级锁,读写都加锁,串行化 效率低下,安全性高,不能并发,性能最低     

4. 事务管理的方式

方式1, 使用MySQL数据库innodb为我们提供的,自动事务管理. 默认会为每条SQL提供事务.
方式2, 手动管理事务,必须有两个过程: 开启事务 … 结束事务(commit / rollback)

测试3, 采用 方式2 来模拟事务的管理过程:
窗口1:
mysql> start transaction;  #开启事务   //开启事物  也可以使用 begin
mysql> insert into dept values(10,'php','bj');  #执行SQL
mysql> commit;  #提交事务
窗口2:
mysql> use cgb211101;
mysql> select * from dept; #查询(1号窗口提交后,2号窗口才能查到)

二.字段约束----接第一天

1. 检查约束 check

1.概念:  哪个字段添加了检查约束,哪个字段的值,就要通过检查才能保存成功,用的更少
  CREATE TABLE test02(
 id INT PRIMARY KEY AUTO_INCREMENT,
 age INT,
 CHECK(age>0) #检查约束,了解即可!
)
INSERT INTO test02 VALUES(NULL,10) #ok的
INSERT INTO test02 VALUES(NULL,-10) #会报错,没有通过检查约束 
    
了解即可,有些版本不会生效    

2. 默认约束 default

1.概念: 那个字段,添加了默认约束,哪个字段的值就有了默认值,用的很少
CREATE TABLE test01(
 id INT PRIMARY KEY AUTO_INCREMENT,
 sex CHAR(3) DEFAULT '男'#默认约束
)
虽然sex设置了默认值,但是只是手动录入时有效,发起insert语句时还是要手动写具体值的
INSERT INTO test01 VALUES(NULL,'男')
   

3. 外键约束 foreign key

1.概念: 为了省内存,使用两张表里的主键,描述两张表的关系,也可以不只是两张表
    
2.语法结构:
foreign key(子表主键) references 主表表名(对方主键)
    
3.例子:    
#情况1:子表里的主键的值 必须 取自于 主表  输入或修改数据主表约束子表,要先在主表添加或修改数据
#情况2:主表里的记录想要删除时,必须保证子表没有引用才行 删除数据子表约束主表,要先删除子表数据
CREATE TABLE tb_user(
 id INT PRIMARY KEY AUTO_INCREMENT,
 NAME VARCHAR(10),
 age INT,
 phone VARCHAR(11)
)
CREATE TABLE tb_user_address(
 user_id INT PRIMARY KEY ,#不能自增!!!
 address VARCHAR(100),
 1.创建外键FK,描述和1号表的关系
 FOREIGN KEY(user_id) REFERENCES tb_user(id)
)
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值