第1章 数据库概述

1.1基本概念

1.1.1数据库技术发展阶段

人工管理阶段——>文件系统阶段——>数据库系统阶段

1.1.2涉及的概念

数据库(DB)、数据库管理系统(DBMS)、数据库系统(DBS)

1.1.3经历的阶段

层次数据库和网状数据库(IDS)——>关系数据库(Oracle、DB2、SQL Server、MySQL、Sybase等)——>后关系数据库(面向对象数据库技术(ORDBMS)、结构化数据库技术(NOSQL))

1.1.4提供的功能:

1、数据定义语言(DDL)——>定义各种对象,完整性约束和保密限制等约束等

2、数据操作语言(DML)——>检索(查询)和更新(插入、删除和更新)

3、数据控制语言(DCL)——>数据完整性控制、数据安全性控制和数据库的恢复等

1.2 MySQL数据库管理系统

1.2.1MySQL概述

免费、开源、小型、关系型

1.2.2常用数据库管理系统

Oracle、DB2、SQL Server、PostgreSQL等

第2章 MySQL安装和配置

1、4个比较重要的文件夹:bin、include、lib、share

2、my.ini配置文件:如果修改了配置文件,则必须重新启动MySQL服务,修改的内容才能生效

3、启动和关闭MySQL服务

net start // 查看已启动的服务项

net stop MySQL //停止MySQL服务

net start MySQL //启动MySQL服务

第3章 MySQL数据库基本操作

3.1数据库和数据库对象

1、系统数据库:information_schema、performance_schema、mysql、test

2、用户数据库

3.2创建数据库

CREATE DATABASE database_name

3.3查看和选择数据库

//查看数据库

SHOW DATABASES;

//选择数据库

USE database_name;

3.4删除数据库

DROP DATABASE database_name;

第4章 MySQL数据库中存储引擎和数据类型

4.1认识存储引擎

// 查看所支持的存储引擎

SHOW ENGINES;

SHOW ENGINES \g

SHOW ENGINES \G

SHOW VARIABLES LIKE 'have%';

// 查询默认存储引擎

SHOW VARIABLES LIKE 'storage_engine%';

4.2数据类型

4.2.1整数类型

TINYINT—> (1)、SMALLINT—> (2)、MEDIUMINT—> (3)、INT和INTEGER—> (4)、BIGINT—> (8)

4.2.2浮点数类型、定点数类型和位类型

FLOAT—> (4)、DOUBLE—> (8)

DEC(M,D)和DECIMAL(M,D) —> (M+2)

BIT(M) —>(1-8)

4.2.3日期和时间类型

DATE—> (4)、DATETIME—> (8)、TIMESTAMP—> (4)、TIME—> (3)、YEAR—> (1)

4.2.4字符串类型

CHAR(M) —> (M)、VARCHAR(M) —> (M)

TINYTEXT—> (0-255)、TEXT—> (0-65535)、MEDIUMTEXT、LONGTEXT

BINARY(M) —> (M)、VAR BINARY(M) —> (M)

TINYBLOB—> (0-255)、BLOB—> (0-2^16)、MEDIUMBLOB(0-2^24)、LONGBLOB(0-2^32)

第5章 表的操作

5.1表的基本概念

列(Column)、索引(Index)、触发器(Trigger)

5.2创建表

CREATE TABLE table_name(

属性名 数据类型,

属性名 数据类型,

..…..

属性名 数据类型

) ;

5.3查看表结构

//查看表定义

DESCRIBE table_name;

DESC table_name;

//查看表详细定义

SHOW CREATE TABLE table_name \G

5.4删除表

DROP TABLE table_name;

5.5修改表

5.5.1修改表名

ALTER TABLE old_table_name

RENAME [TO] new_table_name;

5.5.2增加字段

//在表的最后一个位置增加字段

ALTER TABLE table_name

ADD 属性名 数据类型;

//在表的第一个位置增加字段

ALTER TABLE table_name

ADD 属性名 数据类型 FIRST;

//在表的指定字段之后增加字段

ALTER TABLE table_name

ADD 属性名 数据类型

AFTER 属性名;

5.5.3删除字段

ALTER TABLE table_name

DROP 属性名;

5.5.4修改字段

//修改字段的数据类型

ALTER TABLE table_name

MODIFY 属性名 数据类型;

//修改字段的名字

ALTER TABLE table_name

CHANGE 旧属性名 新属性名 旧数据类型;

//同时修改字段的名字和属性

ALTER TABLE table_name

CHANGE 旧属性名 新属性名 新数据类型;

//修改字段的顺序

ALTER TABLE table_name

MODIFY 属性名1 数据类型 FIRST|AFTER 属性名2;

5.7操作表的约束

5.7.1MySQL支持的完整性约束

NOT NULL(NK)、DEFAULT、UNIQUE KEY(UK)、PRIMARY KEY(PK)、AUTO_INCREAMENT、FOREIGE KEY(FK)

//多字段约束

CONSTRAINT 约束名 UNIQUE|PRIMARY KEY|…(属性名,属性名……)

//外键约束

CONSTRAINT 约束名 FOREIGE KEY (属性名1)

REFERENCES 表名 (属性名2)

第6章 索引的操作

6.1 为什么使用索引

根据索引的存储类型:B型树索引(BTREE)和哈希索引(HASH)

MySQL支持6种索引:普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引。

6.2创建和查看索引

6.2.1创建和查看普通索引

//创建表时创建普通索引

CREATE TABLE table_name(

属性名 数据类型,

属性名 数据类型,

……

属性名 数据类型 ,

INDEX|KEY 【索引名】(属性名1 【(长度)】【ASC|DESC】)

) ;

//在已经存在的表上创建普通索引

CREATE INDEX 索引名

ON 表名(属性名【(长度)】【ASC|DESC】)

//通过ALTER TABLE创建普通索引

ALTER TABLE table_name

ADD INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

6.2.2创建和查看唯一索引

UNIQUE INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

CREATE UNIQUE INDEX 索引名

ON 表名(属性名【(长度)】【ASC|DESC】)

ALTER TABLE table_name

ADD UNIQUE INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

6.2.3创建和查看全文索引

只能在存储引擎为MyISAM的数据库表上创建全文索引

CREATE TABLE table_name(

属性名 数据类型,

属性名 数据类型,

……

属性名 数据类型 ,

FUNNTEXT INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

) ENGINE=MyISAM;

CREATE FUNNTEXT INDEX 索引名

ON 表名(属性名【(长度)】【ASC|DESC】)

ALTER TABLE table_name

ADD FUNNTEXT INDEX|KEY 索引名(属性名【(长度)】【ASC|DESC】)

6.2.4创建和查看多列索引

6.3 删除索引

DROP INDEX index_name

ON table_name;

第7章 视图的操作

7.1为什么使用视图

1、对视图内容的更新(添加、删除和修改)直接影响基本表。

2、当视图来自多个基本表时,不允许添加和删除数据。

7.2创建视图

CREATE VIEW view_name

AS 查询语句;

7.3查看视图

//查看视图名

USE view;

SHOW TABLES;

//查看视图详细信息

SHOW TABLE STATUS 【FROM db_name】【LIKE 'pattern'】

例:SHOW TABLE STATUS FROM view \G

//查看视图定义信息

SHOW CREATE VIEW view_name \G

//查看视图设计信息

DESCRIBE|DESC view_name;

7.4 删除视图

DROP VIEW view_name 【,view_name】…

7.5修改视图

CREATE OR REPLACE VIEW view_name

AS 查询语句;

ALTER VIEW view_name

AS 查询语句;

7.6利用视图操作基本表

第8章 触发器的操作

8.1为什么使用触发器

触发器(TRIGGER)

8.2创建触发器

8.2.1创建有一条执行语句的触发器

CREATE TRIGGER trigger_name

BEFORE|AFTER trigger_EVENT

ON table_name FOR EACH ROW trigger_STMT

8.2.2创建包含多条执行语句的触发器

DELIMITER $$

CREATE TRIGGER trigger_name

BEFORE|AFTER trigger_EVENT

ON table_name FOR EACH ROW

BEGIN

trigger_STMT

END

$$

DELIMITER ;

8.3查看触发器

SHOW TRIGGERS \G

//通过查看系统表查看触发器

USE information_schema;

SELECT * FROM triggers \G

8.4删除触发器

DROP TRIGGER trigger_name;

第9章 数据的操作

9.1插入数据记录

//插入完整数据记录

INSERT INTO table_name(field1,field2,…)

VALUES(value1,value2,…)

//插入数据记录一部分

//插入多条数据记录

//插入查询结果

9.2更新数据记录

//更新特定数据记录

UPDATE table_name

SET field1=value1,

Field2=value2,

……

WHERE CONDITION;

9.3删除数据记录

DELECT FROM table_name

WHERE CONDITION;

第10章 单表查询数据记录

10.1简单数据记录查询

SELECT field1, field2, ……, fieldn

FROM table_name

//避免重复查询记录

SELECTDISYINCTfield1, field2, ……, fieldn

FROM table_name

10.2条件数据记录查询

SELECT field1, field2, ……, fieldn

FROM table_name

WHERE CONDITION

关键字:(NOT) BETWEEN AND、(NOT) IS NULL、(NOT) IN、(NOT) LIKE'_'、'%

10.3排序数据记录查询

SELECT field1, field2, ……, fieldn

FROM table_name

WHERE CONDITION

ORDER BY fieldm1 [SAC|DESC] [,fieldm2 [SAC|DESC], ]

10.4限制数据记录查询数量

SELECT field1, field2, ……, fieldn

FROM table_name

WHERE CONDITION

LIMIT OFFSET_START, ROW_COUNT

OFFSET_START: 数据记录的起始偏移量(可不指定,默认为0)

ROW_COUNT: 显示的行数

10.5统计函数和分组数据记录查询

COUNT()、AVG()、SUM()、MAX()、MIN()

如果所操作的表中没有任何数据记录,则COUNT()函数会返回数据0,而其它函数则会返回NULL

//简单分组查询(显示每组中的一条数据记录)

SELECT function()

FROM table_name

WHERE CONDITION

GROUP BY field;

//实现统计功能分组查询:GROUP_CONTACT() 显示每个分组中的指定字段值

SELECT GROUP_CONTACT(field)

FROM table_name

WHERE CONDITION

GROUP BY field;

//实现多个字段分组查询

SELECT GROUP_CONTACT(field), function(field)

FROM table_name

WHERE CONDITION

GROUP BY field1, field2……, fieldn ;

//实现HAVING子句限定分组查询

SELECT function(field)

FROM table_name

WHERE CONDITION

GROUP BY field1, field2……, fieldn ;

HAVING CONDITION;

第11章 多表数据记录查询

11.1关系数据操作

并、笛卡尔积、内连接(自然连接、等值连接、不等连接)、外连接(左外连接、右外连接、全外连接)

11.2内连接查询

SELECT field1, field2, ……, fieldn

FROM join_tablename1 INNER JOIN join_tablename2【INNER JOIN join_tablename】

ON join_condition

11.3外连接查询

SELECT field1, field2, ……, fieldn

FROM join_tablename1 LEFT|RIGHT|FULL [OUTER] JOIN join_tablename2

ON join_condition

11.4合并查询数据记录

UNION、UNION ALL

11.5子查询

//带有关键字ANY的子查询:

=ANY

>ANY (>=ANY)

 比子查询中返回数据记录中最小的还要大于(大于等于)数据记录

//带有关键字ANY的子查询:

=ALL

>ALL (>=ALL) 比子查询中返回数据记录中最大的还要大于(大于等于)数据记录

第12章 使用MySQL运算符

12.1为什么要使用运算符

12.2使用算术运算符

+、-、*、/(DIV)、%(MOD)

12.3使用比较运算符

>、)、!=(<>)、>=、<=、BETWEEN AND、IS NULL、IN、LIKE、REGEXP (正则表达式匹配)

12.4使用逻辑运算符

AND(&&)、OR(||)、NOT(!)、XOR

12.5使用位运算符

&、|、-、^、<>

第13章 使用MySQL常用函数

13.1使用字符串函数

13.1.1合并字符串函数:CONCAT(S1,S2,…,SN)和CONCAT_WS(sep, S1,S2,…,SN)

13.1.2比较字符串大小函数:STRCMP(str1,str2)

13.1.3获取字符串长度函数:LENGTH()和字符数函数:CHAR_LENGTH()

13.1.4字母大小写转换:UPPER()和LOWER()

UCASE()和LCASE()

13.1.5查找字符串:

FIND_IN_SET(str,str1)和FIELD(str,str1, str2,str3)

LOCATE(str,str1)、POSITION(str IN str1)、INSTR(str,str1)

ELT(n,str1,str2)

MAKE_SET(num,str1,str2…,strn)

LEFT(str,num)和RIGHT(str,num)、SUBSTRING(str,num,len)和MID(str,num,len)

LTRIM(str)、RIGHT(str)、TRIM(str)

INSERT(str,pos,len,newstr)、REPLACE(str,substr,newstr)

13.2使用数值函数

ABS(x)、CEIL(x) 、FLOOR(x)、MOD(x)、RAND()、ROUND(x,y)、TRUNCATE(x,y)、

13.3使用日期和时间函数

CURDATE()、CURTIME()、NOW()、UNIX_TIMESTAMP(date)、FROM_UNIXTIME()、

WEEK(date)、YEAR(date)、HOUR(time)、MINUTE(time)、MONTHNAME(date)

13.4使用系统信息函数

VERSION()、DATABASE()、USER()、LAST_INSERT_ID()

第14章 存储过程和函数的操作

14.1为什么使用存储过程和函数

简单、高性能

14.2创建存储过程和函数

//创建存储过程语法形式

CREATE PROCEDURE procedure_name([procedure_parameter[,…]])

[charaxteristic…] routine_body

//创建函数语法形式

CREATE FUNCTION function_name([function_parameter[,…]])

[charaxteristic…] routine_body

14.3关于存储过程和函数的表达式

14.3.1操作变量

//声明变量

DECLARE var_name [,…] type [DEFAULT value]

//赋值变量

SET var_name=expr[,…]

//通过"SELECT……INTO"实现

SELECT field_name[,…] INTO var_name[,…]

FROM table_name

WHERE condition

例:

DECLARE employee_sal INT DEFAULT 1000;

SET employee_sal=3500;

或者:

SELECT sal INTO employee_sal

FROM t_employee

WHERE empno=7565;

14.3.2操作条件

定义条件、定义处理程序

14.3.3使用光标

//声明光标

DECLARE cursor_name CURSOR FOR select_statement;

//打开光标

OPEN cursor_name;

//使用光标

FETCH cursor_name INTO var_name [,var_name]…

//关闭光标

CLOSE cursor_name;

14.3.4使用流程控制

条件控制语句:IF、CASE

循环控制语句:LOOP、WHILE、REPEAT(退出循环体:LEAVE)

14.4查看存储过程和函数

SHOW PROCEDURE STATUS [LIKE 'pattern' ] \G

SHOW FUNCTION STATUS [LIKE 'pattern' ] \G

//通过查看系统表information_schema_routines实现查看存储过程和函数的信息

USE information_schema;

SELECT * FROM routines \G

//SHOW CREATE语句

SHOW CREATE PROCEDURE proce_name \G

SHOW CREATE FUNCTION func_name \G

14.5修改存储过程和函数

ALTER PROCEDURE procedure_name

[characteristic…]

ALTER FUNCTION function_name

[characteristic…]

14.6删除存储过程和函数

DROP PROCEDURE proce_name;

DROP FUNCTION func_name;

第15章 MySQL安全性机制

15.1MySQL软件所提供的权限

15.1.1系统表mysql.user

该表有39个字段,可分为4类:用户字段、权限字段、安全字段和资源控制手段

15.1.2系统表mysql.db和mysql.host

可分为2类:用户字段和权限字段

15.1.3其它权限表

mysql.tables_priv、mysql.columns_priv、procs_priv

15.2MySQL所提供的用户机制

15.2.1登陆和退出

mysql -h hostname|hostIP -p port -u usename -p DatabaseName -e "SQL语句";

EXIT|QUIT

15.2.2创建普通用户账户

1、执行"CREATE USER"语句来创建用户账户

CREATE USER username[IDENTIFIED BY [PASSWORD] 'password']

[ , username[IDENTIFIED BY [PASSWORD] 'password']]

……

[ , username[IDENTIFIED BY [PASSWORD] 'password']]

2、执行INSERT语句创建用户

INSERT INTO user(Host, User, Password) Values('hostname', 'username', PSAAWORD('password'));

FLUSH PRIVILEGES;//使新建的用户账号生效

3、执行GRANT语句创建用户

GRANTpriv_typeONdatabasename.tablename

TOusename[IDENTIFIED BY [PASSWORD] 'password']

[ , username[IDENTIFIED BY [PASSWORD] 'password']]

……

[ , username[IDENTIFIED BY [PASSWORD] 'password']]

15.2.3利用拥有超级权限用户root修改用户账号密码

1、通过mysqladmin命令修改root用户密码

mysqladmin -u usename -p password "new_password"

2、通过SET命令修改root用户密码

SET PASSWORD=PASSWORD("new_password")

3、更新系统表mysql.user数据记录修改root用户密码

UPDATE user SET password=PASSWORD("new_passwprd")

WHERE user="root" AND host="localhost";

15.2.4利用root用户修改普通用户账号密码

GRANT SELECT,CREATE.DROP ON *.*

TO 'qian'@'localhost' IDENTIFIED BY 'new_passwprd'

WITH GRANT OPTION;

15.2.5删除普通用户账号

DROP USER user1 [,user2]…

//通过系统表mysql.user删除

DELETE FROM user

WHERE user="cjgong" AND host="localhost";

15.3权限管理

GRANTpriv_type ON database.table

TO user [IDENTIFIED BY [PASSWORD] 'passwprd']

[, user [IDENTIFIED BY [PASSWORD] 'passwprd']]

……

[WITH GRANT OPTION…..]

//查看用户所拥有权限

SHOW GRANTS FOR user

//收回用户所拥有权限

REVOKEpriv_type ON database.table

TO user [IDENTIFIED BY [PASSWORD] 'passwprd']

[, user [IDENTIFIED BY [PASSWORD] 'passwprd']]

……

第16章 MySQL日志管理

16.1MySQL所支持的日志

二进制日志、错误日志、查询日志

第17章 MySQL数据库维护和性能提高

17.1MySQL数据库维护

17.1.1通过复制数据文件实现数据备份

只适合存储引擎为MyISAM的表

17.1.2通过命令mysqldump实现数据备份

//备份一个数据库

mysqldump -u username -p dbname

table1 table2…tablen

>backupname.sql

//备份多个数据库

mysqldump -u username -p --databases

dbname1 dbname2…dbnamen

>backupname.sql

//备份所有数据库

mysqldump -u username -p --all -databases

>backupname.sql

17.1.3通过复制数据文件实现数据还原

17.1.4通过命令MySQL实现数据还原

mysqldump -u username -p [dbname] < backupname.sql

17.1.5实现数据库中表导出成文本文件

//通过SELECT…INTO OUTFILE

SELECT [file_name] FROM table_name

[WHERE contion]

INTO OUTFILE 'FILE_NAME'

[OPTION]

//通过mysqldump命令

mysqldump -u root -pPassword -T file_dorectory dbname table_name [option]

//通过mysql命令

mysql -u root -pPassword -e "SELECT [file_name] FROM table_name" dbname > file_name

17.1.6实现文本文件导入到数据库表

//执行"LOAD DATA INFILE"命令

LOAD DATA [LOCAL] INFILE 'file_name' INTO TABLE table_name [OPTION];

//执行mysqlimport命令

mysqlimport -u root -pPassword [--LOCAL] dbname file_name [OPTION];

mysql数据应用从入门_《MySQL数据库应用从入门到精通》相关推荐

  1. MySql数据库主键外键与数据库设计

    MySql数据库主键外键与数据库设计 首先要指出的: 列.字段.属性是一个概念 行.记录.元组是一个概念 MySQL数据库CONSTRAINT约束:非空约束,唯一约束,主键约束,外键约束 show c ...

  2. iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门

    iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门 文章目录 iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门 PDF报表入门 3 ...

  3. mysql数据没有同步更新_解决MySQL的主从数据库没有同步的两种方法

    问题 今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show master statu ...

  4. mysql数据备份合理计划_计划备份mysql数据库

    1:mysql是我们使用最多的数据库,如果在日常中正确的对mysql数据进行备份,下面我们就来做这事,通过脚本来实现 ######################################### ...

  5. 低版本mysql数据导入高版本_将高版本mysql数据库的数据导入低版本mysql中

    前言 最近做了个网站,准备放到虚拟主机上的时候,发现本地数据库是mysql5.6,服务器上的mysql是5.0的.于是尝试导出数据,结果,导入的数据不是出错,就是各种乱码.折腾了好久之后,终于找到了解 ...

  6. ubuntu mysql数据储存在哪里_如何更改在Ubuntu下的MySQL数据库存储位置?

    在默认的数据库存储位置下就会有个文件夹mysqldb.要操作数据库首先得停止数据库进程: $sudo /etc/init.d/mysql stop 本文以转移到/home/mysql这个位置为例,下面 ...

  7. mysql 添加多条数据类型_向数据库添加多条数据类型

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. mysql rpo是什么意思_揭开数据库RPO等于0的秘密(上)

    前言 传统商业关系数据库都声称可以做到故障恢复后不丢数据(即RPO为0),跟故障前的数据状态是强一致的,实际是否一定如此? 开源数据库MySQL在金融核心业务都不敢用,最重要的一个原因是做不到不丢数据 ...

  9. linux mysql 数据文件,Linux下修改MySQL数据库数据文件路径的步骤

    使用rpm安装方式安装完MySQL数据库后,数据文件的默认路径为/var/lib/mysql,然而根目录并不适合用于存储数据文件. 原路径:/var/lib/mysql 目标路径:/home/mysq ...

  10. mysql数据意外删了怎么办_MySQL数据库意外崩溃导致表数据文件损坏无法启动怎么办...

    MySQL数据库意外崩溃导致表数据文件损坏无法启动怎么办 发布时间:2020-07-20 13:45:46 来源:亿速云 阅读:57 作者:小猪 这篇文章主要为大家展示了MySQL数据库意外崩溃导致表 ...

最新文章

  1. 用IIS建立的.net网站通过IP地址不能访问解决方法
  2. 【pmcaff】麦肯锡:预测2025年将出现的12大颠覆技术【图】
  3. java下包内继承时编译不过解决方案
  4. 办公效率:从事会计行业,这些Excel技巧绝对用得着!
  5. JMeter使用总结
  6. 三层交换和二层交换之间的端口聚合
  7. 文章根据时间段显示的微信名和微信号
  8. 花椒前端基于WebAssembly 的H.265播放器研发
  9. 9008刷机模式写入超时刷机帮_高通9008模式刷机,让小米刷机不再畏惧
  10. eclipse安装中文版插件
  11. python全栈马哥_马哥2018python全栈视频
  12. fastreport 横向布局_FastReport.net 系列-----FastReport基本操作介绍(数据绑定,页面布局)...
  13. 巨头发力,社区电子商务发展加速
  14. join and list删除 and set集合 and 深浅拷贝
  15. 指派问题——匈牙利法
  16. 计算机选择题在线,计算机考试选择题
  17. ArabellaCPC 2019 B. Road to Arabella
  18. 计算机网络-数据链路层(广域网及相关协议(PPP协议帧格式,HDLC协议)数据链路层设备(网桥,交换机))
  19. 《Unity着色器和屏幕特效开发秘笈》—— 第3章 利用镜面反射让游戏闪耀起来...
  20. React.js -学习总结1

热门文章

  1. 12306减压只需人员分流
  2. php插件之家,ThinkPHP中的行为扩展和插件总结
  3. pscad仿真 采用pscad搭建220kv三相空载输电线路,仿真合空线,切空线过电压
  4. 一个个人开发者和他的模拟经营梦
  5. 微信小程序 —— 快递查询Demo(入门)
  6. 07-项目训练_取件
  7. 抖音账号养号技巧揭秘
  8. touch.js 移动端的手势识别
  9. Java经典算法——窃贼问题
  10. 用python写一个推箱子游戏