MySQL_事务
MySQL多表查询与事务的操作
基本介绍
概念:一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
操作:
事务四大特征
原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。
持久性:当事务提交或回滚后,数据库会持久化的保存数据。
隔离性:多个事务之间。相互独立。
一致性:事务操作前后,数据总量不变
事务隔离级别
概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题
存在问题
脏读:一个事务,读取到另一个事务中没有提交的数据不可重复读(虚读):在同一个事务中,两次读取到的数据不一样。幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。
隔离级别
read uncommitted:读未提交(产生的问题:脏读、不可重复读、幻读)
A事务还没执行提交,B事务已经可以查到数据了
read committed:读已提交 (Oracle)(产生的问题:不可重复读、幻读)
A事务执行提交,B事务在同一次查询中查到已被修改的数 ...
MySQL_基础
【黑马程序员-Java语言高级部分10】MySQL入门学习
基础概念
数据库的英文单词: DataBase(简称DB)
数据库: 用于存储和管理数据的仓库
数据库的特点:
持久化存储数据的。其实数据库就是一个文件系统
方便存储和管理数据
使用了统一的方式操作数据库 — SQL
常见的数据库软件
数据库软件
安装
卸载
去mysql的安装目录找到my.ini文件复制 datadir=”C:/ProgramData/MySQL/MySQL Server 5.5/Data/“
卸载MySQL
删除C:/ProgramData目录下的MySQL文件夹。
配置
MySQL服务启动
手动
cmd—> services.msc 打开服务的窗口
使用管理员打开cmd
net start mysql : 启动mysql的服务
net stop mysql:关闭mysql服务
MySQL登录
mysql -uroot -p密码
mysql -hip -uroot -p连接目标的密码
mysql —host=ip —user=root —pas ...
MySQL_多表查询
MySQL多表查询与事务的操作
sql准备123456789101112131415161718192021# 创建部门表CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20));INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部');# 创建员工表CREATE TABLE emp ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10), gender CHAR(1), -- 性别 salary DOUBLE, -- 工资 join_date DATE, -- 入职日期 dept_id INT, FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键,关联部门表(部门表的主键));INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VA ...
MySQL_数据库设计
表间关系
MySQL约束与设计
关系分类
一对一(了解):
如:人和身份证
分析:一个人只有一个身份证,一个身份证只能对应一个人
实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键
一对多(多对一):
如:部门和员工
分析:一个部门有多个员工,一个员工只能对应一个部门
实现方式:在多的一方建立外键,指向一的一方的主键
多对多:
如:学生和课程
分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择
实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
案例
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758>-- 创建旅游线路分类表 tab_category>-- cid 旅游线路分类主键,自动增长>-- cname 旅游线路分类名称非空,唯一,字符串 100>CREA ...
MySQL_约束
MySQL约束与设计
约束
概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:
主键约束:primary key
非空约束:not null
唯一约束:unique
外键约束:foreign key
非空约束:not null,值不能为null
12345678910-- 创建表时添加约束CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空);-- 创建表完后,添加非空约束ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;-- 删除name的非空约束ALTER TABLE stu MODIFY NAME VARCHAR(20);
唯一约束:unique
值不能重复
123456789101112>-- 创建表时,添加唯一约束>CREATE TABLE stu(id INT,phone_number VARCHAR(20) UNIQUE -- 添加了唯一约束>);>-- 注意mysql中 ...
多线程_JUC原子类
JUC原子类根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。
基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;引用类型: AtomicReference, AtomicStampedRerence, AtomicMarkableReference ;对象的属性修改类型: AtomicIntegerFieldUpdater, AtomicLongFieldUpdater, AtomicReferenceFieldUpdater 。
这些类存在的目的是对相应的数据进行原子操作。所谓原子操作,是指操作过程不会被中断,保证数据操作是以原子方式进行的。
AtomicLong介绍和函数列表AtomicLong是作用是对长整形进行原子操作。在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持 ...
多线程_锁
锁概念锁的分类
如何理解互斥锁、条件锁、读写锁以及自旋锁?
5000字 | 24张图带你彻底理解21种并发锁
互斥锁和自旋锁互斥锁和自旋锁是最底层的两种锁,其他的很多锁都是基于他们的实现。
当线程A获取到锁后,线程B再去获取锁,有两种处理方式:
线程B循环的去尝试获取锁,直到获取成功为止即自旋锁
线程B放弃获取锁,在锁空闲时,等待被唤醒,即互斥锁
互斥锁
互斥锁会释放当前线程的cpu,导致加锁的代码阻塞,直到线程再次被唤醒。互斥锁加锁失败时,会从用户态陷入到内核态,让内核帮我们切换线程,存在一定的性能开销
1while (抢锁(lock) == 没抢到) {睡眠直到锁状态改变再唤醒(lock)}
当线程加锁失败,内核会把线程的状态由“运行”设置为“睡眠”,让出cpu
当锁空闲时,内核唤醒线程,状态设置为“就绪”,获取cpu执行
自旋锁
自旋锁会自用户态由应用程序完成,不涉及用户态到内核态的转化,没有线程上下文切换,性能相对较好,自旋锁加锁过程:
1while (抢锁(lock) == 没抢到) {}
查看锁的状态
锁空闲, ...
枚举类Enum
枚举类Enum枚举类有哪些好处
枚举类可以方便地表示星期,月份等常数类型,如果你不用枚举类,那么你只能用数字或者字符串。如果你使用数字,用1-7来表示星期数,但一个数字在程序中不仅可以表示星期数,可能还有其他许多含义,这样你在写程序时就必须时刻记住这些数字的含义,这降低了程序的可读性,也导致容易出错。而当你使用字符串时,虽然没有明显的缺点,但在内存中字符串所占内存要比数字多,这就降低了程序的效率。
枚举类正好弥补了这两方面的缺点,你可以在代码中使用枚举类,但在内存中存放时使用的是数字,既提高了可读性,又提高了程序效率。更重要的是,Python中的枚举类型是不可变类型,又可以进行迭代,这就意味着你可以随时使用枚举类型而不用担心改变了枚举类型的值。
两种枚举类定义方式
程序有两种方式来定义枚举类:
直接使用 Enum 列出多个枚举值来创建枚举类。
通过继承 Enum 基类来派生枚举类。
案例简单枚举类定义12345678# 由于枚举类的“new”方法,将会保证内存中只会存在一个枚举类的实例# -*- coding: utf-8 -*from enum import Enum# 这 ...