学习Java的第35天。

今天天除了学习MySQL中的各种约束,MySQL中DML的操作,还有MySQL查询语句ds……

MySQLdz中d的约束有:

• 非空约束(not null)

• 唯一性约束(unique)

• 主键约束(primary key) PK

• 外键约束(foreign key) FK

注意:检查约束(目前 MySQL 不支持、Oracle 支持)

查询表中的约束信息 :SHOW KEYS FROM 表名

先来了解一下——自动增长(auto_increment) :

MySQL 中的自动增长类型要求:

• 一个表中只能有一个列为自动增长。

• 自动增长的列的类型必须是整数类型。

• 自动增长只能添加到具备主键约束与唯一性约束的列上。 通过这种自动增长的策略,加到主键上,用于 主键的值 的生成。

• 删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长然后再删除约束。

示例:创建一个 emp2 表。包含 id 该列为主键,包含 name,包含 seq_num 要求该列为具备唯一性约束,该列的值自动增长。

create table emp2(id int primary key ,name varchar(30),seq_num int unique auto_increment);

创建表时添加约束 :

示例:创建 departments 表包含 department_id 该列为主键且自动增长department_name 列不允许重复,location_id 列不允含有空值。

create table departments(department_id int primary key auto_increment,department_name varchar(30) unique,location_id int not null);

创建 employees 表包含 employees_id 该列为主键且自动增长,last_name 列不允许含有空值,email 列不允许有重复不允许含有空值,dept_id 为外键参照 departments 表的主键。

create table employees(employees_id int primary key auto_increment,last_name varchar(30) not null,email varchar(40) not null unique,dept_id int,constraint emp_fk foreign key(dept_id) references departments(department_id));

修改表实现约束的添加与删除

主键约束 ;添加主键约束 :

将 emp 表中的 employee_id 修改为主键且自动增长

添加主键:alter table emp add primary key(employee_id);

添加自动增长:alter table emp modify employee_id int auto_increment;

删除主键约束

ALTER TABLE 表名 DROP PRIMARY KEY

注意:删除主键时,如果主键列具备自动增长能力,需要先去掉自动增长,然后在删除主键。

Oracle和MySQL在主键维护策略上的不同;

MySQL创建外键时 会将外键放在索引中,需要在删除外键时还需要将外键的索引也删除,才能将外键彻底删除。索引名与对应的外键名相同。选择性插入数据时,可以忽略带有自增长的主键,交由MySQL维护这个值。

删除 employee_id 的主键约束。

去掉自动增长: alter table emp modify employee_id int;

删除主键:alter table emp drop primary key;

添加非空约束

ALTER TABLE 表名 MODIFY 列名 类型 NOT NULL

向 emp 表中的 salary 添加非空约束。 :alter table emp modify salary float(8,2) not null;

删除非空约束

ALTER TABLE 表名 MODIFY 列名 类型 NULL

删除 salary 的非空约束。:alter table emp modify salary float(8,2) null;

添加唯一约束

ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列名)

向 emp 表中的 name 添加唯一约束。 :alter table emp add constraint emp_uk unique(name);

删除唯一约束

ALTER TABLE 表名 DROP KEY 约束名

例:删除 name 的唯一约束。: alter table emp drop key emp_uk;

添加外键约束

ALTER TABLE 表 名 ADD CONSTRAINT 约 束 名 FOREIGN KEY( 列 名 ) REFERENCES 参照的表名(参照的列名)

向 emp 表中的 dept_id 列添加外键约束。

alter table emp add constraint e_fk foreign key(dept_id) references departments(department_id);

删除外键约束

删除外键: ALTER TABLE 表名 DROP FOREIGN KEY 约束名

删除外键索引(索引名与约束名相同): ALTER TABLE 表名 DROP INDEX 索引名

例:删除 dept_id 的外键约束。

删除外键:alter table emp drop foreign key e_fk;

删除索引: alter table emp drop index e_fk;

添加数据(INSERT)

选择插入

INSERT INTO 表名(列名 1,列名 2,列名 3.....) VALUES(值 1,值 2,值 3......)

示例

向 departments 表中添加一条数据,部门名称为 market,工作地点 ID 为 1。

insert into departments(department_name,location_id) values("market",1);

完全插入

INSERT INTO 表名 VALUES(值 1,值 2,值 3......)

如果主键是自动增长,需要使用 default 或者 null 或者 0 占位。

null 和 0 占位:

默认值处理

在 MySQL 中可以使用 DEFAULT 为字段设定一个默认值。如果在插入数据时并未指定该列的值,那么 MySQL 会将默认值添加到该列中。

创建表时指定列的默认值

示例 :创建 emp3 表,该表包含 emp_id 主键且自动增长,包含 name,包含 address 该列默认值为”未知”。

create table emp3(emp_id int primary key auto_increment,name varchar(30), address varchar(50) default 'Unknown');

修改表添加列的默认值

示例:修改 emp3 表,添加 job_id 该列默认值为 0。

alter table emp3 add column job_id int default 0;

插入数据时的默认值处理

如果在插入数据时并未指定该列的值,那么 MySQL 会将默认值添加到该列中。如果是完全项插入需要使用 default 来占位。

示例:向 emp3 表中添加数据,要求 address 列与 job_id 列使用默认值作为该列的值。

insert into emp3(name) values("admin");

insert into emp3 values(default,"oldlu",default,default);

更新数据(UPDATE)

UPDATE 表名 SET 列名=值,列名=值 WHERE 条件

mysql 的 update 的特点

• 更新的表不能在 set 和 where 中用于子查询;

• update 后面可以做任意的查询

一般更新:更新 emp3 表中的 id 为 1 的数据,添加 address 为 BeiJing。

update emp3 e set e.address = "BeiJing" where emp_id = 1;

方式一:更新 emp3 中 id 为 2 的数据,将地址修改为与 id 为 1 用户的地址相同

Oracle方法::update emp3 e set e.address = (select address from emp3 where emp_id = 1) where e.emp_id = 2;

MySQL方法: update emp3 e ,(select address from emp3 where emp_id = 1)t set e.address = t.address where e.emp_id =2;

方式二:更新 emp3 中 id 为 2 的数据,将地址修改为与 id 为 1 用户的地址相同

update emp3 e set e.address = (select t1.address from (select emp_id, add ress from emp3)t1 where t1.emp_id = 1 ) where e.emp_id = 2;

删除数据(DELETE)

使用 DELETE 子句

DELETE FROM 表名 WHERE 条件

示例:删除emp3 表中 emp_id 为1的雇员信息。 :delete from emp3 where emp_id = 1

使用 TRUNCATE 清空表 :TRUNCATE TABLE

示例:删除 emp3 表中的所有数据 :truncate table emp3;

DELETE 与 TRUNCATE 区别

• truncate 是整体删除(速度较快), delete 是逐条删除(速度较慢);

• truncate 不写服务器 log,delete写服务器 log,也就是truncate效率比 delete 高的原因;

• truncate 是会重置自增值,相当于自增列会被置为初始值,又重新从 1 开始记录,而不是接着原来的值。而 delete 删除以后,自增值仍然会继续累加。

MySQL 中的事务处理

在 MySQL 中,默认情况下,事务是自动提交的,也就是说,只要执行一条 DML 语句 就开启了事务,并且提交了事务

MySQL事务处理:可以总结为:一行一提交。

关闭 MySQL 的事务自动提交

START TRANSACTION

DML....

COMMIT|ROLLBACK

MySQL 查询数据

基本查询 :MySQL 的列选择 :SELECT * | 投影列 FROM 表名

MySQL 的行选择 :SELECT * | 投影列 FROM 表名 WHERE 选择条件

查询 departments 表中部门 ID 为 4 的部门名称与工作地点 ID。

select department_name,location_id from departments where department_id =4;

SELECT 语句中的算术表达式

+ :加法运算

- :减法运算

* :乘法运算

/ :除法运算,返回商

% :求余运算,返回余数

MySQL 中的列别名 :SELECT 列名 AS 列别名 FROM 表名 WHERE 条件

查询 employees 表将雇员 laser_name 列名改为 name。 :select last_name as name from employees;

MySQL 中的连字符

MySQL 中并不支持 || 作为连字符,需要使用 concat 函数。在参数数量上与 oracle 的 concat 函数有区别。

查询雇员表中的所有数据,将所有数据连接到一起,每列值中通过#分割。

select concat(employees_id,'#',last_name,'#',email,"#",salary,"#",commission_pct) from employees;

MySQL 中去除重复:

SELECT DISTINCT列名 FROM 表名

MySQL 中的比较条件

比较运算符

等于= ; 大于> ;大于等于>= ;小于< ;小于等于<= ;不等于!=或<>

模糊查询

like ;%表示任意多个任意字符 ; _表示一个任意字符

逻辑运算符 and ; or ;not

范围查询 between ... and ; in 表示在一个非连续的范围内

空值判断 判断空 is null ; 判断非空 is not null

使用 ORDER BY 排序 用 ORDER BY 子句排序 ;ASC: 升序排序,默认 ;DESC: 降序排序

日期函数 :

转换函数

DATE_FORMAT(date,format) 将日期转换成字符串(类似 oracle 中的 to_char())

STR_TO_DATE(str,format) 将字符串转换成日期(类似 oracle 中的 to_date())

通用函数

IFNULL(expr1,expr2) 判断 expr1 是否为 null,如果为 null,则用 expr2 来代替 null(类似 oracle 的 NVL()函数)

NULLIF(expr1,expr2) 判断 expr1 和 expr2 是否相等,如果相等则返回 null,如果不相等则返回 expr1

IF(expr1,expr2,expr3) 判断 expr1 是否为真(是否不为 null),如果为真,则使用 expr2 替代 expr1;如果为假,则使用 expr3 替代 expr1(类似 oracle 的 NVL2()函数)

COALESCE(value,...) 判断 value 的值是否为 null,如果不为 null,则返回 value;如果为 null,则判断下一个 value 是否为 null……直至出现不为 null 的 value 并返回或者返回最后一个为 null 的 value

CASE WHEN THEN ELSE END 条件函数

聚合函数

AVG(arg)函数

对分组数据做平均值运算。

arg:参数类型只能是数字类型。

SUM(arg)函数

对分组数据求和。

arg:参数类型只能是数字类型。

MIN(arg)函数

求分组中最小数据。

arg:参数类型可以是字符、数字、日期。

MAX(arg)函数

求分组中最大数据。

arg:参数类型可以是字符、数字、日期。

COUNT 函数

返回一个表中的行数。

COUNT 函数有三种格式:

COUNT(*) ; COUNT(expr) ; COUNT(DISTINCT expr)

自连接: 查询每个雇员的经理的名字以及雇员的名字。

select emp.last_name,man.last_name from employees emp ,employees man where emp.manager_id = man.employees_id

外连接(OUTER JOIN)

左外连接(LEFT OUTER JOIN) ,右外连接(LEFT OUTER JOIN)

查询所有雇员的名字以及他们的部门名称,包含那些没有部门的雇员。

select e.last_name,d.department_name from employees e LEFT OUTER JOIN departments d on e.dept_id = d.department_id

全外链接

注意:MySQL 中不支持 FULL OUTER JOIN 连接可以使用 union 实现全完连接。

UNION :可以将两个查询结果集合并,返回的行都是唯一的,如同对整个结果集合使用了 DISTINCT。

UNION ALL :只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据, 那么返回的结果集就会包含重复的数据了。

语法结构 :SELECT 投 影 列 FROM 表 名 LEFT OUTER JOIN 表 名 ON 连 接 条 件 UNION SELECT 投影列 FROM 表名 RIGHT OUTER JOIN 表名 ON 连接条件

查询所有雇员的名字以及他们的部门名称,包含那些没有雇员的部门以及没有部门的雇员。

(select e.last_name,d.department_name from employees e LEFT OUTER JOIN departmentsd on e.dept_id = d.department_id) UNION (select e1.last_name,d1.department_name from employees e1 RIGHT OUTER JOIN departments d1 on d1.department_id = e1.dept_id)

MySQL5.7 支持 SQL99 标准。

SQL99 中的内连接(INNER JOIN)

查询雇员名字为 OldLu 的雇员 ID,薪水与部门名称。

select e.employees_id,e.salary,d.department_name from employees e inner JOIN departments d on e.department_id = d.department_id where e.last_name = 'Oldlu';

中去掉外键_【Java笔记】035天,MySQL中的增删改查相关推荐

  1. mysql 原生 添加数据_手撸Mysql原生语句--增删改查

    mysql数据库的增删改查有以下的几种的情况, 1.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTER SHOW 2.DML语句 数据库操纵语言: ...

  2. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  3. IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查

    IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查 注意: 每个方法对应单个java类,可以自行进行整理汇总到一个类中 一.Java通过JDBC连接到PostgreSQL数据 ...

  4. java+SQL做学生信息管理系统(增删改查)

    java+SQL做学生信息管理系统(增删改查) [过程中需要用到的所有工具数据库以及数据库管理器等等] https://pan.baidu.com/s/1cLKJPKXauLCl-Vwah6wFIQ ...

  5. Java对MySQL数据库进行增删改查的操作(一)

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  6. java springboot整合zookeeper入门教程(增删改查)

    java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...

  7. 【java项目学习笔记】Java学生管理系统(纯后端基础--增删改查)

    学生管理系统 在一所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写一个学生管理系统,实现对学生信息的添加.删除.修改和查询功能.每个功能的具体要求如下: 系统的首页 用于显示系统所有的操作,并 ...

  8. Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例

    学习目标 redis 概念 下载安装 命令操作 1. 数据结构 持久化操作 使用Java客户端操作redis Redis 前言(从百度上抄的, 看看了解一下, 懒得排版了) 1. 概念: redis是 ...

  9. MySQL笔记(二)基础的增删改查

    这是我在学习Mysql之路上做的笔记,今天将它粘出来.这一篇主要是简单增删改查.有错误的欢迎大家指出... #增删改查 #创建部门表 CREATE TABLE IF NOT EXISTS tb_dep ...

最新文章

  1. C#.Net的常见面试试题 [转]
  2. linux tomcat下部署多个项目启动失败
  3. 最简单的基于FFmpeg的AVDevice例子(屏幕录制)
  4. 温习下C语言一些函数
  5. CNN图像分割简史:从R-CNN到Mask R-CNN(译)
  6. nginx安装到指定目录
  7. Spring-beans-BeanDefinitionRegistry
  8. 经典网页设计:20个与众不同的国外 HTML5 网站
  9. mysql备份与恢复的一些方法
  10. 远程控制软件也要有plan B备选方案
  11. 从单张图重建三维人体模型综述(一)
  12. Mysql的AUTO_INCREMENT
  13. Opengl加载与创建纹理
  14. springboot+校园新闻数据化系统-计算机毕设 附源码99293
  15. 范登堡(van den berg)CPT使用记录
  16. java后台实现支付宝支付接口、支付宝订单查询接口 前端为APP
  17. Mybatis从入门到精通上篇
  18. [BZOJ4808] 马(最大独立集,最大流)
  19. python版 —— 验证码校验 打码兔平台的使用介绍
  20. 免费杀毒软件如何生存?

热门文章

  1. 树莓派相机操作 —— luvcview 的安装、raspistill:摄像头命令
  2. Java 高阶 —— try/catch
  3. Java 并发 —— 读写锁(ReadWriteLock)
  4. 半监督学习(semi-supervised learning)
  5. C 程序的存储空间布局
  6. UNIX 环境高级编程(四)—— dirent.h
  7. 也谈压缩感知(compressive sensing)
  8. python兼职程序员工资-Python 程序员的工资能有多高?
  9. python必备入门代码-学习Python必备的八大知识板块,学好这些你就算入门啦~
  10. python画条形图-python3使用matplotlib绘制条形图