华清远见-重庆中心-数据库阶段技术总结

查看信息

  • 查看所有数据库:show database;
  • 查看所有表:show tables;
  • 查看表结构:desc 表名;
  • 查看建表语言:show create table 表名;

数据库操作

  • 创建数据库:create database 数据库名
  • 使用数据库:use 数据库名;
  • 删除数据库:drop database 数据库名

数据表操作

数据类型

整型
tinyint短整型对应java中的byte和short
int整型对应java中的int
bigint长整型对应java中的long
浮点型
float单精度浮点型对应java中的float
double双精度浮点型对应java中的double
decimal(宽度,精度)指定保留的小数位数和整体宽度如decimal(4,2) 3.1415926–>3.14
字符串
char(长度)定长字符串char(10)表示占10个字符,就算保存了3个字符,也占10个字符,对应java中的String
varchar(长度)可变字符串varchar(10)表示最多占10个字符,保存了3个字符,旧占3个字符,对应java中的String
text文本
日期
date日期yyyy-MM-dd
time时间HH:mm:ss
datetime日期时间yyyy-MM-dd HH:mm:ss
timestamp(14或8)毫秒保存日期的毫秒数.14表示yyyyMMddHHmmss,8表示yyyyMMdd

数据完整性

数据完整性值数据精准可靠

完整性约束关键字作用
非空约束not null保证字段值不为空
主键约束primary key保证字段值不重复们勇于唯一区分每条记录
唯一约束unique保证字段值不重复
默认值default保证字段没有填充数据时,自动使用默认填充
外键约束foreign key references保证表中的记录只能来自于主表
  • 创建数据表
create table 表名(
	字段名 数据类型 [字段特征],
    字段名 数据类型 [字段特征],
    ...
    字段名 数据类型 [字段特征]
)
  • 修改数据表

  • 表重命名:alter table 表名 rename to 新表名

  • 添加字段:alter table 表名 add columm 字段名 数据类型 字段特征

  • 修改字段:alter table 表名 change 旧字段 数据类型 字段特种证

  • 删除字段:alter table 表名 drop 字段名

  • 删除数据表

    删除时如果有外键约束、先删除从表、再删除主表

  • 添加约束

    • 添加主键约束:alter table 表名 add primary key(字段名
    • 添加唯一约束:alter table 表名 add unique(字段名
    • 添加默认约束:alter table 表名 alter 字段名 set default ‘值’
    • 添加外键约束:alter table 从表 add foreign key(字段名) referneces 主表(主键字段)
  • 删除约束:alter table 表名 drop [primary key|index/foreign key 约束名]

数据增加

  • 增加
    • insert into 表名 values(值1,值2…),保证表中字段顺序添加数据,不能缺少任何一个字段
      • 自增字段用null
      • 默认字段用default
      • 允许为空字段用null
    • insert into 表名(字段1,字段2…) values(值1,值2…);保证必须写上非空字段,值的顺序和字段顺序保持一致
  • 修改
    • update 表名 set 字段=值,字段=值[where 条件]
  • 删除
    • delete from 表名 [where 条件];会保留自增列的值
    • truncate table 表名;会终止自增列的值
  • 查询
    • selecr [字段|*] from 表名 [where 条件] [order by 字段][having 条件]
    • limit N:查询前N条记录
    • limit N,M:从所有为N的开始查询M条记录
    • distinct:去重复
    • order by 字段名:根据字段分组
    • having:统计函数条件

常用函数

  • 统计函数
    • sum():求和
    • avg():平均
    • count():统计数量
    • max();最大值
    • min():最小值
  • 字符串函数
    • concat(‘值’,‘值’,‘字段’):拼接值或字段
    • trim():去除首位空格
    • left(legth)/rigth(length):从左/右开始截取指定长度字段串
  • 数学函数
    • round()/ceil()/floor():取整
    • abs():绝对值
  • 时间函数
    • now()/curdate()curtime():得到当前日期
    • year()/month()/day():得到日期中的指定部分
    • datediff()/timediff()/timesampdiff():计算时间间隔
  • 补充
    • if(条件,表达式1,表达式2):条件为真,结果为表达式1,条件为假,结果为表达式2
    • group_concat():凭借分组后的其他字段

多表查询

  • 交叉连接/笛卡尔积
select * from1,表2...;
select * from1 cross/inner join2;
  • 内连接
select * from1,表2 where1.字段=2.字段;
select * from1 cross /inner join2 on1.字段=2.字段;
  • 外连接
    • 左外连接
    select * from1 left join2 on1.字段=2.字段; -- 保证表1中的数据完整
    
    
    • 右外连接
    select * from1 right join2 on1.字段=2.字段;--保证表2中的数据完整 
    

数据库设计

实体关系模型

ER图

  • 矩形:实体
  • 椭圆形:实体的属性
  • 菱形:实体之间的关系

实体关系分类

  • 一对一:一个国家有一个领导人
    • 1.根据连个实体创建两张表,都加上主键
    • 2.在其中的一张表中添加一个字段,保存另一张表的主键并设置唯一
  • 一对多/多对一:一个班级有多个学生,一个学生不能有多个班级
    • 1.根据两个实体创建的两张表,都加上主键
    • 2.在从表中添加外键字段管理主表中的主键字段
  • 多对多
    • 1.根据两个实体创建两张表,都加上主键
    • 2.创建第三张‘关键表’,在该表中添加连个字段分别保存两个实体表中的主键

范式

第一范式1NF

字段不可再分

第二范式2Nf

在满足1NF的基础上,消除部分依赖。

对于联合主键而言,所有主键属性字段必须完全依赖主属性

第三范式3NF

在满足2NF的基础上,消除传递依赖


JDBC

java提供了一套规范用于连接各种数据库,不同的数据库厂商根据该贵干设计连接驱动

java.sql包下一组接口用于操作数据库

  • Connection接口 用于获取连接对象
  • preparedStatement接口 用于发送sql语句,处理sql语句
  • ResultSet接口 用于查询后的结果集

加载mysql驱动

Class.forname("com.mysql.cj.jdbc.Driver")

连接MySQL数据库字符串

String url="jdc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai"

查询的步骤

  1. 获取连接对象Connection
  2. 构造sql语句String
  3. 预处理sql语句pst=conn.preparestatement
  4. 给sql语句中的?赋值pst.setXXX(?顺序,值)
  5. 调用executeQuery()得到Result结果集
  6. 遍历结果集rs.next()后rs.getXXX(字段顺序/字段名)

增删改的步骤

public void addHero(Hero hero) throws SQLException, ClassNotFoundException {
    //1.加载驱动
    Class.forName("com.mysql.cj.jdbc.Driver");
    //2.获取连接对象
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/gamedb?serverTimezone=Asia/Shanghai", "root", "root");
    //3.构造sql,参数使用?占位
    String sql = "insert into hero values(null,?,?,?,?,curdate())";
    //4.预处理sql
    pst = conn.prepareStatement(sql);
    //给?赋值
    pst.setString(1,hero.getName());
    pst.setString(2,hero.getPosition());
    pst.setString(3,hero.getSex());
    pst.setInt(4,hero.getPrice());
    //5.调用更新的方法
    int i = pst.executeUpdate();
    //6.判断执行结果
    if(i>0){
        System.out.println("添加成功");
    }else{
        System.out.println("添加失败");
    }
    //7.释放资源
    pst.close();
    conn.close();
}

事务transaction

一组sql执行单元,要么全部执行,要么全部不执行

事务的特性ACID

原子性atomicity

事务是最小的执行单元

一致性Consistency

各个事务之间互不干涉

隔离性Isolation

各个事务之间互不干涉

持久性durability

事务一段提交,改变是永久的


事务并发出现的问题

脏读

事务A读取到了事务B未提交的数据

不可重复读

事务A中前后量词读取到的数据不一致

事务A在读取的过程汇总,事务B对数据进行修改

幻读

事务A在读取过程中,事务B向其中添加数据,导致事务A读取到了事务B中添加的“幻影”数据

隔离级别能否出现脏读能否出现不可重复读能否出现幻读
Read Uncommittedd未提交读
Read Committed已提交读不会
Repeatable Read可重复读(MySQL默认)不会不会
serializable序列化不会不会不会

事务相关指令

  • 查看事务自动提交状态

    select @@autocommit

  • 修改事务自动提交状态

    set @@autocommit=0/1 0 表示不开启动,1表示开启

  • 手动开启事务

    start transaction

  • 提交

    commit

  • 回滚

    rollback

  • 查询当前事务隔离级别

    select @@transaction_isolation

  • 设置事务隔离界别

    set [session|global] transaction islation level[read Uncommitted | read commitedd | Repeatable Read | Serializable]

存储引擎

  • MySQL5.5版本之前,默认使用MyIsam存储引擎,不支持事务
  • MySQL5.5版本之后,默认使用InnoDB存储引擎,支持事务
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 根据所提供的清远-c0rtexas9资料路径,在实验中涉及到了Linux系统标准IO的应用实验。Linux系统标准IO是指Linux操作系统提供的一套标准化的IO库,可以用于操作文件、输入输出等。以下是对该实验的简单描述: 这个实验主要是关于Linux系统标准IO的应用实验。在该实验中,我们可以找到程序的源代码,该源代码是用Linux应用程序的方式编写的。通过这个实验,我们可以了解和学习Linux系统标准IO的基本操作和使用方法。 Linux系统标准IO是一套非常强大和灵活的IO库,提供了一系列的函数和方法来操作文件和进行输入输出。在实验源码中,我们可以看到一些常的标准IO函数,比如fopen、fclose、fprintf和fscanf等。 通过这些函数,我们可以打开和关闭文件,从文件读取数据或向文件写入数据。实验源码中包含了一些常的操作,比如读取文件、写入文件、复制文件和查找文件等。通过实验,我们可以了解到如何使用这些函数来完成不同的操作。 此外,在实验源码中可能还会涉及到一些其他的Linux系统标准IO相关的知识点,比如文件指针、文件描述符和文件流等。这些知识点对于理解和使用Linux系统标准IO函数非常重要。 通过实验中提供的源代码,我们可以进行相应的实验操作,从而更好地理解和学习Linux系统标准IO的使用。同时,我们也可以通过对实验源码的分析和调试,更深入地了解Linux系统标准IO的内部工作原理。 总之,通过这个实验,我们可以掌握Linux系统标准IO的基本操作和使用方法,从而提高我们在Linux系统中进行文件操作和输入输出的能力。 ### 回答2: 清远(英文名称为Far Infrared Technologies International Limited)是一家专注于红外光学技术研发及应用的企业。该公司的产品主要应用于安防监控、无人机、机器人、智能家居等领域。 关于"06. linux系统标准io实验"的实验资料包括了程序源码。在Linux操作系统中,标准I/O(Input/Output)库是用于进行文件读写和输入输出操作的一套API(Application Programming Interface)。标准I/O库提供了一系列函数,包括文件打开、读取、写入、关闭等操作,方便开发人员进行文件操作和输入输出。 这份实验资料中的源码,应该是用于展示和实践Linux系统标准I/O库的使用方法和技巧。通过编译和运行这些源码,可以了解如何使用标准I/O库来进行文件的读写和输入输出操作,包括打开文件、读取文件内容、写入文件等。 这些实验源码可以作为学习和实践Linux系统标准I/O库的参考资料。通过实际操作,可以加深对标准I/O库的理解和掌握,提高在Linux环境下进行文件操作和输入输出的能力。 总之,"06. linux系统标准io实验"的实验资料中的程序源码是用于学习和实践Linux系统标准I/O库的使用方法,通过编译和运行这些源码,可以加深对标准I/O库的理解和掌握,提高在Linux环境下进行文件操作和输入输出的能力。 ### 回答3: 清远-c0rtexa9资料中的程序源码目录为\linux应用实验源码\06. linux系统标准io实验\。这个实验中包含了一些关于Linux系统标准输入输出的代码示例。 在Linux中,标准输入输出是三个预先定义好的文件描述符,分别是0(stdin),1(stdout),2(stderr)。这些文件描述符与输入输出设备关联,比如键盘和屏幕。使用标准输入输出可以实现用户与程序之间的交互以及程序的输出显示。 在实验源码中,我们可以看到许多用于标准输入输出的函数,包括printf、scanf、getchar、putchar等。这些函数可以帮助我们进行输入输出操作。 在实验中,我们可以通过这些代码示例学习如何从标准输入读取用户输入,如何向标准输出显示结果。例如,可以使用scanf函数读取用户输入的数据,使用printf函数将处理结果输出显示。 通过实验中的代码示例,我们可以学习到如何处理标准输入输出的错误,如何进行格式化输入输出,如何使用缓冲区进行高效的输入输出等。 总之,清远-c0rtexa9资料中的\linux应用实验源码\06. linux系统标准io实验\中包含了一些关于Linux系统标准输入输出的代码示例,通过这些示例我们可以学习到如何进行标准输入输出操作,以及一些与之相关的技巧和注意事项。这对于学习Linux系统编程和开发应用程序非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值