JavaEE:企业级java开发,web方面
前端:页面展示,本质是数据
后台:连接点,连接数据库,连接前端(控制视图跳转,给前端传递数据)
数据库:存数据
DBMS
DataBasic ManageSystem:数据库管理系统
数据库:存储数据
数据库管理系统:管理和操作数据
MySQL本质是关系型数据库管理系统,将数据保存在不同的表中,MySQL所使用的SQL语言适用于访问数据库的最常用标准化语言。开源的数据库软件,体积小、速度快、总体拥有成本低
连接数据库
1、命令行连接
mysql -uroot -p123456 --连接数据库 update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost'; --修改密码 flush privileges; --刷新权限 --------------------------------------------------------------------- --所有的语句都是分号结尾 show databases; --查看所有的数据库 mysql> use school --use 数据库名 来切换数据库 Database changed show tables; --查看数据库中所有的表 describe students; --describe 表名 显示数据库中所有的表的信息 create database school; --创建一个数据库名,create database 数据库名称 exit; --推出连接 -- 单行注释(SQL的本身注释) /**/多行注释
操作数据库>操作数据库中的表>操作数据库中表的数据
mysql关键字不区分大小写
1、创建数据库
create database if not exists school(库名)
2、删除数据库
drop database if exists school(库名)
3、使用数据库
use 库名
如果表名或者字段名是一个特殊字符,需要带 ``
4、查看数据库
show databases; --查看所有的数据库 show tables; --查看数据库中所有的表
数值
整数:
tinyint 十分小的数据 占1个字节
smallint 较小的数据 占2个字节
mediumint 中等大小的数据 占3个字节
int 标准的整数 占4个字节 常用
bigint 较大的数据 占8个字节
浮点数:
float 浮点数 4个字节
double 浮点数 8个字节
decimal 字符串形式的浮点数(金融计算的时候,一般使用decimal)
字符串
char 字符串固定大小的 0-255
varchar 可变字符串 0-65535 常用
tinytext 微型文本 2^8-1
text 文本串 2^16-1 保存大文本
时间日期
java.util.Date
date YYYY-MM-DD 日期格式
time HH: mm: ss 时间格式
datetime YYYY-MM-DD HH: mm: ss 最常用的时间格式
timestamp 时间戳 1970.1.1到现在的毫秒数 也较为常用
year 年份表示
null
没有值,未知
注意:不要使用NULL进行运算
Unsigned:
不能声明为负数
无符号的整数
zerofill:
0填充的
不足的位数使用0填充 比如:int(3) 5 会变成005
自增
通常理解为自增,自动在上一条记录的基础上+1(默认)
通常用来设计唯一的主键,并且必须为整数类型
可以自定义主键自增的起始值和步长
非空
假设设置为非空,如果不给它赋值,就会报错
默认
设置默认的值
CREATE TABLE IF NOT EXISTS ‘student’ ( ‘id’ INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号', ‘字段名’(单引号为中文) 列类型 属性 索引 注释(注释和默认值的单引号为英文) )
查看创建数据库的语句
show create database school
查看数据库中表的数据
show create table student
查看表的具体信息
desc student
-- 关于数据库引擎 /* 默认使用INNODB MYISAM 早些年使用 */
修改
修改表名
ALTER TABLE ‘student’ RENAME AS teacher ALTER TABLE 旧表名 RENAME AS 新表名
增加表的字段
ALTER TABLE teacher ADD age INT(2)
修改表的字段(重命名,修改约束)modify:修改 change:改变
ALTER TABLE teacher MODIFY age VARCHAR(11) -- 修改约束 ALTER TABLE 表名 MODIFY 字段名 列属性() ALTER TABLE teacher CHANGE age age1 INT(2) -- 字段重命名 ALTER TABLE 表名 CHANGE 旧名字 新名字
删除表的字段
ALTER TABLE teacher DROP age1 ALTER TABLE 表名 DROP 字段名
删除
删除表
DROP TABLE IF EXISTS teacher --DROP TABLE IF EXISTS 表名
数据库管理语言:Database Manage Language
insert into 表名(‘字段名’)values ('值'),数据和字段一一对应
INSERT INTO teacher(‘name’) VALUES('学习')
插入多个字段
--每个字段对应一个数据 INSERT INTO teacher(`‘password’`,`’sex‘`,`‘birthday’`) VALUES ('111222333','女','1999:11:4') --一个字段多个数据 INSERT INTO teacher(`‘password’`) VALUES (‘111222333’),('222333'),('333444')
注意事项
1、字段和字段之间使用英文逗号隔开
2、可以同时插入多条数据,values后面的值,需要使用,用逗号隔开 values(),(),(),()
语法:UPDATE 表名 SET 修改的字符名=‘修改的值’ WHERE 条件 UPDATE `teacher` SET `’name‘`='修改1' WHERE `‘id’`=2 -- 不指定条件的情况下,会改动所有表 修改多个属性,用逗号隔开 UPDATE `teacher` SET `’name‘`='修改2',`‘email’`='1903467504@qq.com' WHERE `‘id’`=2 通过多个条件定位 UPDATE `teacher` SET `’name‘`='修改3' WHERE `‘password’`='123456' AND `’name‘`='学白'
where 的几个特殊条件:
between 2 and 5:2到5之间,包括2和5
and:表示&&
OR:表示||
delete命令
--删除数据 DELETE FROM ‘student’ --删除指定数据 DELETE FROM 'student' WHERE 'id'=2
TRUNCATE命令
作用:完全清空一个数据库表,表的结构和索引约束不会变
TRUNCATE 'student'
相同点:都能删除数据,都不会删除表结构
不同点:truncate之后自增会归零、delete不会影响自增
truncate不会影响事物
数据库查询语言:Database Query Language
关键字:select
-- 查询学生的全部信息 select 字段名 from 表 *表示全部 SELECT * FROM student SELECT * FROM grade -- 查询指定字段 SELECT `studentno`,`subjectno` FROM result -- 别名,给查询结果起一个名字(关键字as) 格式:select 字段名 AS 字段别名,...from 表名 AS 表的别名 SELECT `studentname` AS 学生姓名,`sex` AS 学生性别 FROM student AS 学生表 -- 函数 concat(a,b):拼接 SELECT CONCAT('学生姓名:',studentname) AS 新格式 FROM student
语法:select 字段,... from 表
有的时候,列名字不是那么的见名知意,我们可以起别名(AS) 字段名 AS 别名 表名 AS 别名
查询MySQL系统版本
SELECT VERSION()
加减乘除查询
SELECT 100*2/4+15-20 AS 计算的结果 -- 加减乘除查询
关键字:distinct
作用:去除select语句查询出来的的结果中重复的数据,重复的数据只显示一条
SELECT DISTINCT 'studentNo' FROM result -- 发现重复数据,去重
-- 查询MySQL系统版本 SELECT VERSION() -- 查询自增的步长 SELECT @@auto_increment_increment
数据库中的表达式:文本值,列,NULL,函数计算表达式,系统变量
SELECT 表达式 from 表
作用:检索数据中符合条件的值
逻辑运算符
运算符 | 语法 | 描述 |
---|---|---|
and && | a and b | 逻辑与,两个都为真,结果为真 |
or || | a or b | 逻辑或,其中一个为真,则结果为真 |
Not !(取反) | not a | 逻辑非,真为假,假为真 |
-- 查询考试成绩在80-100分的学生 SELECT `studentno`,`studentresult` FROM result WHERE studentresult>=80 AND studentresult<=100 -- 模糊查询(区间) SELECT studentno,studentresult FROM result WHERE studentresult BETWEEN 90 AND 100 -- 除了1000号学生之外的同学的成绩 SELECT studentno,studentresult FROM result WHERE studentresult !=95 SELECT studentname,sex,phone FROM student WHERE NOT sex=1
模糊查询
比较运算符
运算符 | 语法 | 描述 |
---|---|---|
IS NULL | a is null | 如果操作符为null,结果为真 |
IS NOT NULL | a is not null | 如果操作符为 not null,结果为真 |
between | a between b and c | 如果a在b和c之间,则结果为真 |
Like | a like b | SQL匹配,如果a匹配b,则结果为真 |
In | a in(a1,a2,a3...) | 假设a在a1,a2,a3...其中的某一个值中,结果为真 |
-- like关键字 %(代表0到任意个字符) _(代表一个字符) -- 查询姓张的同学 SELECT `studentno`,`studentname`,`address`,`sex` FROM student WHERE studentname LIKE '张%'; -- 查询名字当中有强的同学 SELECT `studentno`,`studentname`,`address`,`sex` FROM student WHERE studentname LIKE '%张%'; -- In关键字 -- 查询课程时长在100和110小时的克 SELECT `subjectno`,`subjectname`,`classhour` FROM `subject` WHERE classhour IN (110,100) -- null和not null
Join对比
left join、inner join、right join
操作 | 描述 |
---|---|
Inner join | 如果表中至少有一个匹配,就返回行 |
left join | 会从左表中返回所有的值,即使右表中没有匹配 |
right join | 会从右表中返回所有的值,即使左表中没有匹配 |
-- ====================联表查询===================== -- left join Inner join Right join -- join (连接的表)on (判断条件) 连接查询(这是个语法) -- where 等值查询(这是个条件) -- Inner join SELECT s.`studentno`,`studentname`,`address`,`subjectno`,`studentresult` FROM student AS s INNER JOIN result AS r ON s.studentno=r.studentno -- Left join SELECT s.`studentno`,`studentname`,`address`,`subjectno`,`studentresult` FROM student AS s LEFT JOIN result AS r ON s.studentno=r.studentno -- Right join SELECT s.`studentno`,`studentname`,`address`,`subjectno`,`studentresult` FROM student AS s RIGHT JOIN result AS r ON s.studentno=r.studentno -- 查询 SELECT s.`studentno`,`studentname`,`address`,`subjectno`,`studentresult` FROM student AS s LEFT JOIN result AS r ON s.studentno=r.studentno WHERE studentresult IS NULL -- 查询参加了考试的同学信息,包括学号、学生姓名、科目名、分数 /* 思路: 1、分析需求,分析查询的字段来自哪些表 2、确定使用哪种连接查询 3、确定交叉点(这两个表中的哪个数据是相同的) */ SELECT s.`studentno`,`studentname`,`address`,r.`subjectno`,`studentresult`,`subjectname` FROM student AS s RIGHT JOIN result AS r ON s.studentno=r.studentno INNER JOIN `subject` AS sub ON r.subjectno=sub.subjectno
查询数据的语法
1、查询数据:select
2、FROM 表 join 连接的表 on 交叉条件
3、假设存在一种多张表查询,先查询两张表再慢慢查询