实训笔记6.26

6.26

一、座右铭

我的故事你说,我的文字我落,我值几两你定,我去何方我挑。

二、知识回顾

2.1 Java多线程

2.1.1 一些概念知识

程序、进程、线程

单核CPU和多核CPU

并行和并发

2.1.2 多线程的创建方式

  1. 继承Thread类,重写run方法
  2. 实现Runnable接口,重写run方法
  3. 实现Callable接口,重写call方法
  4. 使用线程池
    1. 缓存线程池
    2. 单例线程池
    3. 固定容量的线程池
    4. 调度线程池:schedule(Runnable|Callable,long time,Timeunit)

execute(Runnable) submit(Callable)

多线程的运行都需要借助Thread类的start方法来开启一个多线程

两个问题

  1. 继承和实现创建的多线程有什么区别

1、继承只能单继承、实现可以多实现

2、继承体系下多线程数据共享操作比较麻烦 实现体系下多线程数据共享操作比较简单

  1. Runnable和Callable两个的区别

1、run方法没有返回值、call方法是有返回值的

2、run方法不能抛出异常,有异常只能捕获 call方法可以抛出异常

2.1.3 多线程的生命周期

新建、就绪、运行、阻塞、死亡

2.1.4 多线程的数据同步–多线程数据共享问题

多线程中哪些数据是可以共享的?堆区或者元数据区

多线程操作共享数据的时候,因为抢占时间片机制,导致数据出现问题

三种解决方案

  1. 同步代码块
  2. 同步方法

定义同步监视器–锁的钥匙

Java中所有类的对象都可以当同步监视器

  1. 显式的上锁和解锁

2.1.5 多线程的线程通信

多个线程之间相互通信交流,依次占用CPU进行运行

wait、notify、notifyAll

多线程之间如果要进行通信,必须保证多线程之间的同步监视器也是同一个

sleep\wait方法

  1. sleep方法是Thread类,wait方法是Object类
  2. sleep方法会带着锁去阻塞,wait方法会释放了锁再进入阻塞状态

三、数据库

3.1 分类

3.1.1 关系型数据库管理系统:RDBMS

  1. 存储结构化数据
  2. MySQL
  3. Oracle
  4. SQL Server

3.1.2 非关系型数据库管理系统:NoSQL

  1. 存储非结构化数据
  2. Redis
  3. mongodb
  4. hbase

3.2 连接MySQL服务

mysql -uusername -ppassword -Pport

使用到一款工具–数据库可视化工具,给数据库提供了一个可视化操作的界面(navicat、sqlyog、dbeaver…)

3.3 SQL语言

3.3.1 SQL语言概念

SQL语言全称是Structured query language,结构化查询语言,是RDBMS提供的用来管理数据库、数据表、表数据的一个工具

3.3.2 DDL语言

DDL语言:数据定义语言-库和表的管理语言

  1. 负责创建、删除、修改、查询数据库和数据表

  2. 库的管理操作

    1. 创建数据库:

      create database if not exists database_name charset "编码集";

    2. 修改数据库:改数据库的编码集

      alter database database_name character set "编码集";

    3. 查询MySQL中数据库的相关信息

      show databases;

      show create database database_name;

    4. 删除数据库drop database if exists database_name;

      数据库一旦删除,数据库中表全部删除了

  3. 表的管理操作

    1. 创建数据表create table if not exists table_name( 字段名 字段类型 字段约束 comment “注释”, 字段名 字段类型 字段约束 comment “注释”, … )engine=“存储引擎”,charset=“编码集”;show engines;

    2. mysql常见的字段类型

      类型
      整数型 tinyint
      smallint
      mediumint
      int/integer
      bigint
      小数型 float
      double(num,num)
      字符串类型 char(num)
      varchar(num)
      text
      blob/tinyblob
      时间日期类型 datetime
      timestrap
      两种特殊的类型 enum
      set
    3. mysql字段约束:限制数据的格式

        1. 格式名 说明
          主键约束 外键有个特点:外键两张表的关联关系主表,
          从表,主表的主键是从表中外键
          如果主表的数据不存在,那么从表无法添加数据
          如果从表的数据不删除,那么主表的数据也不能删除
          foreign key
          外键约束 primary key
          唯一约束 unique 限制数据再当前列只能出现一次
          非空约束 not null 限制数据在添加时,必须添加数据
          默认约束 default 值 如果在添加数据时,没有添加改字段值,会给我赋予一个默认值
          检查约束
          (mysql8版本以后才生效)
          check(条件) 限制数据的填充规范

      主键约束:表级约束来添加

      外键约束、唯一约束、非空约束、默认约束、检查约束:列级约束来添加

    4. 数据库的设计三范式

      1. 创建数据表的时候,表的设计规则–业界默认规则
      2. 第一范式1NF:原子性,设计表的时候,表中的字段满足不可在被分割的原则
      3. 第二范式2NF:唯一性,表中的每一行数据在数据表中是唯一的,设置主键,给每一行数据必须得有一个主键来维护它的唯一性,每一行数据的非主键字段必须依赖于主键字段,主键字段一般是和业务字段无关的字段,主键在表中唯一的。 因为主键是和业务字段无关的,因此主键的值没有特殊要求的,一般唯一即可,所以主键一般都是整数类型的自增字段(标识列)
      4. 第三范式3NF:消除冗余,表中非主键字段必须直接依赖于主键字段,设置外键

3.3.3 DML语言

DML语言:数据操纵语言–表数据的增加、删除、修改操作

增加表数据

1、insert into table_name(表字段列表) values(值列表),(值列表)

3.3.4 DQL语言

DQL语言:数据查询语言–查询表数据

3.3.5 DCL–TCL语言

DCL–TCL语言:数据控制语言–负责数据库的事务操作

今日数据库代码示例

-- 1、创建数据库
create database if not exists school charset 'utf8';
-- 2、修改数据库的编码集
alter database school character set "gbk";
-- 3、查看数据库的创建细节
show create database school;
-- 4、删除数据库
drop database if exists school;
-- 5、查询MySQL支持的所有的存储引擎
show engines;

USE school;
-- 6、创建一个院系表:院系id,院系名字,院系领导,院系的地址,院系简介,院系的专业个数
create table if not exists department(
    department_id  int primary key auto_increment comment "院系id 院系的主键",
		department_name  varchar(255) not null unique comment "院系名",
		department_leader varchar(255) default "",
		department_address varchar(255),
		department_intro   text,
		major_number   int not null check(major_number >0)
)engine="innodb",charset="UTF8";
-- 7、学生表:学生id,学生姓名 学生年龄 学生学号 学生手机号 学生的院系id
create table if not exists student(
    student_id  int primary key auto_increment comment "学生id 学生的主键",
		student_name  varchar(255) not null comment "学生名",
		student_age    int   not null check(student_age > 15 and student_age < 150),
		student_sno   varchar(20) not null unique,
		student_phone  varchar(20) unique,
		student_department_id int,
		constraint fk1 FOREIGN key(student_department_id) references department(department_id)
)engine="innodb",charset="UTF8";

-- 院系表增加数据
insert into department(department_name,department_leader,department_address,department_intro,major_number) values("数学系","数老师","学院路3号","数学系",3),("体育学院","体老师","学院路3号","体育系",3);

insert into student values(2,"xjq",20,"s002","15766666667",1);

create table demo(
   sex enum('男','女'),
	 hobby set('唱歌','jump','rap'),
	 time datetime
)

insert into demo values('男','jump,rap','2023-10-01')

猜你喜欢

转载自blog.csdn.net/cai_4/article/details/131404013