java第二十五课

Mysql 数据库
设计: 表设计成功
alter table 改表的主键,改约束关系
表:关系表,改一个表,另外一个表
表---->java 代码
增删改查(项目中需要的操作)
项目:
Create database
Create table(从测试环境到生产环境,导入)
Database 数据库,或者 table 表,在测试环境测试成功,在生产环境去使用。
数据库(设计是基本)
查询语句全称
Select 字段名称 from 表 where 条件 group by 被字段分组 order by 排序 limit 限制记录条件
限定条件的查询 where (and or)
分组: group by
排序 order by
分页: limit

操作:
(1) 打开数据库
Use 数据库
(2)显示数据库中所有的表
Show tables;
(3)条件: where
语言上:同一字段用”和”,还是或 or
(4)分组后只能使用统计函数(聚合,平均数 avg, 和 sum, count个数,max 最大值,min 最小值)
分组后分组字段是可以显示的
统计重名的人有多少个

Group by 条件需要加 having,Groupby 分组后加条件
select username,count(*) mycount from user group by
username having mycount>1;
注意:
Count(*)后面的名称是别名,意义在于让 count 函数只计算一次
后面的条件可以引用 mycount
别名取 java 的关键字
订单列表: list --Java List(尽量不要用 java 的关键字做别名变量)
尽量少用 a,b,c
在长语句中,可读性差
分组:把相同数据放在一起,低版本的 mysql 只能结合放在一起的标准字段和聚合函数进行显示。
Order by 数值排序
项目 select 查询功能
银行转帐
Update 张三的帐户 -50
Update 李四的帐户 +50
断网,没电,异常
项目中常常是多个 sql 语句的结合,mysql 是一句一执行。
凡是数据库,如何保证数据的安全,概念:事务
事务:操作不进行表操作,只是把这个表放在内存中,对内存进行操作,如果确认操作,提交事务,自动把内存数据同步更新到表中,如果断电,断网,没电,异常,事务有作用,遇到异常可以回滚,把之前内存的操作回滚恢复,表状态回
复到事务开始前。
银行: 借方(存) 贷方(取)
1000 9000
银行帐每天备份,把今天帐重新做好(回滚)
加入事务,就可以做事务回滚
Mysql 中有很多变量 autocommit 自动提交,设置为 false,相当于开启事务,不操作表
并发线程一定是两个事务之间.
增(格式,不做批增)删(批删)改查
并发的事
增发生并发(两个线程都有事务,只有提交出现问题)
开启事务,提交事务 commit,回滚事务 rollback,这里的回滚和提交有助于保护数据安全,一旦计算机异常,可以回滚保护数据安全。
线程: 就绪 运行 阻塞 死亡
尽量避免线程阻塞
重要问题:mysql 表(行锁,表锁)
Insert into 是悲观锁,只锁当前的 id 行,默认行锁.
解决 insert into 悲观锁,也就解决了并发。
Insert into 插入数据时,表中主键一定要自增,插入时不要带id。表设计定义 id 成主键自增,primary key auto_increment
Insert into 做到内存和表都是行锁,如果出现出锁,并发出现某个用户使用程序死机。
Insert into 表名(字段)values()
Values 中一定没有 id 的内容,行锁就阻塞.
删除,两个线程两个事务同时执行删除.
Delete from user where id=1;
Delete 是一个行锁。另外一个线程就会锁。
数据库的删除是假删除,第一不能解决 id 不连续,第二不能解决线程阻塞。数据库删除就变成更新的问题。
数据只要删除,任何一个线程删除,但是,某些线程阻塞,改变不了删除的条件。
更新
Update
两个线程同时更新同一条记录
Update 默认行锁
另外一个线程就阻塞
打破 update 行锁,(默认悲观锁)
思想:乐观锁
程序执行没有问题,不用锁,这条语句可以执行.update 底层自动带行锁.最精典的乐观锁 CAS 机制
内存中值:数据新值, 修改数据赋予一个新值,数据库的值旧值, 发出修改操作,把内存和数据库的值做对比,一致,允许修改,不一致就不允许修改.
在数据库中加上一个字段 version(版本)
默认 version=1, version 做计算,整型,每次修改操作完成后让版本加 1,事务先把数据在内存中,提交时再同步到表里.
现在对表加上一个字段 version
修改表,加上一个字段 add column
alter table user add column version int default 1;
每次更新数据时,查找带上 version 的版本,同时 update 修改把数据库的 version 版本再增加 1
在事务的 sql 语句中,修改数据加上一个字段的比较 version,
只有 version 版本和修改条件一致允许修改,修改时除了修改给定的值,还要把 version 版本提高一个版本.
update user set username="赵六",version=version+1 where
id=2 and version=1;wk
保证了数据的安全.
增删改操作---融合在项目中审核机制
论坛-审核, 关键操作审核机制
如果审核机制,当前数据表审核字段, 加上审核,有一个审核期限,审核不通过,不允许注册.
alter table user add column mycheck int default 1;
用户名:
增加
Is_delete 删除的判断标志
Version 乐观锁解决 update 更新的问题
addCheck 对用户注册的用户名进行审核.
还有几个点
Insert into ,update,delete 默认都是行锁
Select 默认没有行锁,表锁.
Select 加行锁
如果两个事务加上目的性 for update,就会出现线程阻塞.
Insert into 解决并发锁的问题
限定 id, id 做主键,同时 auto_increment
删除实际是假性删除
Update 只要 commit,基本造成阻塞,用乐观锁,version
项目过程中:表述,错误码
并行过程中的增删改查
批量
批量增加:一次性增加若干数据,2 条数据或者 3 条数据
insert into user(username,sex,position,age,password,is_delete)
values("赵五","男","杭州",20,"123456",0), ("赵五","男","杭州
",20,"123456",0),("赵五","男","杭州",20,"123456",0);
批量删除
Delete from user where id=1 or id=2 or id=3
缩短,在 where 后面用一个 in,把选择的数据放在集合中.
Delete from user where id in (1,2,3);
批量更新(条件更新) where 选出的数据是一堆。
Update user set age=age+1 where age>1;

java第二十五课. · b171385 · WL—code/WL仓库 - Gitee.com

你可能感兴趣的:(数据库)