目录
Java 中创建对象: Student s = new Student(1, "张三") 存在内存中。
学习了 Java IO 流:把数据保存到文件中。
1.存储数据的仓库
2.本质上是一个文件系统,还是以文件的方式存在服务器的电脑上。
3.所有的关系型数据库都可以使用通用的SQL语句进行管理DBMS DataBase Management System。
1.MySQL:开源免费的数据库,小型的数据库,已经被Oracle收购了,MySQL6.x版本也开始收费,后来Sun公司收购了MySQL,而Sun公司又被Oracle收购。
2.Oracle:收费的大型数据库,Oracle公司的测评。
3.DB2:IBM公司的数据库产品,收费的。常应用在银行系统中。
4.SQL Server:Microsoft公司收费的中型的数据库。C#,.net等语言常使用。
5.SQLite:嵌入式的小型数据库,应用在手机端,如:Android。
1.免费
2.功能强大
1.3MySQL目录结构
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理 系统访问数据库中表内的数据
数据库管理程序(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体 User 的数据。
数据库管理系统、数据库和表的关系如图所示:
1.一个数据库服务器包含多个库
2.一个数据库包含多张表
3.一张表包含多条记录
Structured Query Language 结构化查询语言
1.是一种所有关系型数据库的查询规范,不同的数据库都支持。
2.通用的数据库操作语言,可以用在不同的数据库中。
3.不同的数据库 SQL 语句有一些区别,例如:
创建数据库
CREATE DATABASE 数据库名;
判断数据库是否已经存在,不存在则创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
-- 直接创建数据库
db1 create database db1;
-- 判断是否存在,如果不存在则创建数据库
db2 create database if not exists db2;
-- 创建数据库并指定字符集为 gbk
create database db3 default character set gbk;
-- 查看所有的数据库
show databases;
-- 查看某个数据库的定义信息
show create database db3;
show create database db1;
3.3.1修改数据库默认的字符集
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;;
将 db3 数据库的字符集改成 utf8
alter database db3 character set utf8;
DROP DATABASE 数据库名;
drop database db2;
SELECT DATABASE(); 使用的一个 mysql 中的全局函数
USE 数据库名;
-- 查看正在使用的数据库
select database();
-- 改变要使用的数据库
use db4;
前提先使用某个数据库
CREATE TABLE 表 名 (
字段名 1 字段类型 1,
字段名 2 字段类型 2
);
创建student表包含id,name,birthday字段
create table student (
id int, -- 整 数
name varchar(20), -- 字符串
birthday date -- 生日,最后没有逗号
);
SHOW TABLES;
DESC 表名;
SHOW CREATE TABLE 表名;
查看 day21 数据库中的所有表
use day21;
show tables;
查看student表的结构
desc student;
执行结果:
查看student的创建表的SQL语句
show create table student;
执行结果:
` 存在的目的是为了避免关键字的冲突
CREATE TABLE `student` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`birthday` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE 新表名 LIKE 旧表名;
创建 s1 表,s1 表结构和 student 表结构相同
-- 创建一个 s1 的表与 student 结构相同
create table s1 like student;
desc s1;
DROP TABLE 表名;
DROP TABLE IF EXISTS 表名;
-- 直接删除表 s1 表
drop table s1;
-- 判断表是否存在并删除 s1 表
drop table if exists `create`;
ALTER TABLE 表名 ADD 列名 类型;
为学生表添加一个新的字段remark,类型为varchar(20)
alter table student add remark varchar(20);
执行结果:
ALTER TABLE 表名 MODIFY 列名 新的类型;
将student表中的remark字段的数据类型改成varchar(100)
alter table student modify remark varchar(100);
执行结果:
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
将 student 表中的 remark 字段名改成 intro,类型 varchar(30)
alter table student change remark intro varchar(30);
执行结果:
ALTER TABLE 表名 DROP 列名;
删除student表中的字段intro
alter table student drop intro;
执行结果:
REBANE TABLE 表名 TO 新表名;
将学生表student改名成student2;
rename table student to student2;
ALTER TABLE 表名 CHARACTER SET 字符集;
alter table student2 character set gbk;
用于对表中的记录进行增删改操作
所有字段名都写出来
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
编写字段名
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…);
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
注意:没有添加数据的字段会使用NULL
插入所有的列,向学生表中
insert into student (id,name,age,sex) values (1, '孙悟空', 20, '男');
insert into student (id,name,age,sex) values (2, '孙悟天', 16, '男');
执行效果:
向表中插入所有字段
-- 插入所有列
insert into student values (3, '孙悟饭', 18, '男', '龟仙人洞中');
-- 如果只插入部分列,必须写列名
insert into student values (3, '孙悟饭', 18, '男');
select * from student;
执行效果:
UPDATE 表名 SET 字段名=值; -- 修改所有的行
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
-- 不带条件修改数据,将所有的性别改成女
update student set sex = '女';
-- 带条件修改数据,将 id 号为 2 的学生性别改成男
update student set sex='男' where id=2;
-- 一次修改多个列,把 id 为 3 的学生,年龄改成 26 岁,address 改成北京
update student set age=26, address='北京' where id=3;
5.3删除表记录
DELETE FROM 表名;
DELETE FROM 表名 WHERE 字段名=值;
TRUNCATE TABLE 表名;
truncate相当于删除表的结构,再创建一张空表。
-- 带条件删除数据,删除 id 为 1 的记录
delete from student where id=1;
-- 不带条件删除数据,删除表中的所有数据
delete from student;
查询不会对数据库中的数据进行修改,只是一种显示数据的方式
使用*表示所有列
SELECT * FROM 表名;
查询所有的学生:
select * from student;
查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
查询 student 表中的 name 和 age 列
select name,age from student;
使用别名的好出:显示的时候使用新的名字,并不修改表的结构
对列指定别名
SELECT 字段名1 AS 别名,字段名2 AS 别名... FROM 表名;
对列和表同时指定别名
SELECT 字段名1 AS 别名,字段名2 AS 别名... FROM 表名 AS表别名;
-- 使用别名
select name as 姓名,age as 年龄 from student;
-- 表使用别名
select st.name as 姓名,age as 年龄 from student as st
SELECT DISTINCT 字段名 FROM 表名;
查询学生来自那些地方
-- 查询学生来自于哪些地方
select address from student;
-- 去掉重复的记录
select distinct address from student;
SELECT 列名1 + 固定值 FROM 表名;
SELECT 列名1 + 列名2 FROM 表名;
注意:参与运算的必须是数值类型
准备数据:添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩,查询的时候将数学和英语的成绩相加。
select * from student;
-- 给所有的数学加 5 分
select math+5 from student;
-- 查询 math + english 的和
select * from student;
select *,(math+english) as 总成绩 from student;
-- as 可以省略
select *,(math+english) 总成绩 from student;
如果没有查询条件,则每次查询所有的行。实际应用中,一般要指定查询的条件。对记录进行过滤。
准备数据
创建一个学生表,包含如下列:
CREATE TABLE student3 (
id int, -- 编号
name varchar(20), -- 姓名
age int, -- 年龄
sex varchar(5), -- 性别
address varchar(100), -- 地址
math int, -- 数学
english int -- 英语
);
INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','
杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港
',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
具体操作:
-- 查询 math 分数大于 80 分的学生
select * from student3 where math>80;
-- 查询 english 分数小于或等于 80 分的学生
select * from student3 where english <=80;
-- 查询 age 等于 20 岁的学生
select * from student3 where age = 20;
-- 查询 age 不等于 20 岁的学生,注:不等于有两种写法
select * from student3 where age <> 20; select * from student3 where age != 20;
具体操作:
-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足)
select * from student3 where age>35 and sex='男';
-- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足)
select * from student3 where age>35 or sex='男';
-- 查询 id 是 1 或 3 或 5 的学生
select * from student3 where id=1 or id=3 or id=5;
具体操作:
-- 查询 id 是 1 或 3 或 5 的学生
select * from student3 where id in(1,3,5);
-- 查询 id 不是 1 或 3 或 5 的学生
select * from student3 where id not in(1,3,5);
查询 english 成绩大于等于 75,且小于等于 90 的学生
select * from student3 where english between 75 and 90;
-- 查询姓马的学生
select * from student3 where name like "马%";
-- 查询姓名中包含'德'字的学生
select * from student3 where name like '%德%';
-- 查询姓马,且姓名有两个字的学生
select * from student3 where name like '马_';
什么是单列排序:
只按某一个字段进行排序,单列排序。
-- 查询所有数据,使用年龄降序排序
select * from student order by age desc;
什么是组合排序?
同时对多个字段进行排序,如果第 1 个字段相等,则按第 2 个字段排序,依次类推。组合排序的语法:
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 1 [ASC|DESC], 字段名 2 [ASC|DESC];
-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩升序排序
select * from student order by age desc, math asc;
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询, 它是对一列的值进行计算,然后返回一个结果值。聚合函数会忽略空值 NULL。
SELECT 聚合函数(列名) FROM 表名;
-- 查询学生总数
select count(id) as 总人数 from student;
select count(*) as 总人数 from student;
我们发现对于 NULL 的记录不会统计,建议如果统计个数则不要使用有可能为 null 的列,但如果需要把 NULL也统计进去呢?
IFNULL(列名,默认值)
如果列名不为空,返回这列的值。如果为NULL,则返回默认值。
-- 查询 id 字段,如果为 null,则使用 0 代替
select ifnull(id,0) from student;
我们可以利用 IFNULL()函数,如果记录为 NULL,给个默认值,这样统计的数据就不会遗漏。
select count(ifnull(id,0)) from student;
另外四个聚合函数的用法如下:
-- 查询年龄大于 20 的总数
select count(*) from student where age>20;
-- 查询数学成绩总分
select sum(math) 总分 from student;
-- 查询数学成绩平均分
select avg(math) 平均分 from student;
-- 查询数学成绩最高分
select max(math) 最高分 from student;
-- 查询数学成绩最低分
select min(math) 最低分 from student;
GROUP BY怎么分组的?
将分组字段结果中相同内容作为一组,如按性别将学生分成 2 组。
GROUP BY 将分组字段结果中相同内容作为一组,并且返回每组的第一条数据,所以单独分组没什么用处。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
-- 按性别进行分组,求男Th和女Th数学的平均分
select sex, avg(math) from student3 group by sex;
效果如下:
注意:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的
select sex, count(id) from student3 group by sex;
查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据
-- 对分组查询的结果再进行过滤
SELECT sex, COUNT(*) FROM student3 WHERE age > 25 GROUP BY sex having COUNT(*) >2;
7.3.1having与where的区别
Orders 表数据如下所示,执行如下 SQL 语句,运行结果是?
运行有误,group by 后面不能出现 where,使用 having
INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES
(9,'唐僧',25,'男','长安',87,78),
(10,'孙悟空',18,'男','花果ft',100,66),
(11,'猪八戒',22,'男','高老庄',58,78),
(12,'沙僧',50,'男','流沙河',77,88),
(13,'白骨精',22,'女','白虎岭',66,66),
(14,'蜘蛛精',23,'女','盘丝洞',88,88);
LIMIT是限制的意思,使用LIMIT的作用计算限制查询记录的条数。
-- 查询学生表中数据,从第 3 条开始显示,显示 6 条。
select * from student3 limit 2,6;
分页:比如我们登录京东,淘宝,返回的商品信息可能有几万条,不是一次全部显示出来。是一页显示固定的条数。 假设我们每页显示 5 条记录的方式来分页。
-- 如果第一个参数是 0 可以省略写:
select * from student3 limit 5;
-- 最后如果不够 5 条,有多少显示多少
select * from student3 limit 10,5;
文章浏览阅读169次。GUI编程_p.add(new textfield(10))含义
文章浏览阅读191次。https://codeforces.com/contest/1119/problem/B不改变原数组的值,复制一份,要求1-k连续,则1-mid区间内判断子数组从大到小排序后,每两个相差不大,比较均匀 i+=2倒着的目的是前大后小 能装前一定能装后 尽量装更多的 累积高度和跳着累积高度和,如果<=h 可增加更多的瓶子,否则高度太多瓶子太多,减小瓶子数量const int maxn..._codeforces - 1119b
文章浏览阅读3.4k次,点赞2次,收藏23次。Vue+SpringBoot+Mybatis+Mysql前后端分离案例(二)前端开发main.js代码如下import Vue from 'vue'import App from './App'import router from './router'import axios from 'axios'Vue.prototype.$http= axiosVue.config.prod..._vue3 + element+pringboot + mybatis + mysql导出功能的前后端代码
文章浏览阅读2.5k次,点赞3次,收藏7次。词性标注对比¶LTP 使用的是863词性标注集,其各个词性含义如下表。TagDescriptionExampleTagDescriptionExampleaadjective美丽niorganization name保险公司bother noun-modifier大型, 西式nllocation noun城郊cconjunc..._jieba ltp对比
文章浏览阅读483次。在父组件接收的时候,先把事件注销:Bus.$off(“saveTheme”),然后再接收 mounted(){ Bus.$off("saveTheme") Bus.$on("saveTheme", (themeList) => { console.log(themeList,"子") }) },_为什么使用兄弟组件传参会触发多次接口调用
文章浏览阅读171次。概率论只不过是把常识用数学公式表达了出来。——拉普拉斯目录0. 前言 1. 历史 1.1 一个例子:自然语言的二义性 1.2 贝叶斯公式 2. 拼写纠正 3. 模型比较与贝叶斯奥卡姆剃刀 &nbs..._概率论只不过是把常识用数学公式表 达了出来。”
文章浏览阅读293次。背景:工作中遇到一个实际问题,有一个系统 在完成一个需要很长时间的操作时,系统没做日志,也不提示啥时完成的,只能靠人工去看,这时我就想用软件截图来监测一下。import pyautoguifrom datetime import datetimeimport timewhile True: img = pyautogui.screenshot(region=[1000,500,400,400]) # x,y,w,h print(type(img)) capture__python中每隔一段时间取一张照片
文章浏览阅读1.9k次。Java基础学习整理_"java把\"333ddd\"转化为double"
文章浏览阅读2.2k次。3.1 协议头格式先看一下协议头的全景图,每一个竖线代表一个字节Version: 4比特标记当前报文使用的协议格式,本文件描述的是第4版本。IHL:4比特表示请求头32比特字长度(单位是32比特),它的计算是从第一个字节开始。一个正确的包头最小长度的5。Type of Service:8比特标记发出服务希望的传输质量的参数。这些参数用来指引网络进行包传输时实际参数的选择。某些网络提..._rfc791协议
文章浏览阅读9.1k次,点赞4次,收藏14次。Bee-Box 虚拟机下载及安装 Bee-box官方称呼BWAPP,buggy web Application 这是一个集成了各种常见漏洞和最新漏洞的开源Web应用程序,目的是帮助网络安全爱好者、开发人员和学生发现并防止网络漏洞。包含了超过100种漏洞,涵盖了所有主要的已知Web漏洞,包括OWASPTop10安全风险,最重要的是已经包含了OpenSSL和ShellShock漏洞。..._bee-box
文章浏览阅读433次。JAVA学习T extends Comparable<? super T>的含义是:extends限定范围的上限 即T必须实现了Comparablesuper限定范围的下限,即Comparable的泛型可以是T也可以是T的父类,这个泛型应用于compareTo的参数,也就是允许这个参数类型是T也可以是T的父类针对于该语句,T必须可比较(T extends Comparable),而且这个比较方法可以不是T实现的,可以是T从他的父类中继承过来的(在业务上可以算数)(Comparable_java neptune
文章浏览阅读1.3k次。用sp存取set真是被坑了一大下子!!!//1. 保存set类型数据public static void saveSet(Context context, String key, Set value) { SharedPreferences preferences = context.getSharedPreferences(CommonData.SPNAME, Build.VE_sharedpreferences存储数据没有变化