目录
1.工作简要
- 与现场人员需求对接,了解现场业务的基本流程和需求改进
- 对现场人员系统的使用指导、故障排查
- 大屏展示安全库存预警方案
- 校招系统需求改善对接
- 校招系统开发文档编写
- 总结数据库MySQL
- 线边补料方案可行性设计
2.工作内容
这里主要写下数据库MySQL学习总结,其他有相关材料
2.1 数据库基本操作
2.1.1 创建数据库
CREATE DATABASE 数据库名;
2.1.2 删除数据库
drop database <数据库名>;
2.1.3 选择数据库
[root@host]# mysql -u root -p
Enter password:******
mysql> use RUNOOB;
Database changed
mysql>
2.1.4 创建数据表
CREATE TABLE table_name (column_name column_type);
2.1.5 删除数据表
DROP TABLE table_name ;
2.1.6 插入数据
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES( value1, value2,...valueN );
2.1.7 查询数据
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
2.1.8 更新数据
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
2.1.9 删除数据
DELETE FROM table_name [WHERE Clause]
2.2 数据表列属性操作
2.2.1 删除表字段
ALTER TABLE table_name DROP column_name;
2.2.2 添加表字段
ALTER TABLE table_name ADD column_name column_type [FIRST | AFTER column_name];
2.2.3 修改表字段
-- 修改表字段类型
ALTER TABLE table_name MODIFY column_name column_type;
-- 修改字段类型
ALTER TABLE table_name CHANGE column_name new_column_name new_column_type;
-- 修改字段默认值
ALTER TABLE table_name ALTER column_name SET DEFAULT value;
-- 删除默认值
ALTER TABLE table_name ALTER column_name DROP DEFAULT;
2.3 范式基础
2.3.1 第一范式
指的是每一列都不能继续再分了,比如“计算机信息科学与工程学院软件1701班”可继续拆分为“计算机信息科学与工程学院”和“软件1701班”
2.3.2 第二范式
部份依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X
在第一范式得基础上,消除部份依赖,即非主属性完全依赖于码
2.3.3 第三范式
设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
在第二范式得基础上,消除传递依赖,比如:
在关系R(学号 ,宿舍, 费用)中,(学号)->(宿舍),宿舍!=学号,(宿舍)->(费用),费用!=宿舍,所以符合传递函数的要求
2.3.4 范式总结
第一范式:简单说 列不能再分
第二范式:简单说 建立在第一范式基础上,消除部分依赖
第三范式:简单说 建立在第二范式基础上,消除传递依赖。
2.4 高级数据
2.4.1 where语句
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据
2.4.2 Like语句
SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
- 可以在 WHERE 子句中使用LIKE子句
- LIKE 通常与 % 一同使用,类似于一个元字符的搜索
- 你可以使用 AND 或者 OR 指定一个或多个条件
- 可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件
2.4.3 order by语句
如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
- 可以使用任何字段来作为排序的条件,从而返回排序后的查询结果
- 可以设定多个字段来排序
- 可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列
- 可以添加 WHERE…LIKE 子句来设置条件
2.4.4 group by语句
GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
2.5 多表查询
2.5.1 INNER JOIN内连接
获取两个表中字段匹配关系的记录,on可用where代替
2.5.2 LEFT JOIN 左连接
获取左表所有记录,即使右表没有对应匹配的记录
2.5.3 RIGHT JOIN 右连接
与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录
2.5.4 natural join自然连接
自动合并重名字段
2.6 视图
有结构无物理存储空间的虚拟表
2.6.1 创建视图
Create view view_name as select …
2.6.2 视图意义
- 逻辑清楚,方便编写SQL语句
- 对外提供有效数据,隐藏关键或无用数据
- 可以有更好的权限控制
2.6.3 视图算法
- undefined:默认算法
- merge(合并):将视图select语句和查询视图select语句合并执行,效率更高
- Temptable(临时表):先执行视图select 在执行外部语句
Create algoritlm=temptable view view_name;
2.7 数据备份与还原
2.7.1 复制表
CREATE TABLE targetTable LIKE sourceTable;
INSERT INTO targetTable SELECT * FROM sourceTable;
2.7.2 备份表
Select */字段 into outfile '文件路径' from 数据源;
Select * into outfile 'D:/server/..' from tab
Files enclosed by '"'--使用双引号包裹
Terminated by ':'--使用竖线分隔字段数据
Lines staeting by 'start'--行处理 from tab1;
2.7.3 还原表
Load data infile 文件路径 into table 表名 files 字段处理 lines 行处理--怎么备份怎么还原
2.7.4 mysqldump
-- 单表备份:
mysqldump -uroot -proot mydatabase my_stu > D:/server.stu.sql;
-- 数据库备份:
mysqldump -uroot -proot mydatabase >D:/server/mydatabase.sql;
-- 还原数据:
mysql -uroot -proot mydatabase < D:/server/stu.sql
-- 还原备份
source D:/server/stu.sql;
2.8 事务
2.8.1 事务四大特性
- Atomic(原子性):事务操作是一个整体不可分割
- Consistency(一致性):事务操作前后数据表数据没有变化
- Isolation(隔离性):事务操作互相不受影响
- Durability(持久性):一旦提交 不可改变
2.8.2 事务操作
1、用 BEGIN, ROLLBACK, COMMIT来实现
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
- SET AUTOCOMMIT=0 禁止自动提交
- SET AUTOCOMMIT=1 开启自动提交
2.8.3 事务控制语句
- BEGIN 或 START TRANSACTION 显式地开启一个事务;
- COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的;
- ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
- SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;
- RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
- ROLLBACK TO identifier 把事务回滚到标记点;
- SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。
2.9 触发器
2.9.1 触发器的分类
-
DML触发器:DML(Data Manipulation Language)触发器是当数据库服务器中发生数据操作语言事件时执行的存储过程。DML触发器又分为两类:After触发器和Instead Of触发器
-
DDL触发器:DDL触发器是在响应数据定义语言(Data Definition Language)事件时执行的存储过程。DDL触发器一般用于执行数据库中管理任务。如审核和规范数据库操作、防止数据库表结构被修改等。
2.9.2 创建触发器
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name
FOR EACH ROW
BEGIN
...
END;
2.11 存储过程
2.11.1 存储过程优缺点
优点
- 存储过程可封装,并隐藏复杂的商业逻辑。
- 存储过程可以回传值,并可以接受参数。
- 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
- 存储过程可以用在数据检验,强制实行商业逻辑等。
缺点
- 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
- 存储过程的性能调校与撰写,受限于各种数据库系统。
2.11.2 存储过程的使用
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
characteristic:
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
[begin_label:] BEGIN
[statement_list]
……
END [end_label]
实例
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
-> BEGIN
-> DELETE FROM MATCHES
-> WHERE playerno = p_playerno;
-> END$$
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter; #将语句的结束符号恢复为分号
mysql> select * from MATCHES;
+---------+--------+----------+-----+------+
| MATCHNO | TEAMNO | PLAYERNO | WON | LOST |
+---------+--------+----------+-----+------+
| 1 | 1 | 6 | 3 | 1 |
| 7 | 1 | 57 | 3 | 0 |
| 8 | 1 | 8 | 0 | 3 |
| 9 | 2 | 27 | 3 | 2 |
| 11 | 2 | 112 | 2 | 3 |
+---------+--------+----------+-----+------+
5 rows in set (0.00 sec)
mysql> call delete_matches(57);
Query OK, 1 row affected (0.03 sec)
mysql> select * from MATCHES;
+---------+--------+----------+-----+------+
| MATCHNO | TEAMNO | PLAYERNO | WON | LOST |
+---------+--------+----------+-----+------+
| 1 | 1 | 6 | 3 | 1 |
| 8 | 1 | 8 | 0 | 3 |
| 9 | 2 | 27 | 3 | 2 |
| 11 | 2 | 112 | 2 | 3 |
+---------+--------+----------+-----+------+
4 rows in set (0.00 sec)
ALTER PROCEDURE PROCEDURE_NAME -- 修改
DROP PROCEDURE PROCEDURE_NAME -- 删除
3.工作总结
本周主要处理系统需求交接问题和了解现场业务流程,在学习上花费的时间较少。
本周已完成:
- MySQL任务学习
- 系统一期现场需求对接
- 了解现场业务流程
- 校招系统第二阶段需求分析
下周目标:
- 学习Java,周五前完成任务
- 校招系统第二阶段开发