如何用MySQL workbench查询数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用MySQL workbench查询数据相关的知识,希望对你有一定的参考价值。

如何用mysql workbench直接查询数据而不使用select语句,
例如 select Name from table where **,这类语句对应的按钮。

方法/步骤

    第一步,双击打开MySQL Workbench,新建一个数据库worker,设置数据库编码格式是utf-8,点击“Apply”,创建数据库编码

    CREATE SCHEMA `worker` DEFAULT CHARACTER SET utf8 ;

    如下图所示:

    第二步,使用worker数据库,查看数据库表情况,可以使用show命令,如下图所示:

    第三步,新建一张worker信息表,创建数据库表SQL语句具体如下:

    create table t_worker_info(

    id int(8) primary key,

    worker_id int(6) not null,

    worker_name varchar(20) not null,

    worker_age int(2), 

    worker_sex varchar(2),

    worker_addr varchar(100)

    );

    如下图所示:

    第四步,数据库表t_worker_info建好了后,向表里插入一些数据,插入数据SQL语句

    insert into t_worker_info (id,worker_id,worker_name,worker_age,worker_sex,worker_addr)

    values (20150101,100,'zhangsan',34,'M','hubei');

    如下图所示:

    第五步,创建数据库查询存储过程query_procedure,具体实现如下图所示:

    第六步,编写完了存储过程后,在查询窗口调用存储过程

    call query_procedure(30,'M');

    如下图所示:

参考技术A 有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
1. check table 和 repair table
登陆mysql 终端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。
需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)
参考技术B

TABLE 语句

具体语法:TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]
其实从语法上看,可以排序,也可以过滤记录集,不过比较简单,没有 SELECT 那么强大。

示例 1

简单的建一张很小的表 y1,记录数为 10 条。表 t1,插入 10 条记录

    mysql-(ytt/3305)->create table t1 (r1 int,r2 int);

    Query OK, 0 rows affected (0.02 sec)

    mysql-(ytt/3305)->insert into t1

    with recursive aa(a,b) as (

    select 1,1

    union all

    select a+1,ceil(rand()*20) from aa where a < 10

    ) select * from aa;

    Query OK, 10 rows affected (0.00 sec)

    Records: 10  Duplicates: 0  Warnings: 0

    简单全表扫描mysql-(ytt/3305)->select * from t1;+------+------+| r1   | r2   |+------+------+|    1 |    1 ||    2 |    9 ||    3 |    9 ||    4 |   17 ||    5 |   17 ||    6 |   16 ||    7 |    6 ||    8 |    1 ||    9 |   10 ||   10 |    3 |+------+------+10 rows in set (0.00 sec)
    TABLE 结果mysql-(ytt/3305)->table t1;+------+------+| r1   | r2   |+------+------+|    1 |    1 ||    2 |    9 ||    3 |    9 ||    4 |   17 ||    5 |   17 ||    6 |   16 ||    7 |    6 ||    8 |    1 ||    9 |   10 ||   10 |    3 |+------+------+10 rows in set (0.00 sec)
    看下 table 的执行计划mysql-(ytt/3305)->explain table t1 order by r1 limit 2\\G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: t1   partitions: NULL         type: ALLpossible_keys: NULL          key: NULL      key_len: NULL          ref: NULL         rows: 10     filtered: 100.00        Extra: Using filesort1 row in set, 1 warning (0.00 sec)
    其实可以看到 TABLE 内部被 MySQL 转换为 SELECT 了。mysql-(ytt/3305)->show warnings\\G*************************** 1. row ***************************  Level: Note   Code: 1003Message: /* select#1 */ select `ytt`.`t1`.`r1` AS `r1`,`ytt`.`t1`.`r2` AS `r2` from `ytt`.`t1` order by `ytt`.`t1`.`r1` limit 21 row in set (0.00 sec)
    那其实从上面简单的例子可以看到 TABLE 在内部被转成了普通的 SELECT 来处理。示例 2应用于子查询里的子表。这里要注意,内表的字段数量必须和外表过滤的字段数量一致。克隆表 t1 结构mysql-(ytt/3305)->create table t2 like t1;Query OK, 0 rows affected (0.02 sec)
    克隆表 t1 数据mysql-(ytt/3305)->insert into t2 table t1;Query OK, 10 rows affected (0.00 sec)Records: 10  Duplicates: 0  Warnings: 0
    table t1 被当做内表,表 t1 有两个字段,必须同时满足 t2 检索时过滤的字段也是两个。mysql-(ytt/3305)->select * from t2 where (r1,r2) in (table t1);+------+------+| r1   | r2   |+------+------+|    1 |    1 ||    2 |    9 ||    3 |    9 ||    4 |   17 ||    5 |   17 ||    6 |   16 ||    7 |    6 ||    8 |    1 ||    9 |   10 ||   10 |    3 |+------+------+10 rows in set (0.00 sec)
    注意:这里如果过滤的字段数量和子表数量不一致,则会报错。
参考技术C 怎么使用Mysql Workbench 查询mysql数据库
有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
1. check table 和 repair table
登陆mysql 终端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。
参考技术D 有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
1. check table 和 repair table
登陆mysql 终端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。
需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)

为啥在 Workbench 中有效的 MySql 查询在 phpmyadmin 中返回语法错误?

【中文标题】为啥在 Workbench 中有效的 MySql 查询在 phpmyadmin 中返回语法错误?【英文标题】:Why does a MySql query, valid in Workbench, return syntax errors in phpmyadmin?为什么在 Workbench 中有效的 MySql 查询在 phpmyadmin 中返回语法错误? 【发布时间】:2020-09-14 02:51:49 【问题描述】:

所以我在 2 个不同的数据库中作为 id_information 和 id_information_backup 有 2 个表作为 table1 和 table2。这两个表都有以下列: (id bigint, name varchar, surname varchar) 我做了这个触发器,当用户在 table1 中输入姓名和姓氏时,它会计算它的 ascii 代码并进行一些计算并将其存储在“第二个表的名称”列,即“table2”。所有这些都在 Mysql 工作台中完成。当我将代码导入 phpmyadmin 时,它给了我太多的语法错误。我试图弄清楚我有什么语法错误,但我找不到。我在下面分享触发器。如果可以的话,请帮助我。我会很感激的。我想这是因为我使用的版本是 MySQL workbench 8.0 而我要导入的版本是 PHPmyadmin 4.9.4 。如果可以,请解决问题。

delimiter $$ 
CREATE DEFINER = CURRENT_USER TRIGGER `id_information`.`table1_after_INSERT1` AFTER INSERT ON `table1` FOR EACH ROW
BEGIN
declare p , r , copy, result, result1 decimal(64,0);
declare name1, surnam varchar(15);
declare a int;
set name1 = new.name;
set surnam = new.surname;
set a= 100;
set result =0;
set copy = 0;
set result1 =0;
set p =0 ;
set r =0 ;
with recursive cte as (
    select name1 as name1, left(name1, 1) as val, 1 as idx
    union all
    select name1, substring(name1, idx + 1, 1), idx + 1 
    from cte 
    where idx < char_length(name1)
)
select group_concat(ascii(val) + a order by idx separator '') ascii_word from cte into result;
with recursive ctee as (
    select surnam as surnam, left(surnam, 1) as vall , 1 as idxx
    union all
    select surnam, substring(surnam, idxx+ 1, 1), idxx+ 1 
    from ctee
    where idxx< char_length(surnam)
)
select group_concat(ascii(vall )  + a order by idxx separator '') ascii_word from ctee into result1;
select group_concat(result, result1) into copy;
insert into id_information_backup.table2  set table2.name = copy;
END$$
delimiter ;

【问题讨论】:

它计算它的ascii码并进行一些计算并将它存储在第二个表的“name”列中,即“table2”。 为什么是十进制ASCII码?为什么不是十六进制? PS。 minimal fiddle 当我将代码导入 phpmyadmin 时,它给了我太多的语法错误。 你的 MySQL 版本是多少?它必须是 8+,而不是 5+。 正好是 8.0。现在我将它导入在线服务器,它有 phpmyadmin 4.9.4。你能告诉我如何解决这个问题。 首先我选择了 bigint 数据类型来存储值,但我意识到有时如果名字和姓氏很大,那么 bigint 将无法存储这么大的数字。我将其存储为十进制 (64,0)。 phpmyadmin 给出“太多语法错误”会在将查询发送到 MySQL 之前尝试检查查询语法。如果它的版本太旧并且它不知道 8+ 版本的语法,那么它会报告“错误”也就不足为奇了。检查版本兼容性(当前 phpmyadmin 和 MySQL 8+)。 【参考方案1】:

当您尝试运行命令(通过按 SQL 文本区域底部的“开始”按钮)时,会发生什么?

如果 phpMyAdmin 在提交之前将错误显示为 SQL 区域左侧带有白色 x 的红色圆圈,则这些是语法警告,不会影响您提交查询的能力。这些是 phpMyAdmin 中的 SQL linter 作为提示提供的。

phpMyAdmin 语法警告:

如果提交语句后出现错误,则错误来自 MySQL 本身,而不是直接由 phpMyAdmin 引起。

MySQL 语法错误:

【讨论】:

【参考方案2】:

在 PHPMyAdmin 中,您需要在主查询下的一个小框中设置分隔符

它应该被签名为“分隔符”;-)

我最后被那个抓住了几次:-D

【讨论】:

以上是关于如何用MySQL workbench查询数据的主要内容,如果未能解决你的问题,请参考以下文章

怎么使用Mysql Workbench 查询mysql数据库

如何用python查询mysql乱码问题?

mysql 如何用sql语句查询表的所有列名

如何用MYSQL模糊查询?

如何用数据库mysql查询产品的产品编号和销售数量的总和

请问,如何用一条SQL查询出分页的数据和总记录数啊?MySQL的!不用存储