Navicat for MySQL怎样执行SQL语句

Navicat for MySQL怎样执行SQL语句,第1张

方法/步骤

打开你的navicat for mysql。不清楚的同学请看下图。

在打开的界面上的工具栏处,找到“query”工具,单击。

打开你要 *** 作的数据库,eg:我要 *** 作:本地》 webdb

找到变亮的New Query ,单击打开。d出一个窗口。

这里说明一下,窗口中有两个tab窗口,一个是Query Editor,另一个是Query Builder。前者是需要自己手动写sql语句,后者者可以通过可视化 *** 作,生成sql语句。快去亲自试试吧!

1、ExecuteQuery方法

看命名,我们很容易联想到ADONET里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该“所思非所得”。下面通过一个简单方法,验证我们的猜想(数据库设计可以参考这一篇):

/// <summary>

/// 直接执行sql语句,获取总人数

/// </summary>

/// <returns></returns>

publicint GetTotalCount()

{

string strSql = "SELECT COUNT(0) FROM Person(NOLOCK)";

var query = dataContextExecuteQuery<int>(strSql);

int result = queryFirst<int>();

ConsoleWriteLine();

ConsoleWriteLine("total count:{0}", result);

return result;

}

调试的时候,通过IntelliTrace跟踪到:

毫无疑问,上面的说明最初的想法是不正确的,”ADONET:执行Reader…”云云,让我们更加坚信它实际执行的应该是ExecuteReader方法。当然最简单的方法是直接查看它的方法说明:

// 摘要:

// 直接对数据库执行 SQL 查询并返回对象。

//

// 参数:

// query:

// 要执行的 SQL 查询。

//

// parameters:

// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,

则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果某参数为

// null,则该参数会转换为 DBNullValue。

//

// 类型参数:

// TResult:

// 返回的集合中的元素的类型。

//

// 返回结果:

// 由查询返回的对象的集合。

public IEnumerable<TResult> ExecuteQuery<TResult>(string query, paramsobject[] parameters);

ExecuteQuery方法还有一个非泛型方法:

//

// 摘要:

// 直接对数据库执行 SQL 查询。

//

// 参数:

// elementType:

//

要返回的 SystemCollectionsGenericIEnumerable<T>

的类型。使查询结果中的列与对象中的字段或属性相匹配的算法如下所示:如果字段或属性映射到特定列名称,则结果集中应包含该列名称。如果未映射字段或属性,则结果集中应包含其名称与该字段或属性相同的列。通过先查找区分大小写的匹配来执行比较。如果未找到匹配项,则会继续搜索不区分大小写的匹配项。如果同时满足下列所有条件,则该查询应当返回(除延迟加载的对象外的)对象的所有跟踪的字段和属性:T

// 是由 SystemDataLinqDataContext 显式跟踪的实体。

SystemDataLinqDataContextObjectTrackingEnabled

// 为 true。实体具有主键。否则会引发异常。

//

// query:

// 要执行的 SQL 查询。

//

// parameters:

// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,

则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果某参数为

// null,则该参数会转换为 DBNullValue。

//

// 返回结果:

// 由查询返回的对象的 SystemCollectionsGenericIEnumerable<T> 集合。

public IEnumerable ExecuteQuery(Type elementType, string query, paramsobject[] parameters);

看它的参数需要多传递一个elementType,明显不如泛型方法简洁。

2、ExecuteCommand方法

同样道理,这个方法立刻让我们联想到(世界没有联想,生活将会怎样?),联想到,等等,不知联想到什么。然后我们看一下方法使用说明:

//

// 摘要:

// 直接对数据库执行 SQL 命令。

//

// 参数:

// command:

// 要执行的 SQL 命令。

//

// parameters:

// 要传递给命令的参数数组。注意下面的行为:如果数组中的对象的数目小于命令字符串中已标识的最大数,

则会引发异常。如果数组包含未在命令字符串中引用的对象,则不会引发异常。如果任一参数为

// null,则该参数会转换为 DBNullValue。

//

// 返回结果:

// 一个 int,表示所执行命令修改的行数。

publicint ExecuteCommand(string command, paramsobject[] parameters);

到这里,看它的返回类型为int,表示执行命令修改的行数,这次很容易想到ExecuteNonQuery方法。对不对呢?通过下面的代码证明我们的设想:

/// <summary>

/// 直接执行sql语句 根据用户Id更新体重

/// </summary>

/// <param name="id">用户Id</param>

/// <param name="destWeight">更新后的体重</param>

/// <returns></returns>

publicint ModifyWeightById(int id, double destWeight)

{

string strSql = stringFormat("UPDATE Person SET Weight={0} WHERE Id={1}", destWeight, id);

int result = dataContextExecuteCommand(strSql);

ConsoleWriteLine();

ConsoleWriteLine("affect num:{0}", result);

return result;

}

调试过程中,通过IntelliTrace可以很清楚地捕获:

“ADONET:执行NonQuery…”基本可以断言我们的设想是正确的。

3、防止sql注入

1和2中,执行sql语句的两个方法都有一个params 类型的参数,我们又会想到ADONET非常重要的sql语句的参数化防止sql注入问题。下面通过一个方法,看看linq2sql可不可以防止sql注入。

(1)、直接执行拼接的sql语句(有风险)

/// <summary>

/// 直接执行sql语句 根据用户Id更新FirstName

/// </summary>

/// <param name="id">用户Id</param>

/// <param name="destName">更新后的FirstName</param>

/// <returns></returns>

publicint ModifyNameById(int id, string destName)

{

string strSql = stringFormat("UPDATE Person SET FirstName='{0}' WHERE Id={1}", destName, id);

//这么拼接有风险

int result = dataContextExecuteCommand(strSql);

ConsoleWriteLine();

ConsoleWriteLine("affect num:{0}", result);

return result;

}

然后,在客户端这样调用这个方法:

int result = ServiceFactoryCreatePersonService()ModifyNameById(10, "'Anders'");

//更新id为10的人的FirstName

Mysql常用命令详解

Mysql安装目录

数据库目录

/var/lib/mysql/

配置文件

/usr/share/mysql(mysqlserver命令及配置文件)

相关命令

/usr/bin(mysqladmin mysqldump等命令)

启动脚本

/etc/initd/mysql(启动脚本文件mysql的目录)

系统管理

连接MySQL

格式:

mysql -h 主机地址 -u用户名 -p用户密码

例 1:连接到本机上的 MySQL。

hadoop@ubuntu:~$ mysql

-uroot -pmysql;

例 2:连接到远程主机上的 MYSQL。

hadoop@ubuntu:~$ mysql -h

127001 -uroot -pmysql;

修改新密码

在终端输入:mysql -u用户名 -p密码,回车进入Mysql。

>

use mysql;

> update user set password=PASSWORD('新密码') where

user='用户名';

> flush privileges; #更新权限

> quit; #退出

增加新用户

格式:grant select on 数据库 to

用户名@登录主机 identified by '密码'

举例:

例 1:增加一个用户 test1 密码为

abc,让他可以在任何主机上登录,并对所有数据库有

查询、插入、修改、删除的权限。首先用以 root 用户连入

MySQL,然后键入以下命令:

mysql>grant select,insert,update,delete on to

root@localhost identified by 'mysql';

或者

grant all privileges on to

root@localhost identified by 'mysql';

然后刷新权限设置。

flush privileges;

2:如果你不想 root 有密码 *** 作数据库“mydb”里的数据表,可以再打一个命令将密码消掉。

grant

select,insert,update,delete on mydb to root@localhost identified by

'';

删除用户

hadoop@ubuntu:~$ mysql

-u用户名 -p密码

mysql>delete from user where user='用户名' and

host='localhost';

mysql>flush privileges;

//删除用户的数据库

mysql>drop

database dbname;

数据库 *** 作

显示所有的数据库

mysql> show databases;(注意:最后有个

s)

创建数据库

mysql> create database

test;

连接数据库

mysql> use

test;

查看当前使用的数据库

mysql> select

database();

当前数据库包含的表信息

mysql>

show tables; (注意:最后有个 s)

删除数据库

mysql> drop database

test;

表 *** 作

备注: *** 作之前使用“use

<数据库名>”应连接某个数据库。

建表

命令:create

table <表名> (<字段名 1> <类型 1> [,<字段名 n> <类型

n>]);

例子:

mysql> create table MyClass(

> id int(4) not null

primary key auto_increment,

> name char(20) not null,

> sex int(4)

not null default '0',

> degree double(16,2));

获取表结构

命令: desc 表名,或者show columns from

表名

例子:

mysql> describe MyClass

mysql> desc MyClass;

mysql>

show columns from MyClass;

删除表

命令:drop table <表名>

例如:删除表名为

MyClass 的表

mysql> drop table MyClass;

插入数据

命令:insert into <表名> [( <字段名

1>[,<字段名 n > ])] values ( 值 1 )[, ( 值 n )]

例子:

mysql> insert

into MyClass values(1,'Tom',9645),(2,'Joan',8299), (2,'Wang',

9659);

查询表中的数据

查询所有行

mysql>

select from MyClass;

查询前几行数据

例如:查看表 MyClass 中前 2 行数据

mysql>

select from MyClass order by id limit 0,2;

或者

mysql> select from

MyClass limit 0,2;

删除表中数据

命令:delete from 表名 where 表达式

例如:删除表

MyClass 中编号为 1 的记录

mysql> delete from MyClass where id=1;

修改表中数据

命令:update 表名 set 字段=新值, where

条件

mysql> update MyClass set name='Mary' where id=1;

在表中增加字段

命令:alter table 表名 add 字段 类型

其他;

例如:在表 MyClass 中添加了一个字段 passtest,类型为 int(4),默认值为 0

mysql> alter

table MyClass add passtest int(4) default '0'

更改表名

命令:rename table 原表名 to 新表名;

例如:在表

MyClass 名字更改为 YouClass

mysql> rename table MyClass to

YouClass;

更新字段内容

命令:update 表名 set

字段名 = 新内容

update 表名 set 字段名 = replace(字段名, '旧内容', '新内容');

例如:文章前面加入 4

个空格

update article set content=concat(' ', content);

数据库导入导出

从数据库导出数据库文件

使用“mysqldump”命令

首先进入 DOS

界面,然后进行下面 *** 作。

1)导出所有数据库

格式:mysqldump -u [数据库用户名] -p

-A>[备份文件的保存路径]

2)导出数据和数据结构

格式:mysqldump -u [数据库用户名] -p

[要备份的数据库名称]>[备份文件的保存路径]

举例:

例 1:将数据库 mydb 导出到 e:\MySQL\mydbsql

文件中。

打开开始->运行->输入“cmd”,进入命令行模式。

c:\> mysqldump -h localhost -u

root -p mydb >e:\MySQL\mydbsql

然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。

2:将数据库 mydb 中的 mytable 导出到 e:\MySQL\mytablesql 文件中。

c:\> mysqldump -h

localhost -u root -p mydb mytable>e:\MySQL\mytablesql

例 3:将数据库 mydb

的结构导出到 e:\MySQL\mydb_strusql 文件中。

c:\> mysqldump -h localhost -u root -p

mydb --add-drop-table >e:\MySQL\mydb_strusql

备注:-h localhost

可以省略,其一般在虚拟主机上用。

3)只导出数据不导出数据结构

格式:

mysqldump -u [数据库用户名] -p -t

[要备份的数据库名称]>[备份文件的保存路径]

4)导出数据库中的Events

格式:mysqldump -u [数据库用户名] -p

-E [数据库用户名]>[备份文件的保存路径]

5)导出数据库中的存储过程和函数

格式:mysqldump -u [数据库用户名]

-p -R [数据库用户名]>[备份文件的保存路径]

从外部文件导入数据库中

1)使用“source”命令

首先进入“mysql”命令控制台,然后创建数据库,然后使用该数据库。最后执行下面 *** 作。

mysql>source

[备份文件的保存路径]

2)使用“<”符号

首先进入“mysql”命令控制台,然后创建数据库,然后退出 MySQL,进入 DOS

界面。最后执行下面 *** 作。

mysql -u root –p < [备份文件的保存路径]

以上就是关于Navicat for MySQL怎样执行SQL语句全部的内容,包括:Navicat for MySQL怎样执行SQL语句、如何直接执行SQL语句、mysql数据库执行sql语句怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9361137.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存