中去掉外键_【Java笔记】035天,MySQL中的增删改查
学习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中的增删改查相关推荐
- mysql 原生 添加数据_手撸Mysql原生语句--增删改查
mysql数据库的增删改查有以下的几种的情况, 1.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTER SHOW 2.DML语句 数据库操纵语言: ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查
IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查 注意: 每个方法对应单个java类,可以自行进行整理汇总到一个类中 一.Java通过JDBC连接到PostgreSQL数据 ...
- java+SQL做学生信息管理系统(增删改查)
java+SQL做学生信息管理系统(增删改查) [过程中需要用到的所有工具数据库以及数据库管理器等等] https://pan.baidu.com/s/1cLKJPKXauLCl-Vwah6wFIQ ...
- Java对MySQL数据库进行增删改查的操作(一)
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- java springboot整合zookeeper入门教程(增删改查)
java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...
- 【java项目学习笔记】Java学生管理系统(纯后端基础--增删改查)
学生管理系统 在一所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写一个学生管理系统,实现对学生信息的添加.删除.修改和查询功能.每个功能的具体要求如下: 系统的首页 用于显示系统所有的操作,并 ...
- Redis概述_使用命令对redis的数据进行增删改查_Jedis连接redis进行数据操作_redis进行数据缓存案例
学习目标 redis 概念 下载安装 命令操作 1. 数据结构 持久化操作 使用Java客户端操作redis Redis 前言(从百度上抄的, 看看了解一下, 懒得排版了) 1. 概念: redis是 ...
- MySQL笔记(二)基础的增删改查
这是我在学习Mysql之路上做的笔记,今天将它粘出来.这一篇主要是简单增删改查.有错误的欢迎大家指出... #增删改查 #创建部门表 CREATE TABLE IF NOT EXISTS tb_dep ...
最新文章
- C#.Net的常见面试试题 [转]
- linux tomcat下部署多个项目启动失败
- 最简单的基于FFmpeg的AVDevice例子(屏幕录制)
- 温习下C语言一些函数
- CNN图像分割简史:从R-CNN到Mask R-CNN(译)
- nginx安装到指定目录
- Spring-beans-BeanDefinitionRegistry
- 经典网页设计:20个与众不同的国外 HTML5 网站
- mysql备份与恢复的一些方法
- 远程控制软件也要有plan B备选方案
- 从单张图重建三维人体模型综述(一)
- Mysql的AUTO_INCREMENT
- Opengl加载与创建纹理
- springboot+校园新闻数据化系统-计算机毕设 附源码99293
- 范登堡(van den berg)CPT使用记录
- java后台实现支付宝支付接口、支付宝订单查询接口 前端为APP
- Mybatis从入门到精通上篇
- [BZOJ4808] 马(最大独立集,最大流)
- python版 —— 验证码校验 打码兔平台的使用介绍
- 免费杀毒软件如何生存?
热门文章
- 树莓派相机操作 —— luvcview 的安装、raspistill:摄像头命令
- Java 高阶 —— try/catch
- Java 并发 —— 读写锁(ReadWriteLock)
- 半监督学习(semi-supervised learning)
- C 程序的存储空间布局
- UNIX 环境高级编程(四)—— dirent.h
- 也谈压缩感知(compressive sensing)
- python兼职程序员工资-Python 程序员的工资能有多高?
- python必备入门代码-学习Python必备的八大知识板块,学好这些你就算入门啦~
- python画条形图-python3使用matplotlib绘制条形图