【JavaWeb】MySQL约束、事务、多表查询

1 约束

PRIMARY KEY

主键约束

UNIQUE

唯一约束

NOT NULL

非空约束

DEFAULT

默认值约束

FOREIGN KEY

外键约束

主键

主键值必须唯一且非空;每个表必须有一个主键

建表时主键约束

CREATE TABLE 表名 (字段名 字段类型 PRIMARY KEY,字段名 字段类型
);CREATE TABLE 表名(列名 数据类型,[CONSTRAINT] [约束名称] PRIMARY KEY(列名)
); 

建表后单独添加主键

ALTER TABLE 表名 ADD PRIMARY KEY (字段名);

删除主键约束

ALTER TABLE 表名 DROP PRIMARY KEY;

主键自增

在每次插入新数据时,数据库自动生成主键字段的值(字段类型必须是数值类型)

建表时:

CREATE TABLE 表名 (字段名 字段类型 PRIMARY KEY AUTO_INCREMENT,字段名 字段类型
);

自增字段在省略字段名插入时,可以给个表中没有的主键数值,也可以用null做占位符,如果没有占位,直接省略不写会报错

修改自动增长的开始值

ALTER TABLE 表名 AUTO_INCREMENT = 要修改的数值;

唯一约束

唯一约束作用:让字段值唯一,不能重复

CREATE TABLE 表名 (字段名 字段类型 UNIQUE,字段名 字段类型
);

非空约束作用:让字段值不能为null

CREATE TABLE 表名 (字段名 字段类型 NOT NULL,字段名 字段类型
);

默认值约束作用:如果这个字段不设置值,用默认值

CREATE TABLE 表名 (字段名 字段类型 DEFAULT 值,字段名 字段类型
);

主键时唯一且非空,约束也可以唯一且非空区别:主键一个表只有一个,约束可以约束多个键

外键

外键:一个表中的引用其它表中的主键的字段

CREATE TABLE 表名 (字段名 字段类型,字段名 字段类型,-- 添加外键约束CONSTRAINT 外键约束名 FOREIGN KEY(外键字段名) REFERENCES 主表(主键字段名)
);
  • CONSTRAINT表示约束外键约束名,给外键约束取个名字,将来通过约束名可以删除这个约束
  • FOREIGN KEY(外键字段名):  指定某个字段作为外键
  • REFERENCES 主表(主键字段名) :  引用主表的主键的值

在存在的表添加外键约束([]内可以省略不写)

ALTER TABLE 从表 ADD [CONSTRAINT 外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主键字段名);

删除外键约束

ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;

2 事务

-- 开启事务
START TRANSACTION; 或者  BEGIN;
-- 提交事务
COMMIT;
-- 回滚事务
ROLLBACK;

事务特性

原子性(Atomicity

事务是不可分割的最小操作单位,要么同时成功,要么同时失败

一致性(Consistency

事务前后数据的完整性必须保持一致。

隔离性(Isolation

是指多个事务并发访问数据库时,一个事务不能被其它的事务所干扰,多个并发事务之间数据要相互隔离,不能相互影响。

持久性(Durability

事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

默认事务是自动提交的

 -- 查看MySQL是否开启自动提交事务
SELECT @@autocommit;-- 关闭自动提交事务
set autocommit = 0;

3 多表查询

内连接:不显示不满足条件的数据

隐式内连接

SELECT 字段列表 FROM 表1 [别名],表2 [别名]… WHERE 条件;

 显示内连接(INNER JOIN ... ON)

SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;
select * from 表1 inner join 表2 on 表连接条件 where 查询条件;

外连接

左外连接:查询出满足条件的数据和表1其余数据

左外连接:查询出满足条件的数据和表2其余数据

--左外连接格式
SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 表连接条件 WHERE 查询条件;
--右外连接格式
SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 表连接条件 WHERE 查询条件;

子查询

先执行子查询,将子查询的结果作为父查询的一部分

in; not in; exists

SELECT 查询字段 FROM 表 WHERE 条件;
--例子,单行单列,括号里面是子查询
SELECT * FROM employee WHERE salary=(SELECT MAX(salary) FROM employee);
-- 多行单列,多行数据但是查询的是同一列 in/any/all
SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
--多行多列,from后是子查询
SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;

多行单列 

 多行多列

-- aaa是子查询数据的别名
select * from (select * from Student where age >= 18) aaa left outer join class on aaa.classid = class.id

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/68521.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis的XML映射文件

Mybatis的开发有两种方式: 注解 XML配置文件 通过XML配置文件的形式来配置SQL语句,这份儿XML配置文件在MyBatis当中也称为XML映射文件。 导学:在MyBatis当中如何来定义一份儿XML映射文件? 在MyBatis当中,定义XML…

帆软大屏2.0企业制作

 数字化观点中心 / 当前页 如何从0-1制作数据大屏,我用大白话给你解释清楚了 文 | 商业智能BI相关文章 阅读次数:18,192 次浏览 2023-06-08 11:51:49 好莱坞大片《摩天营救》中有这么一个场景:  你可以看见反派大b…

Postman接口自动化测试实例

一.实例背景 在实际业务中,经常会出现让用户输入用户密码进行验证的场景。而为了安全,一般都会先请求后台服务器获取一个随机数做为盐值,然后将盐值和用户输入的密码通过前端的加密算法生成加密后串传给后台服务器,后台服务器接到…

开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用

开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用 TextGen: Implementation of Text Generation models 1.介绍 TextGen实现了多种文本生成模型,包括&a…

小目标检测(5)——有线硬触发和有线软触发架构学习

文章目录 引言正文PLC介绍有线硬触发有线软触发硬件接口 总结引用 引言 之前花了很多时间也就是仅仅看懂了基本代码,最近和老师交流之后,发现还有很多东西都需要弄.最终的灯检机,并不是直接接上计算机就使用的,并不是单纯通过计算机控制的,还有一个叫做PLC(可编程逻辑控制器),…

Linux零基础快速入门到精通

目录 一、操作系统概述 二、初始Linux Linux的诞生 ​编辑 Linux内核 Linux发行版 小结 三、虚拟机 认识虚拟机 虚拟化软件及安装 远程连接Linux系统 小结 扩展-虚拟机快照 四、Linux基础命令 查看命令帮助和手册(--help) Linux的目…

Python 基础教程,Python 是什么?

Python 的诞生是极具戏曲性的,据 Guido 自述记载,Python 语言是在圣诞节期间为了打发无聊的时间而开发的,之所以会选择 Python 作为该编程语言的名字,是因为 Guido 是 Monty Python 戏剧团的忠实粉丝。 Python 语言是在 ABC 语言的…

actuator/prometheus使用pushgateway上传jvm监控数据

场景 准备 prometheus已经部署pushgateway服务&#xff0c;访问{pushgateway.server:9091}可以看到面板 实现 基于springboot引入支持组件&#xff0c;版本可以 <!--监控检查--><dependency><groupId>org.springframework.boot</groupId><artifa…

AS报错:错误: 无效的源发行版:12

背景&#xff1a;今天用Android Studio 编译以前的demo,运行报错&#xff1a;错误: 无效的源发行版&#xff1a;12 截图如下&#xff1a; 解决办法&#xff1a;将jdk版本由11升级到13,解决了。 路径&#xff1a;Setting/Build,Execution,Deployment/Build Tools/Gradle/Gradl…

虚拟化和容器化

目录 一. 虚拟化和容器化的概念 什么是虚拟化、容器化 案例 为什么要虚拟化、容器化&#xff1f; 二. 虚拟化实现方式 应用程序执行环境分层 虚拟化常见类别 虚拟机 容器 JVM 之类的虚拟机 三. 常见虚拟化实现 主机虚拟化(虚拟机)实现 容器虚拟化实现 容器虚拟化实现原理 容器…

北航基于openEuler构建工业机器人操作系统,打造“开箱即用”的机器人基础软件平台

北京航空航天大学是国家“双一流”建设高校&#xff0c;以建设扎根中国大地的世界一流大学为发展目标。北京航空航天大学在机器人领域一直处于行业前沿&#xff0c;以其亮眼的成果和优秀的师资力量&#xff0c;成为国内机器人领域的重要参与者和建设者。机器人操作系统是机器人…

电脑出现msvcr100.dll丢失错误怎么办?

msvcr100.dll它是一个动态链接库文件&#xff0c;包含了许多用于运行依赖于Visual C的应用程序所需的函数和类。当运行依赖于Visual C的应用程序时&#xff0c;系统会自动加载和使用msvcr100.dll文件。当系统提示msvcr100.dll文件丢失时&#xff0c;可能会导致一些应用程序无法…