MySQL是数据库工具,非常常用,我们通常会把网站用到的数据存储在MySQL中,MySQL的使用不仅方便而且简单易学,来看看如何使用MySQL创建数据库。
安装:
首先要安装MySQL,并且配置信息。创建一个快捷键到桌面上,双击软件,打开软件,界面如下图所示,什么都没有,我们要先创建一个连接。
创建连接:
文件—》新建连接,如下图所示,会弹出一个对话框,信息好填写正确。
测试连接:
在弹出的新建连接对话框中要填写好连接名、主机名、端口、用户名和密码,填写好之后,单击“测试连接”,弹出“连接成功”,就按确定。
填写内容:
会看到左边出现了我们刚才创建的连接,里面有很多的数据,我们可以右击连接,选择新建数据库。填写数据库的名称和字符编码。
新建表
最终结果如图所示,还可以右击数据库,选择新建表。
1.首先,我们需要打开电脑上的Navicat for MySQL快捷键。这样就可以查看数据库了。
2.然后,我们点击root打开之后,单击core_db,在展开的选项中可以看到表。
3.我们点击“表”后可以看到数据库中的所有表,我们右击表弹出的选项中有一个“导出向导”
4.我们点击导出向导就会弹出导出的页面,第一个页面提示我们要使用哪一种导出格式。
因为我们是导出到EXCEL表中,所以选择导出的格式为.xls,然后单击“下一步”
5.第二个小步骤中,我们需要勾选需要导出的表,并设置导出文件所在位置,然后点击下一步6.我们可以选择需要导出的表中的哪些数据,默认的是全部栏位。选好之后,单击下一步。
7.点击下一步之后,我们再次点击下一步,然后点击弹出的窗口的右下角的“开始”按钮,就开始导出了。8.导出之后,会继续提示我们已经导出成功,然后我们只需要点击关闭按钮,在相应的位置寻找excel表格即可。打开之后就会看到之前在数据库中存储的数据。
下一个Navicat,直接就可以再界面给注释。
1、下载并安装Navicat for MySQL;
2、设计表,选中表,反键设计表;
3、选中某个字段,下面对应一栏Comment,在此添加你的备注即可。 非常方便,修改也很简单。
以MySql为例:
现在需求是把sex为 ‘1’ 的数据的headpicture改为‘1.webp’,sex为‘0’的数据的headpicture改为‘0.webp’。
修改语句:
update t_user set t_user.headpicture= REPLACE (headpicture,’3′,’1.webp’) where t_user.sex=’1′;
这种方法适用于原headpicture字段值不为空的情况下。我的原数据是空,用这种方法还要先给headpicture赋值。
‘t_user’是表名,’headpicture’是要修改的字段名,replace(修改后的字段名,’被修改的内容’,’修改后的内容’),where后可以设置一些修改的前提条件。
总感觉上述方法比较笨,不应该这么复杂的,于是就找到了一个可以直接修改,无视空值的方法是:
update t_user set headpicture =’0.webp’ where sex =’0′;
自己使用MyEclipse/Eclipse 的经验分享下:
Myeclipse/Eclipse相关准备
相关软件准备
在使用开发软件进行开发的时候,首先需要准备安装相关软件。使用Myeclipse/Eclipse 则需要安装JDK。如果需要使用服务器,则需要安装tomcat。关于这些软件,我这里已经都准备好了,Eclipse 、 Myeclipse 破解版(破解说明相关文档已经准备,这里就不细说了)、JDK、Tomcat、MySQL、Maven等一些软件。
环境配置
将相关软件下载下来之后,成功安装了 Eclipse /Myeclipse、JDK之后,首先配置java环境,如果使用eclipse则必须配置,不然无法打开。
Java环境配置
在“环境变量”的“系统变量”选项新建系统变量:JAVA_HOME,值为:C:\Program Files\Java\jdk1.7.0(填写你的JDK路径即可)。在系统变量中找到变量“PATH”,双击打开,把以下代码加到变量值末尾:“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”(注意最前的”;”不能少 。
说明:
1,.表示当前路径,%JAVA_HOME%就是引用前面指定的JAVA_HOME;
2,JAVA_HOME指明JDK安装路径,此路径下包括lib,bin,jre等文件夹,tomcat,eclipse等的运行都需要依靠此变量。
3,PATH使得系统可以在任何路径下识别java命令。
配置成功之后,在dos界面输入 java -version 可以查看信息。
Tomcat环境配置
如果使用Tomcat,环境配置和配置JDK几乎一样。顺便也说一下,其它的环境配置大致也是这种模式。 新建 TOMCAT_HOME,选择Tomcat的路径 ,如 E:\Program Files (x86)\apache-tomcat-7.0.81。然后将TOMCAT_HOME加入到path变量中。这段代码加入到path中 “;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;” (注意最前的”;”不能少 )。 配置成功后,在tomcat / bin 目录下 双击 startup.bat 启动tomcat ,启动成功后,在浏览器输入: localhost:8080 ,成功出现tomcat界面则成功,失败则检查环境配置。
这段代码,将8080更改为你想更改的端口,保存重启就更改成功了。
MyEclipse/Eclipse 使用
在相关准备做完之后,打开MyEclipse/Eclipse 之后,第一件事是确认工作空间,这点建议选择在非 C盘目录就行。进入之后,首先更改工作空间的编码格式(很重要)。
设置工作空间编码格式
点击Windows → preference → WorkSpace 或者搜索workspace 选择编码格式,默认为GBK,不过选择UTF-8为好。
成功更改工作空间编码之后,如果对默认字体不适应,可以选择更改字体。
更改字体
点击Windows → preference → General →Appearence → Color and Fonts → Basic 或者搜索Colors and fonts 选择 Text font ,点击Edit编辑,就可以更改字体了,选择合适的就行。
字体设置完之后,最好顺便设置下注释模版,注释模版就是在使用/** */这种注释的时候,会自动按照所设置的注释模版注释。注释是个好习惯。
设置注释模版
Class类的注释模板
打开Eclipse/MyEclipse工具,点击 Window->Preferences弹出首选项设置窗口,Java->Code Style->Code Template选项列表,点击Types。
可以输入/**,然后回车或按shift+alt+j快捷键补齐注释内容。
Getter/Setter注释模板
下载该class文件后,地址: http://download.csdn.net/download/qazwsxpcm/9995959 1.找到MyEclipse/Eclipse中的org.eclipse.jdt.ui_*.jar(*是版本号)文件,直接在MyEclipse/Eclipse搜索org.eclipse.jdt.ui
/**
获取${bare_field_name}
@return ${bare_field_name} */
设置setters为:
/**
设置${bare_field_name}
@param ${field_type} ${bare_field_name} / 。 然后在POJO类中的私有变量设置 这种注释/* / ,然后生成get/set方法就可以自动生成注释了。生成get/set方法的时候勾上Generate method comments。 如: /* 编号*/ private int id;
toString 注释模板 在pojo类中,右键source→Generate toString 然后编辑Edit 新建一个名为Map格式的toString模板
模板格式 Map: {“m e m b e r . n a m e ( ) ” : ” {member.name()}”:”member.name()”:”{member.value}”,”${otherMembers}”} 默认格式: o b j e c t . c l a s s N a m e [ {object.className} [object.className[{member.name()}=${member.value}, ${otherMembers}]
没有一定非要使用这种模版,使用自己喜欢就行,不过描述和创建者最好保留。
这些设置完之后,接着设置JDK以及Tomcat。至于其它的,以后再说吧。
JDK相关配置
导入JDK
点击Windows → preference→JAVA→Installed JREs 点击add ,选择JDK的安装路径,然后勾选上就行了。
设置JDK版本
点击Windows → preference → Java →Compiler 然后选择相应的版本就行。
添加Tomcat
Myeclipse
点击Windows → preference →MyEclipse →Server → Tomcat 或者搜索tomcat 选择tomcat的版本并导入响应版本的tomcat [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UI19bBbQ-1570614256848)(https://img-blog.csdn.net/20170923110127696?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWF6d3N4cGNt/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]
Eclipse
点击Windows → preference →Server → Runtime 点击add 选择tomcat的路径,添加进来就行了
添加来了之后,需要在server窗口新建 ,然后选择添加的tomcat就行。
这些配置完之后,那么简单的说下MyEclipse/Eclipse小图标的作用吧! 如图:
这些大致了解之后,那么进行相关的开发以及快捷键的说明吧。
新建项目
右键空白处或者点击File。Java开发新建的项目一般含有project,那么开始学习的时候,新建一个web project 吧。
项目成功建立之后,项目的目录结构如图所示:
新建class
那么我们先来新建一个包,然后再包中再来新建class类。 右键src,先选择Package,输入包名,一般以com.开头,如com.pcm.test 。 然后再新建class类,因为要运行该类,所以勾上main方法。
然后点击Finsh,成功创建类。创建之后,首先写注释,描述这个类是干嘛的(养成这个习惯吧!)。 用我们之前设置好的模版,输入/** 然后回车,然后再main方法里面写一个 “Hello Word”。 顺便在这里推荐一个非常实用的快捷键 Alt+/ ,该快捷键是对代码进行辅助功能。如: 我要输入 System.out.println(); 代码 输出文本,这样就直接敲打有点费时,我们可以输入 sysout 然后按 Alt+/ 就可以快速的编写了。还有调用方法的时候也可以使用。这里就不细说了。 编写main方法之后,右键 Run As 选择 Java Application 便可以直接运行。在Console可以看到打印信息。顺便说下代码下面的这些这些窗口可以在windows → show view 中 添加
Debug 模式
在学习或者工作中,肯定会遇到各种问题,这是就需要调试。在Myeclipse/eclipse 中则就是debug。先来说下class类中直接使用debug模式吧。 在main方法中,直接右键Debug As 运行就好了。如果是在tomcat中运行,tomcat运行选择Debug Server就行了。 对了,在这之前要设置断点。程序运行就好比汽车从起点跑到终点,那么断点可以理解为站点。设置断点的时候,顺便将行号开启吧。
显示行号
右键代码最左边,选中Show line Number。
设置断点: 双击行号会出现一个小点,就成功设置断点了。 取消断点: 双击设置的断点就取消了。
进入debug模式中的相关使用: F5 进入该方法 ,F6执行下一步,F8跳到下一个设置的断点,没有就直接运行完。
虽然使用断点很方便调试,但是在不用的时候记得取消。如果断点过多, 但是又不想取消,可以屏蔽断点。
屏蔽断点
直接使用run–>Skip all Breakpoints。就 可 以取消所有的断点 ,或者点击 运行旁边的小图标。
导入导出项目
导入项目
在项目框右键import,选择General→Existing projects to workspace,然后选择项目的路径。如果是maven项目,则是用mavan导入就行。至于是否copy到工作空间,这看个人选择。
导出项目
如果只是项目普通的导出,那就直接右键项目,选择copy就行。如果是要在tomcat部署或者导出为架包,则选择war和jar方式导出。
切换工作空间
File→ switch workspace 然后选择要切换的路径。切换之后,myeclipse/eclipse回重启。
如果将项目放到tomcat并且成功运行,可以使用这几种方法。
Tomcat添加项目
一、在server窗口中添加
选择tomcat,右键Add Deployment,选择要添加的项目,然后点击Finsh就OK了。
二、点击上面的图标添加
成功部署项目之后,启动tomcat,然后在浏览器输入 IP+端口+项目名,如:http://localhost:8080/FirstProject/ 。 便可以看到设计的界面。因为新建的web project,会显示index.jsp中的界面。
好了,基本的运作大致说完了。
存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批件,虽然它们的作用不仅限于批处理。 存储过程就是有业务逻辑和流程的集合, 可以在存储过程中创建表,更新数据, 删除等等。 你可以理解为用sql语句开发的一个 类和函数。为什么要使用存储过程通过把处理封装在容易使用的单元中,简化复杂的操作(正如前面例子所述)。由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。
1.ctrl+q 打开查询窗口
2.ctrl+/ 注释sql语句
3.ctrl+shift +/ 解除注释
4.ctrl+r 运行查询窗口的sql语句
5.ctrl+shift+r 只运行选中的sql语句
6.F6 打开一个MySQL命令行窗口
7.ctrl+l 删除一行
8.ctrl+n 打开一个新的查询窗口
9.ctrl+w 关闭一个查询窗口
在日常查询中,索引或其他数据查找的方法可能不是查询执行中最高昂的部分,例如:MySQL GROUP BY 可能负责查询执行时间 90% 还多。MySQL 执行 GROUP BY 时的主要复杂性是计算 GROUP BY 语句中的聚合函数。UDF 聚合函数是一个接一个地获得构成单个组的所有值。这样,它可以在移动到另一个组之前计算单个组的聚合函数值。当然,问题在于,在大多数情况下,源数据值不会被分组。来自各种组的值在处理期间彼此跟随。因此,我们需要一个特殊的步骤。
处理 MySQL GROUP BY让我们看看之前看过的同一张table: mysql> show create table tbl G *************************** 1. row *************************** Table: tbl Create Table: CREATE TABLE `tbl` ( `id` int(11) NOT NULL AUTO_INCREMENT, `k` int(11) NOT NULL DEFAULT ‘0’, `g` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), KEY `k` (`k`) ) ENGINE=InnoDB AUTO_INCREMENT=2340933 DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
并且以不同方式执行相同的 GROUP BY 语句:
1、MySQL中 的 Index Ordered GROUP BY
mysql> select k, count(*) c from tbl group by k order by k limit 5;
+—+—+
| k | c |
+—+—+
| 2 | 3 |
| 4 | 1 |
| 5 | 2 |
| 8 | 1 |
| 9 | 1 |
+—+—+
5 rows in set (0.00 sec)
mysql> explain select k, count(*) c from tbl group by k order by k limit 5 G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tbl
partitions: NULL
type: index
possible_keys: k
key: k
key_len: 4
ref: NULL
rows: 5
filtered: 100.00
Extra: Using index
1 row in set, 1 warning (0.00 sec)
在这种情况下,我们在 GROUP BY 的列上有一个索引。这样,我们可以逐组扫描数据并动态执行 GROUP BY(低成本)。当我们使用 LIMIT 限制我们检索的组的数量或使用“覆盖索引”时,特别有效,因为顺序索引扫描是一种非常快速的操作。
如果您有少量组,并且没有覆盖索引,索引顺序扫描可能会导致大量 IO。所以这可能不是最优化的计划。
2、MySQL 中的外部排序 GROUP BY
mysql> explain select SQL_BIG_RESULT g, count(*) c from tbl group by g limit 5 G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tbl
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 998490
filtered: 100.00
Extra: Using filesort
1 row in set, 1 warning (0.00 sec)
mysql> select SQL_BIG_RESULT g, count(*) c from tbl group by g limit 5;
+—+—+
| g | c |
+—+—+
| 0 | 1 |
| 1 | 2 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
+—+—+
5 rows in set (0.88 sec)
如果我们没有允许我们按组顺序扫描数据的索引,我们可以通过外部排序(在 MySQL 中也称为“filesort”)来获取数据。你可能会注意到我在这里使用 SQL_BIG_RESULT 提示来获得这个计划。没有它,MySQL 在这种情况下不会选择这个计划。
一般来说,MySQL 只有在我们拥有大量组时才更喜欢使用这个计划,因为在这种情况下,排序比拥有临时表更有效(我们将在下面讨论)。
3、MySQL中 的临时表 GROUP BY
mysql> explain select g, sum(g) s from tbl group by g limit 5 G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tbl
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 998490
filtered: 100.00
Extra: Using temporary
1 row in set, 1 warning (0.00 sec)
mysql> select g, sum(g) s from tbl group by g order by null limit 5;
+—+——+
| g | s |
+—+——+
| 0 | 0 |
| 1 | 2 |
| 4 | 4 |
| 5 | 5 |
| 6 | 12 |
+—+——+
5 rows in set (7.75 sec)
在这种情况下,MySQL 也会进行全表扫描。但它不是运行额外的排序传递,而是创建一个临时表。此临时表每组包含一行,并且对于每个传入行,将更新相应组的值。很多更新!虽然这在内存中可能是合理的,但如果结果表太大以至于更新将导致大量磁盘 IO,则会变得非常昂贵。在这种情况下,外部分拣计划通常更好。请注意,虽然 MySQL 默认选择此计划用于此用例,但如果我们不提供任何提示,它几乎比我们使用 SQL_BIG_RESULT 提示的计划慢 10 倍 。您可能会注意到我在此查询中添加了“ ORDER BY NULL ”。这是为了向您展示“清理”临时表的唯一计划。没有它,我们得到这个计划: mysql> explain select g, sum(g) s from tbl group by g limit 5 G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tbl partitions: NULL type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 998490 filtered: 100.00 Extra: Using temporary; Using filesort 1 row in set, 1 warning (0.00 sec)
在其中,我们获得了 temporary 和 filesort “两最糟糕的”提示。MySQL 5.7 总是返回按组顺序排序的 GROUP BY 结果,即使查询不需要它(这可能需要昂贵的额外排序传递)。ORDER BY NULL 表示应用程序不需要这个。您应该注意,在某些情况下 – 例如使用聚合函数访问不同表中的列的 JOIN 查询 – 使用 GROUP BY 的临时表可能是唯一的选择。
如果要强制 MySQL 使用为 GROUP BY 执行临时表的计划,可以使用 SQL_SMALL_RESULT 提示。
4、MySQL 中的索引基于跳过扫描的 GROUP BY前三个 GROUP BY 执行方法适用于所有聚合函数。然而,其中一些人有第四种方法。
mysql> explain select k,max(id) from tbl group by k G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tbl
partitions: NULL
type: range
possible_keys: k
key: k
key_len: 4
ref: NULL
rows: 2
filtered: 100.00
Extra: Using index for group-by
1 row in set, 1 warning (0.00 sec)
mysql> select k,max(id) from tbl group by k;
+—+———+
| k | max(id) |
+—+———+
| 0 | 2340920 |
| 1 | 2340916 |
| 2 | 2340932 |
| 3 | 2340928 |
| 4 | 2340924 |
+—+———+
5 rows in set (0.00 sec)
此方法仅适用于非常特殊的聚合函数:MIN() 和 MAX()。这些并不需要遍历组中的所有行来计算值。他们可以直接跳转到组中的最小或最大组值(如果有这样的索引)。如果索引仅建立在 (K) 列上,如何找到每个组的 MAX(ID) 值?这是一个 InnoDB 表。记住 InnoDB 表有效地将 PRIMARY KEY 附加到所有索引。(K) 变为 (K,ID),允许我们对此查询使用 Skip-Scan 优化。仅当每个组有大量行时才会启用此优化。否则,MySQL 更倾向于使用更传统的方法来执行此查询(如方法#1中详述的索引有序 GROUP BY)。虽然我们使用 MIN() / MAX() 聚合函数,但其他优化也适用于它们。例如,如果您有一个没有 GROUP BY 的聚合函数(实际上所有表都有一个组),MySQL 在统计分析阶段从索引中获取这些值,并避免在执行阶段完全读取表: mysql> explain select max(k) from tbl G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: NULL partitions: NULL type: NULL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: NULL filtered: NULL Extra: Select tables optimized away 1 row in set, 1 warning (0.00 sec)
过滤和分组
我们已经研究了 MySQL 执行 GROUP BY 的四种方式。为简单起见,我在整个表上使用了 GROUP BY,没有应用过滤。当您有 WHERE 子句时,相同的概念适用: mysql> explain select g, sum(g) s from tbl where k>4 group by g order by NULL limit 5 G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: tbl partitions: NULL type: range possible_keys: k key: k key_len: 4 ref: NULL rows: 1 filtered: 100.00 Extra: Using index condition; Using temporary 1 row in set, 1 warning (0.00 sec)
对于这种情况,我们使用K列上的范围进行数据过滤/查找,并在有临时表时执行 GROUP BY。在某些情况下,方法不会发生冲突。但是,在其他情况下,我们必须选择使用 GROUP BY 的一个索引或其他索引进行过滤:
mysql> alter table tbl add key(g);
Query OK, 0 rows affected (4.17 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> explain select g, sum(g) s from tbl where k>1 group by g limit 5 G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tbl
partitions: NULL
type: index
possible_keys: k,g
key: g
key_len: 4
ref: NULL
rows: 16
filtered: 50.00
Extra: Using where
1 row in set, 1 warning (0.00 sec)
mysql> explain select g, sum(g) s from tbl where k>4 group by g limit 5 G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tbl
partitions: NULL
type: range
possible_keys: k,g
key: k
key_len: 4
ref: NULL
rows: 1
filtered: 100.00
Extra: Using index condition; Using temporary; Using filesort
1 row in set, 1 warning (0.00 sec)
根据此查询中使用的特定常量,我们可以看到我们对 GROUP BY 使用索引顺序扫描(并从索引中“放弃”以解析 WHERE 子句),或者使用索引来解析 WHERE 子句(但使用临时表来解析 GROUP BY)。根据我的经验,这就是 MySQL GROUP BY 并不总是做出正确选择的地方。您可能需要使用 FORCE INDEX 以您希望的方式执行查询。
mysql :Select a.*,(@rowNum:=@rowNum+1) as rowNoFrom a,(Select (@rowNum :=0) ) boracle :select a.*,rownum from asql server :select row_number()over(order by XX)as RowNum,* from a