文章目录

  • 0.昨天查询继续
  • 1.数据的约束(重点)
    • 1.1默认值
    • 1.2非空
    • 1.3唯一
    • 1.4主键[重点]
    • 1.5自增长
    • 1.6外键约束(开发中不常用)
    • 1.7级联操作
  • 2.联表查询
    • 2.1内连接外连接
    • 2.2一对多查询
    • 2.3多对多查询

0.昨天查询继续

#select,
#在开发的时候不允许这样写的,会将咱们数据库person表里面所有的数据显示出来,会拖慢咱们数据库的效率
mysql > select * from person;#按照字段查询
msyql > select id, name from person;
mysql > select name, id from person;#按照字段查询,还可以给字段起一个别名
mysql > select id as "编号" , name as "姓名" , info as "信息"  from person;#还可以使用最基本的条件进行查询
# > <   >=     <=      !=    =
mysql > select * from person where id >= 19;#还可以使用逻辑运算符
mysql > select * from person where age > 12 and salary > 10000;
mysql > select * from person where age > 12 or salary > 10000;#排序  order by
mysql > select * from person order by age asc; #升序
mysql > select * from person order by age desc; #降序#按照年龄升序排,年龄相同的再按照salary降序进行排
mysql > select * from person order by age asc, salary desc;#分页查询【重点】limit
mysql > select * from person limit 0,5;#0  1 2 3 4  5  6 7 8 9 10 11 12 13 14
#0-4    limit 0, 5;
#5-9    limit 5,5;
#10-14  limit 10,5;
#pagecount 页码数   length 表示一页显示多少条数据
#limit (pagecount - 1)*length, length;
#第二页   3
#limit 3,3;
#第三页
#limit 6,3;#内置函数(尽量不要用,因为会影响运行的效率)
mysql > select max(age) from person;
mysql > select min(age) from person;
mysql > select avg(age) from person;
mysql > select sum(age) from person;
#统计
mysql > select count(*) from person;--后期有用#模糊查询   _只是占位符而已
mysql > select * from person where name like "骚_";
mysql > select * from person where name like "_骚_";
mysql > select * from person where name like "骚%";
mysql >  select * from person where name like "%骚%";#分组 group by
#按照性别分组
mysql > select * from person group by sex;
#按照性别进行分组,统计
mysql > select sex as "性别", count(*) from person group by sex;#按照性别分组,找出人数大于5的那一个组
mysql > select sex, count(*)--查什么
from person --从哪找
group by sex--以sex 分组
having count(*) > 5;--分组之后的条件不能再使用where 使用having#找出年龄大于20的,按照性别分组,找出人数大于3的组
mysql > select sex, count(*)
from person
where age > 20
group by sex
having count(*) > 3;
where       order by  group by  having

1.数据的约束(重点)

1.1默认值

#用户在插入数据的时候没有给当前字段一个数据的话,当前字段会按照给的默认值进行处理mysql > create table person1 (
id int,
name varchar(30),
country char(20) default "PRC");

1.2非空

mysql > create table person2 (
id int not null,
name varchar(30),
info text
);mysql> insert into person2(name, info) values("随便", "太随便了");
ERROR 1364 (HY000): Field 'id' doesn't have a default value

1.3唯一

#要求你字段数据在当前数据表中不能重复
#unique
mysql > create table person3(
id int unique,
name varchar(30) not null,
info text not null
);
mysql> insert into person3(id, name, info) values(1, "浪博", "心浪微博");
Query OK, 1 row affected (0.01 sec)mysql> insert into person3(id, name, info) values(1, "浪博1", "心浪微博1");
ERROR 1062 (23000): Duplicate entry '1' for key 'id'

1.4主键[重点]

#唯一和非空的一种组合方式
#primary key
#主键是该行数据唯一的索引
#一般工作的时候主键都是id 并且是唯一的,  会把和业务无关的字段设置为主键
#性别,年龄,地址,工资 等都不能设置为主键
mysql > create table person4 (
id int primary key,
name varchar(30) not null,
info text not null
);

1.5自增长

#插入数据的时候,有写字段可以自动增加
#auto_increment
#要想使用自增,字段类型必须是整型的数据,另外一个必须是key键 一般是主键
mysql > create table person5 (
id int primary key auto_increment,
name varchar(30) not null,
info text not null
);
注意事项主键是不能重复  自增 1以下的都不行,最好是让他自己增加

1.6外键约束(开发中不常用)

#员工表
mysql > create table employee(
id int primary key auto_increment,
empName varchar(30) not null,
depName varchar(30) not null,
regTime timestamp default current_timestamp
);mysql> select * from employee;
+----+------------+---------+---------------------+
| id | empName    | depName | regTime             |
+----+------------+---------+---------------------+
|  1 | 骚磊       | 骚      | 2019-11-26 11:28:18 |
|  2 | 骚杰       | 骚      | 2019-11-26 11:28:34 |
|  3 | 王宝强     | 绿      | 2019-11-26 11:29:15 |
|  4 | 贾乃亮     | 绿      | 2019-11-26 11:29:25 |
|  5 | 陈羽凡     | 绿      | 2019-11-26 11:29:59 |
|  6 | 蔡徐坤     | 击      | 2019-11-26 11:30:36 |
|  7 | 蔡徐坤1    | 击      | 2019-11-26 11:31:11 |
+----+------------+---------+---------------------+#分表操作
#上面这个表既有员工名字, 部门的名字
#员工表和部门表mysql > drop table employee;
#部门表
mysql >  create table dept(id int primary key auto_increment,deptName varchar(20) not null);
#员工表
mysql > create table employee(id int primary key auto_increment,empName varchar(30) not null,deptId int not null);mysql> select * from dept;
+----+----------+
| id | deptName |
+----+----------+
|  1 | 骚       |
|  2 | 绿       |
|  3 | 击       |
+----+----------+mysql> select * from employee;
+----+-----------+--------+
| id | empName   | deptId |
+----+-----------+--------+
|  1 | 骚磊      |      1 |
|  2 | 骚j杰     |      1 |
|  3 | 王宝强    |      2 |
|  4 | 蔡徐坤    |      3 |
|  5 | 贾乃亮    |      2 |
|  6 | 陈羽凡    |      2 |
+----+-----------+--------+
6 rows in set (0.00 sec)#插入一个员工数据,部门不存在,照样可以插入, 不符合真实开发中的业务逻辑
#删除一个数据 ,照样可以删除
mysql> create table dept(-> id int primary key auto_increment,-> deptName varchar(20) not null-> );
Query OK, 0 rows affected (0.03 sec)mysql> create table employee(-> id int primary key auto_increment,-> empName varchar(20) not null,-> deptId int not null,-> regTime timestamp default current_timestamp,#使用了外键约束,让两个表关联起来#fk_emp_dp  外键名字#foreign key 外键#dept(id) 参考一下这个键-> constraint fk_emp_dp foreign key(deptId) references dept(id)-> );
Query OK, 0 rows affected (0.03 sec)
#开始插入数据 部门表
mysql> insert into dept(deptName) values("骚");
Query OK, 1 row affected (0.01 sec)mysql> insert into dept(deptName) values("绿");
Query OK, 1 row affected (0.01 sec)mysql> insert into dept(deptName) values("鸡");
Query OK, 1 row affected (0.00 sec)#开始插入数据  员工表
mysql> insert into employee(empName, deptId) values("骚磊", 1);
Query OK, 1 row affected (0.05 sec)mysql> insert into employee(empName, deptId) values("骚杰", 1);
Query OK, 1 row affected (0.00 sec)mysql> insert into employee(empName, deptId) values("王宝强", 2);
Query OK, 1 row affected (0.03 sec)mysql> insert into employee(empName, deptId) values("蔡徐坤", 3);
Query OK, 1 row affected (0.04 sec)mysql> insert into employee(empName, deptId) values("贾乃亮", 2);
Query OK, 1 row affected (0.03 sec)mysql> insert into employee(empName, deptId) values("陈羽凡", 2);
Query OK, 1 row affected (0.01 sec)#插入的时候有外键的约束,在一个表中插入数据的时候,这个字段和另外一个表中的字段要有对应关系
mysql> insert into employee(empName, deptId) values("李云龙", 4);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f
ails (`laowanmian`.`employee`, CONSTRAINT `fk_emp_dp` FOREIGN KEY (`deptId`) REF
ERENCES `dept` (`id`))#删除
mysql> delete from dept where id = 1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constrai
nt fails (`laowanmian`.`employee`, CONSTRAINT `fk_emp_dp` FOREIGN KEY (`deptId`)REFERENCES `dept` (`id`))#外键约束的特征:(部门表示主表, 员工表是从表)--1.先添加主表,再添加从表,如果添加时从表,直接报错--2.先删除从表, 再删除主表, 如果先删除主表,直接报错--3.先修改从表,再修改主表

1.7级联操作

自己演示:
--在使用外键的时候会出现问题
mysql> create table dept(-> id int primary key auto_increment,-> deptName varchar(20) not null-> );
Query OK, 0 rows affected (0.03 sec)mysql> create table employee(-> id int primary key auto_increment,-> empName varchar(20) not null,-> deptId int not null,-> regTime timestamp default current_timestamp,#使用了外键约束,让两个表关联起来#fk_emp_dp  外键名字#foreign key 外键#dept(id) 参考一下这个键-> constraint fk_emp_dp foreign key(deptId) references dept(id)-> on delete cascade->on update cascade
Query OK, 0 rows affected (0.03 sec)#on delete cascade 级联删除#on update cascade 级联修改
总结:
1.新建两个表 dept  (部门表)  employee(员工表)  没有加约束关系
2.随便增加 ,随便删除,随便更新  都不会报错但是不符合工作中业务逻辑
3.删除了上面建的两个表,然后有新建了dept  (部门表)  employee(员工表)加了外键约束
constraint fk_emp_dp foreign key(deptId) references dept(id)
4.删除主表(报错了) , 先删除从表再删除主表没有报错()
5.删除了上面建的两个表,然后有新建了dept  (部门表)  employee(员工表)加了外键约束和级联删除和更新
6.咋删除都不会报错了

2.联表查询

2.1内连接外连接

--员工表和部门表是有一定关系的,期望查到的数据带有对应部门的员工
--联表查询-- 考虑的内容
--1. 需要查什么?
--2.从哪里查?
--3.查询的条件是什么?--期望获得是员工的id 号,员工的名字,和部门的名字
--第一种写法
select employee.id, employee.empName,dept.deptName
from employee, dept
--where很关键  一对多的关系
where employee.deptId = dept.id;--第二种写法 可以给表名起别名
select e.id, e.empName, d.deptName
from employee e, dept d
where e.deptId = d.id;--第三种写法 可以给字段起别名
select e.id as "编码", e.empName as "姓名", d.deptName as "部门"
from employee e, dept d
where e.deptId = d.id;--可以加一些条件
select e.id as "编码", e.empName as "姓名", d.deptName as "部门"
from employee e, dept d
where e.deptId = d.id
order by e.id desc;--内连接查询(重要)
-- inner join#第四种写法
select e.id as "编号", e.empName as "姓名", d.deptName as "部门"
from employee e --查询数据的某一张表
inner join dept d --使用内连接查询,去连接另外一张表
where e.deptId = d.id;--左外连接  以左边的表为主,意味着左边的额表的数据不能丢失
select e.id as "编号", e.empName as "姓名", d.deptName as "部门"
from dept d
left outer join employee e
on e.deptId = d.id;--右外连接 以右边的表为主,意味着右边的数据不能丢
select e.id as "编号", e.empName as "姓名", d.deptName as "部门"
from dept d
right outer join employee e
on e.deptId = d.id;
一对一:用户表和详细信息表
一对多:一个老师对应多个学生(工作用的最大)
多对多:课程和学生的关系内连接:只连接匹配的项
外连接:没有的话会补上null
(自己打开一个excel)

2.2一对多查询

mysql > create table student(id int primary key auto_increment, -- 学生IDname varchar(20) not null, -- 学生姓名age int not null, -- 学生年龄gender tinyint(1) not null -- 学生性别
);mysql > create table score_record(id int primary key auto_increment, -- 成绩单IdstuId int not null, -- 当前成绩单对应的学生IDjavaScore float(5, 2) not null, -- Java成绩cScore float(5, 2) not null, -- C语言成绩htmlScore float(5, 2) not null -- HTML成绩
);mysql > insert into student(name, age, gender) values("骚磊", 16, 0);
mysql > insert into student(name, age, gender) values("骚杰", 66, 0);
mysql > insert into student(name, age, gender) values("骚很", 56, 0);
mysql > insert into student(name, age, gender) values("林妹妹", 15, 0);
mysql > insert into student(name, age, gender) values("宝哥哥", 18, 0);mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(1, 10.5, 20.5, 35.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(1, 12.5, 22.5, 33.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(1, 13.5, 21.5, 30.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(2, 20.5, 12.5, 30.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(2, 4.5, 51.5, 30.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(2, 20.5, 60.5, 5.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(3, 15.5, 21.5, 56.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(3, 13.5, 20.5, 78.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(4, 50.5, 15.5, 51.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(4, 20.5, 25.5, 53.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(5, 15.5, 76.5, 6.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(5, 12.5, 32.5, 1.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(5, 20.5, 3.5, 63.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(2, 12.5, 5.5, 5.5);
mysql > insert into score_record(stuId, javaScore, cScore, htmlScore) values(3, 15.5, 6.5, 10.5);

2.3多对多查询

mysql > create table user(id int primary key auto_increment,name varchar(20) not null, roleId int not null
);mysql > create table role(id int primary key auto_increment,roleName varchar(20) not null
);mysql > create table privilege(id int primary key auto_increment,pName varchar(20) not null
);mysql > create table role_to_privilege(id int primary key auto_increment,roleId int not null,pId int not null
);mysql > insert into user(name, roleId) values("张三", 1);
mysql > insert into user(name, roleId) values("李四", 2); mysql > insert into role(roleName) values("管理员");
mysql > insert into role(roleName) values("普通用户");mysql > insert into privilege(pName) values("删除用户"); -- 管理
mysql > insert into privilege(pName) values("添加用户"); -- 管理
mysql > insert into privilege(pName) values("修改用户"); -- 管理 用户
mysql > insert into privilege(pName) values("查看指定用户"); -- 管理 用户
mysql > insert into privilege(pName) values("查看所有用户"); -- 管理mysql > insert into role_to_privilege(roleId, pId) values(1, 1);
mysql > insert into role_to_privilege(roleId, pId) values(1, 2);
mysql > insert into role_to_privilege(roleId, pId) values(1, 3);
mysql > insert into role_to_privilege(roleId, pId) values(1, 4);
mysql > insert into role_to_privilege(roleId, pId) values(1, 5);
mysql > insert into role_to_privilege(roleId, pId) values(2, 3);
mysql > insert into role_to_privilege(roleId, pId) values(2, 4);

希望大家关注我一波,防止以后迷路,有需要的可以加我Q讨论互相学习java ,学习路线探讨,经验分享与java Q:2415773436

Java第十九天:mysql(二)相关推荐

  1. 小白学习Java第二十九天

    今日内容 数据库的导入和导出 DQL 基本查询 条件查询 排序查询 函数 分组查询 分页查询 连接查询 一. 导入导出数据库 1.导出数据库 选中要导出的数据库,鼠标右键备份/导出-->备份数据 ...

  2. 学习Java第十九天(一):1、Java中的网络编程

    1.Java中的网络编程 什么是网络? 在计算机领域中网络是信息传输,接收共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享. 作用:信息传输,资源共享 有点:资源共享免费 O ...

  3. JAVA面经复习(二十六)面试难度:☆☆☆☆

    JAVA面经复习(二十六)面试难度:☆☆☆☆ 面试难度:☆☆☆☆ 推荐指数:☆☆☆☆☆ 推荐原因:总体来说本篇面经难度不高,且基本都是基础知识,不涉及复杂的分布式应用的工具,适合新手复习. 声明:答案 ...

  4. java从入门到精通二十四(三层架构完成增删改查)

    java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...

  5. MySQL二十八规范数据库设计

    MySQL二十八:规范数据库设计 糟糕的数据库设计: ●数据冗余,浪费空间 ●数据库插入和删除都会麻烦.异常[ 屏蔽使用物理外键] ●程序的性能差 良好的数据库设计: ●节省内存空间 ●保证数据库的完 ...

  6. MySQL二十四:索引

    MySQL二十四:索引的介绍与分类 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构. 提取句子主干,就可以得到索引的本质:索引是数据结构. 在一个表中,主键索引 ...

  7. springboot毕设项目二手书交易平台95q22(java+VUE+Mybatis+Maven+Mysql)

    springboot毕设项目二手书交易平台95q22(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBu ...

  8. mysql revoke 用法_mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法 MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执行查 ...

  9. Java游戏服务器开发之二十--xml配置文件

    Java游戏服务器开发之二十--xml配置文件     游戏中使用的配置文件很多     像游戏中的关卡,英雄等级,装备之类都是使用配置文件(xml等)     比如有一个装备,配置表中有一条记录,数 ...

  10. java常见面试考点(二十五):CAS是什么

    java常见面试考点 往期文章推荐:   java常见面试考点(二十):Elasticsearch 和 solr 的区别   java常见面试考点(二十一):单点登录   java常见面试考点(二十二 ...

最新文章

  1. 哎..前段时间的偷懒..造成今天的被动局面...要检讨深刻教训.
  2. 清华大学 lt;现代软件工程gt; 项目小组名单
  3. c语言做一个小程序报告,《C语言程序设计实践》课程报告30个小程序组合成一个大程序.doc...
  4. 第十四节(接口(行为))
  5. 生成patch的diff命令是怎么写的?
  6. jsp 连接sql数据库查询(源代码)
  7. 图——基本的图算法(四)关键路径
  8. STAMP:扩增子、宏基因组统计分析神器(中文帮助文档)
  9. 日活两亿的快手,如何用AI理解视频、做好分发
  10. 171-路飞12-课程页面和课程数据表构建
  11. 爆笑校园生活——人在校园的日子
  12. vip html代码,vip.html
  13. 从线下走到线上,艺术品能否找到新突破口?
  14. 正则表达式,终极使用!3个工具,搞定一切
  15. mysql5.7.19收费》_mysql5.7.19安装
  16. 多线程5:对象的发布与逸出(线程安全性)
  17. html怎么设置y轴,Y轴方向跑马灯的实现
  18. 人生第一次心理咨询逐字稿以及分析
  19. 【OKR工作方法】““Objectives Key Results目标与关键结果”,怎么学习OKR方法,OKR的优势是什么
  20. 有关公司类型、部门的英文

热门文章

  1. 端到端和非端到端的Embedding,以及embedding质量评估
  2. MySQL with 写法
  3. dyndns免费动态域名
  4. 七、项目进度管理(二)【题】
  5. 《生如夏花》——泰戈尔
  6. 与计算机相关的潜在健康风险是什么,医疗安全与风险管理.新.ppt
  7. 主流微信编辑器对比,最好用的竟然是它!
  8. 《漫游》之《绝代双骄3》
  9. Dijkstra算法(迪杰斯特拉算法)
  10. Dreamweaver CS6 行为概述