精华内容
下载资源
问答
  • 查询分析器里好像是按顺序一执行,但在数据库内部呢?我用的生产系统有一个BUG,就是物品档案里的编码进行统一转换时,会把所以数据表里用到某个编码的地方,全转换为新的编码...查询分析器里好像是按顺序一...

    查询分析器里好像是按顺序一条一条的执行,但在数据库内部呢?我用的生产系统有一个BUG,就是物品档案里的编码进行统一转换时,会把所以数据表里用到某个编码的地方,全转换为新的编码...

    查询分析器里好像是按顺序一条一条的执行,但在数据库内部呢?

    我用的生产系统有一个BUG,就是物品档案里的编码进行统一转换时,会把所以数据表里用到某个编码的地方,全转换为新的编码,同时去掉老编码,偏偏漏掉了一个BOM表。所以我做了个简单的触发器。关系到4个表。

    如下:BOM表和生产计划明细表各有一个触发器,如果有修改,调存储过程重新生成投产安排表,物品档案表里建一个简单触发器,当编码进行转换,软件在更新数据库其他表(包含有生产计划明细表和投产安排表)的物品编码时,物品档案中的触发器同时更新BOM表里的编码。但由于BOM中和生产计划明细表的触发器是在编码变化时,重新生成投产安排。因此,这里重复更新了投产安排。我的要求是不能由BOM和生产计划明细的触发器重新生成。

    触发器如下:

    CREATE Trigger [转换编码]

    On 物料档案

    for update

    AS

    if update(物品编码)

    BEGIN

    ALTER TABLE BOM DISABLE TRIGGER all --禁用BOM表上的触发器

    ALTER TABLE 生产计划明细 DISABLE TRIGGER all ---禁用生产计划明细表上的触发器

    ------------------------以下开始进行编码转换操作------------

    INSERT into 编码转换(物品编码,状态) SELECT 物品编码,'DEL' AS 状态 FROM deleted

    INSERT into 编码转换(物品编码,状态) SELECT 物品编码,'INS' AS 状态 FROM inserted

    update 投产安排 set 替代物料=INS.物品编码 from 投产安排,

    (select 物品编码 from 编码转换 where 状态='INS') AS INS

    where 投产安排.替代物料 in (select 物品编码 from 编码转换 where 状态='DEL')

    update BOM set 子件编码=INS.物品编码 from BOM,

    (select 物品编码 from 编码转换 where 状态='INS') AS INS

    where BOM.子件编码 in (select 物品编码 from 编码转换 where 状态='DEL')

    update BOM set 父件编码=INS.物品编码 from BOM,

    (select 物品编码 from 编码转换 where 状态='INS') AS INS

    where BOM.父件编码 in (select 物品编码 from 编码转换 where 状态='DEL')

    update 车间领料明细 set DFS02=INS.物品编码 from 车间领料明细,

    (select 物品编码 from 编码转换 where 状态='INS') AS INS

    where 车间领料明细.DFS02 in (select 物品编码 from 编码转换 where 状态='DEL')

    ---------------------编码转换操作完毕----------------

    ALTER TABLE BOM ENABLE TRIGGER all ----重新启用BOM表上的触发器

    ALTER TABLE 生产计划明细 ENABLE TRIGGER all ----重新启用生产计划明细表上的触发器

    delete from 编码转换---删除临时数据

    end

    我的方法是先禁用BOM和生产计划明细中的触发器,再做编码修改。然后重新启用BOM和生产计划明细中的触发器。

    如果正常一条一条执行的话,应该是行得通的。但实际测试时,发现没达到预期效果。投产安排的重新生成的现象发生。也就是说,编码转换还没执行完时,禁用的触发器就被重新启用,然后调用存储过程去生成投产安排。

    急。。。求解。本人只有80分了 T_T。。。哪位大侠解决了。全送。。

    展开

    展开全文
  • MySQL sql语句执行顺序

    2021-02-08 00:06:28
    sql语句select语句查询顺序(7)SELECT(8)DISTINCT(1)FROM(3)JOIN(2)ON(4)WHERE(5)GROUPBY(6)HAVING(9)ORDERBY(10)LIMIT一、执行FROM语句,mysql是从左往右执行,oracle是从右往左执行...

    sql语句select语句查询顺序

    (7)     SELECT

    (8)     DISTINCT 

    (1)     FROM 

    (3)      JOIN 

    (2)     ON 

    (4)     WHERE 

    (5)     GROUP BY 

    (6)     HAVING 

    (9)     ORDER BY 

    (10)    LIMIT 

    一、执行FROM语句,mysql是从左往右执行,oracle是从右往左执行,SQL语句的执行过程中,都会产生一个虚拟表,用来保存SQL语句的执行结果(这是重点),执行from语句之后会产生一个虚拟表暂时叫VT1(vitual table 1),VT1是根据笛卡尔积生成

    二、执行on进行过滤

    根据on后面的条件过滤掉不符合条件的数据,参数VT2

    三、执行链接的类型

    inner join内连接、left join左链接、right右链接、outer join 外链接、full outer join 全连接

    执行完产生VT3

    四、执行where后面的条件

    这时候使用WHERE条件的时候要注意:不能使用组函数、并且字段的别名不能放到条件中使用

    例如SELECT city as c FROM t WHERE c='shanghai'

    五、执行group by 进行分组

    六、执行having过滤

    HAVING子句主要和GROUP BY子句配合使用,having后面可以跟组函数的条件

    七、执行select

    八、执行distinct,去掉重复的数据

    九、执行order by 语句排序

    十、执行分页语句

    转自: http://blog.csdn.net/u010833154/article/details/50696583

    展开全文
  • C#:执行SQL语句Command

    2021-02-01 14:30:36
    Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改操作的SQL语句。Command对象主要有以下几种方式:►SqlCommand:用于向SQL Server数据库发送SQL语句,位于System.Data.SqlClient命名...

    Command对象是一个数据命令对象,主要功能是向数据库发送查询、更新、删除、修改操作的SQL语句。Command对象主要有以下几种方式:

    ►SqlCommand:用于向SQL Server数据库发送SQL语句,位于System.Data.SqlClient命名空间。

    ►OleDbCommand:用于向使用OLE DB公开的数据库发送SQL语句,位于System.Data.OleDb命名空间。例如,Access数据库和MySQL数据库都是OLE DB公开的数据库。

    ►OdbcCommand:用于向使用ODBC公开的数据库发送SQL语句,位于System.Data.Odbc命名空间。有些数据库如果没有提供相应的连接程序,则可以配置好ODBC连接后,使用OdbcCommand。

    ►OracleCommand:用于向使用Oracle公开的数据库发送SQL语句,位于System.Data.OracleClient命名空间。在使用OracleCommand向Oracle数据库发送SQL语句时,要引入System.Data.OracleClient命名空间,但是默认情况下是没有该命名控件,此时,需要将程序集System.Data.OracleClient引入到项目中。引入程序集的方法是在项目名称上单击鼠标右键,在弹出的快捷菜单中选择“添加引用”命令,打开“添加引用”对话框。在该对话框中选择System.Data.OracleClient程序集,单击“确定”按钮,即可将其添加到项目中。

    Command对象的常用属性及说明

    属性名

    说明

    CommandText

    获取或设置要对数据源执行的Transact-SQL语句或存储过程

    CommandTimeout

    获取或设置在终止执行命令的尝试并生成错误之前的等待

    CommandType

    获取或设置一个值,该值指示如何解释CommandText属性

    Connection

    获取或设置SqlCommand类的此实例使用的SqlConnection对象

    Parameters

    获取SqlParameterCollection对象

    Transaction

    获取或设置将在其中执行SqlCommand类的SqlTransaction对象

    UpdatedRowSource

    获取或设置命令结果在由DbDataAdapter类的“Update”方法使用时,如何应用于DataRow对象

    Command对象的常用方法及说明

    方法名

    说明

    BeginExecuteNonQuery

    启动此SqlCommand对象描述的Transact-SQL语句或存储过程的异步执行

    BeginExecuteReader

    启动此SqlCommand对象描述的Transact-SQL语句或存储过程的异步执行,并从服务器中检索一个或多个结果集

    BeginExecuteXmlReader

    启动此SqlCommand对象描述的Transact-SQL语句或存储过程的异步执行,并将结果作为XmlReader对象返回

    CreateParameter

    创建SqlParameter对象的新实例

    EndExecuteNonQuery

    完成Transact-SQL语句的异步执行

    EndExecuteReader

    完成Transact-SQL语句的异步执行,返回请求的SqlDataReader对象

    EndExecuteXmlReader

    完成Transact-SQL语句的异步执行,将请求的数据以XML形式返回

    ExecuteNonQuery

    对连接执行Transact-SQL语句并返回受影响的行数

    ExecuteReader

    将CommandText对象发送到Connection类并生成一个SqlDataReader对象

    ExecuteScalar

    执行查询,并返回查询所返回的结果集中第一行的第一列,忽略其他行或列

    ExecuteXmlReader

    将CommandText对象发送到Connection类并生成一个XmlReader对象

    ResetCommandTimeout

    CommandTimeou属性重置为其默认值

    1、设置数据源类型

    Command对象有3个重要的属性,分别是Connection、CommandText和CommandType。Connection属性用于设置SqlCommand使用的SqlConnection。CommandText属性用于设置要对数据源执行的SQL语句或存储过程。CommandType属性用于设置指定CommandText的类型。CommandType属性的值是CommandType枚举值,包括StoredProcedure(存储过程的名称)、TableDirect(表的名称)、Text(SQL文本命令)。

    如果要设置数据源的类型,则可以通过设置CommandType属性来实现。

    2、执行SQL语句

    Command对象需要取得将要执行的SQL语句,通过调用该类提供的多种方法,向数据库提交SQL语句。下面介绍SqlCommand对象中的几种执行SQL语句的方法。

    (1)ExecuteNonQuery方法

    执行SQL语句,并返回受影响的行数,在使用SqlCommand向数据库发送增、删、改命令时,通常使用ExecuteNonQuery方法执行发送的SQL命令。示例代码如下:

    //实例化SqlConnection变量conn

    conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");

    //打开连接

    conn.Open();

    //创建一个SqlCommand对象

    SqlCommand cmd = new SqlCommand();

    //设置Connection属性,指定使其用conn连接数据库

    cmd.Connection = conn;

    //设置CommandText属性,以及执行的SQL语句

    cmd.CommandText = "updatetb_command set 奖金=50 where 性别='女'";

    //设置CommandType属性为Text,使其只执行SQL语句文本形式

    cmd.CommandType = CommandType.Text;

    //使用ExecuteNonQuery方法执行SQL语句

    int i = Convert.ToInt32(cmd.ExecuteNonQuery());

    label2.Text= "共有" + i.ToString() + "名女员工获得奖金";

    [注]:如果想要执行存储过程,应该将CommandType属性设置为StoredProcedure,将CommandText属性设置为存储过程的名称。

    (2)ExecuteReader方法

    执行SQL语句,并生成一个包含数据的SqlDataReader对象的实例。示例代码如下

    //实例化SqlConnection变量conn

    SqlConnection conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");

    conn.Open();//打开连接

    //创建一个SqlCommand对象

    SqlCommand cmd = new SqlCommand();

    //设置Connection属性,指定其使用conn连接数据库

    cmd.Connection = conn;

    //设置CommandText属性,以及其执行的SQL语句

    cmd.CommandText = "select* from tb_command";

    //设置CommandType属性为Text,使其只执行SQL语句文本形式

    cmd.CommandType = CommandType.Text;

    //使用ExecuteReader方法实例化一个SqlDataReader对象

    SqlDataReader sdr = cmd.ExecuteReader();

    while (sdr.Read()){//读取SqlDataReader

    //将内容添加到listView1控件中

    listView1.Items.Add(sdr[1].ToString());

    }

    conn.Dispose();//释放连接

    (3)ExecuteScalar方法

    执行SQL语句,返回结果集中的第一行的第一列。如果结果集为空,返回空引用。示例代码如下所示:

    conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");

    conn.Open();

    //创建一个SqlCommand对象

    SqlCommand cmd = new SqlCommand();

    //设置Connection属性

    cmd.Connection = conn;

    //设置CommandText属性以及SQL语句

    cmd.CommandText = "selectcount(*) from TableName";

    //设置CommandText属性为Text,使其只执行SQL语句文本形式

    cmd.CommandType = CommandType.Text;

    //使用ExecuteScalar方法获取指定数据表中的数据数量

    int i = Convert.ToInt32(cmd.ExecuteScalar());

    label2.Text= "数据表中共有:" + i.ToString() + "条数据";

    展开全文
  • 其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.sql里的所有sql语句,这就涉及到执行条语句的问题了。...

    最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.sql里的所有sql语句,这就涉及到执行多条语句的问题了。软件在CodeIgniter框架上开发的,CodeIgniter有封装好的执行sql语句的函数:$this->db->query('****'),但此函数一次只能执行一条sql语句。所以得另外想办法了。百度了下,找到了一些资料。multi_query()方法是完全按照在sql环境下的语句执行,所以可以一次执行多条sql语句(按sql语法拼写,每条语句以;结束)。

    $mysqli = new mysqli($this->db->hostname,$this->db->username,$this->db->password,$this->db->database); //连接MySQL数据库

    if ($mysqli->connect_errno) { //判断是否连接成功printf("Connect failed: %s

    ", $mysqli->connect_error);exit();

    }$mysqli->multi_query($dataStr); //执行sql语句

    以下是百度到的参考资料:

    使用mysqli对象中的query()方法每次调用只能执行一条SQL命令。如果需要一次执行多条SQL命令,就必须使用mysqli对象中的 multi_query()方法。具体做法是把多条SQL命令写在同一个字符串里作为参数传递给multi_query()方法,多条SQL之间使用分号 (;)分隔。如果第一条SQL命令在执行时没有出错,这个方法就会返回TRUE,否则将返回FALSE。

    因为multi_query()方法能够连接执行一个或多个查询,而每条SQL命令都可能返回一个结果,在必要时需要获取每一个结果集。所以对该方 法返回结果的处理也有了一些变化,第一条查询命令的结果要用mysqli对象中的use_result()或store_result()方法来读取,当 然,使用store_result()方法将全部结果立刻取回到客户端,这种做法效率更高。另外,可以用mysqli对象中的 more_results()方法检查是否还有其他结果集。如果想对下一个结果集进行处理,应该调用mysqli对象中的next_result()方 法,获取下一个结果集。这个方法返回TRUE(有下一个结果)或FALSE。如果有下一个结果集,也需要使用use_result()或 store_result()方法来读取。执行多条SQL命令代码如下所示:

    if (mysqli_connect_errno()) {//检查连接错误

    printf("连接失败: %s
    ", mysqli_connect_error());exit();

    }/*将三条SQL命令使用分号(;)分隔, 连接成一个字符串*/

    //设置查询字符集为GB2312

    $query = "SET NAMES GB2312;";//从MySQL服务器获取当前用户

    $query .= "SELECT CURRENT_USER();";//从contactinfo表中读取数据

    $query .= "SELECT name,phone FROM contactinfo LIMIT 0,2";//执行多条SQL命令

    if ($mysqli->multi_query($query)) {do{//获取第一个结果集

    if ($result = $mysqli->store_result()) {//遍历结果集中每条记录

    while ($row = $result->fetch_row()) {//从一行记录数组中获取每列数据

    foreach($row as $data){//输出每列数据

    echo $data."  ";

    }//输出换行符号

    echo "
    ";

    }//关闭一个打开的结果集

    $result->close();

    }//判断是否还有更多的结果集

    if ($mysqli->more_results()) {//输出一行分隔线

    echo "-----------------
    ";

    }

    }while ($mysqli->next_result()); //获取下一个结果集,并继续执行循环

    }$mysqli->close(); //关闭mysqli连接

    ?>

    输出结果如下所示:

    mysql_user@localhost

    -----------------

    高某某   15801688338

    洛某某   15801681234

    在上面的示例程序中,使用mysqli对象中的multi_query()方法一次执行三条SQL命令,获取多个结果集并从中遍历数据。如果在命令 的处理过程中发生了错误,multi_query()和next_result()方法就会出现问题。multi_query()方法的返回值,以及 mysqli的属性errno、error、info等只与第一条SQL命令有关,无法判断第二条及以后的命令是否在执行时发生了错误。所以在执行 multi_query()方法的返回值是TRUE时,并不意味着后续命令在执行时没有出错。

    展开全文
  • 今天为大家分享一篇关于PHP使用mysqli同时执行sql查询语句的实例,觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起来看看吧。PHP数据库操作中,mysqli相对于mysql有很大的优势,建议大家...
  • MyBatis一次执行SQL语句的操作

    千次阅读 2020-12-24 11:36:40
    有个常见的场景:删除用户的时候需要先删除...今天我要说的是MyBatis中如何一次执行条语句(使用mysql数据库)。1、修改数据库连接参数加上allowMultiQueries=true,如:hikariConfig.security.jdbcUrl=jdbc:mysq...
  • 种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.Thread模块是比较底层的模块,Threading模块是对...
  • 其中,除了第一条语句,对读取记录加S锁 (共享锁)外,其他的操作,都加的是X锁 (排它锁)。 不同隔离级别,以及对于不同的索引情况会如何加锁? delete from t1 where id = 10; 组合一:id列是主键,RC隔离级别: 只...
  • 并发操作之——并发、并行

    千次阅读 2021-08-30 15:30:24
    程序中可以同时拥有个或者多个线程,当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行。 并行: 多个...
  • 同时执行sql

    千次阅读 2021-03-03 20:39:03
    mysql怎么一次执行SQL语句mysql一次执行SQL语句的操作方法和步骤如下:首先,在桌面上,单击“ Navicat For Mysql”图标,如下图所示。其次,完成上述步骤后,在此界面中,单击“新建查询”选项,如下图所示...
  • 最近做一个MySQL方面的东西发现了这个问题,就是在一个Statement中执行SQL语句的时候可以正确执行,如果同时执行,就会报SQL语法错误,伤透了脑筋。经过网上查找,发现有种解决办法:1、最简单的办法:在...
  • 交互式爱情我想知道是否可以使用JDBC执行类似的操作。"SELECTFROM*TABLE;INSERTINTOTABLE;"是的是有可能的。据我所知,有种方法。他们是通过将数据库连接属性设置为允许多个查询,默认情况下以分号分隔.通过调用...
  • 看如下一条sql语句:# ...在看下面这条语句:select * from T where id = 10;那这条语句呢?其实这其中包含太多知识点了。要回答这个问题,首先需要了解一些知识。相关知识介绍多版本并发控制在MySQL默认存储引擎...
  • 对于一update语句来说,也会执行上图中的流程,如果您对于上图中的连接器、分析器等名词不太熟悉,请查看上一篇文章:MySQL逻辑架构中各名词详解 2.一示例update语句执行过程简析 # 建表SQL create table `...
  • 听歌和聊天就是个任务,这个个任务是“同时”进行的。一个任务一般对应一个进程,也可能包含好几个进程。比如运行的MSN就对应一个MSN的进程,如果你用的是windows系统,你就可以在任务管理器中看到操作系统正...
  • MySQL在执行过程实现加锁与一sql语句有什么关联发布时间:2020-06-08 17:27:13来源:51CTO阅读:234作者:三月本篇文章给大家主要讲的是关于MySQL在执行过程实现加锁与一sql语句有什么关联的内容,感兴趣的话就...
  • 并发insert语句的解决方法

    千次阅读 2021-01-21 16:00:48
    这样的话,就不会插入两条(如果重复了则,进行更新操作)2、update方案1、redis分布式锁、消息队列(每次只插入一个)2、mysql锁(更新可以使用乐观锁)2、高并发下的安全性1、在线的网站上去执行一个大的DELETE或INSERT...
  • 以Openresty服务器为例,Openresty是多进程+I/O多路复用结构(Nginx的I/O模型),可以支撑高的并发,一个Worker就是一个进程,一个进程可以处理多请求。 我们知道当需要执行SQL语句时需要先于MySQL服务器建立连接...
  • 在bash脚本中,并发执行命令的用途很多,比如:批量上传和下载,批量启动和关闭程序,批量打包日志,批量检查远程机器是否可达等等 并行执行能充分利用系统资源,极大的提高效率,节省大量的时间 例如:现需要下载20...
  • 加锁流程一直很迷,尤其几个session搅在...原文博客:https://www.aneasystone.com/archives/2018/06/insert-locks-via-mysql-source-code.html附前提知识讲接链接:锁的种类-Mysql官方文档常见 SQL 语句的加锁分...
  • Select语句在MySQL中如何执行发布时间:2020-11-07 15:52:44来源:亿速云阅读:80作者:LeahSelect语句在MySQL中如何执行?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面...
  • 查询 SQL 语句是如何执行的? 1. 和数据库建立连接 MySQL 必须要运行一个服务,监听默认的 3306 端口。 在我们系统跟第三方接口对接的时候,必须要弄清楚的有两件事。 第一个就是通信协议,比如我们是用 HTTP ...
  • 详细介绍了MySQL中一更新sql的执行流程,以及日志的阶段提交分布式事务,以及崩溃恢复流程,以及多事务组提交策略。
  • 可能我们的系统中有成百个线程会并发的频繁创建数据库连接,执行SQL语句,然后频繁的销毁数据库连接,那效率肯定很低下。 所以一般我们会使用一个数据库连接池,也就是说在一个池子里维持多个数据库连接,让多个线程...
  • 1 条件语句(if_else语句)
  • mysql怎么终止当前正在执行的sql语句 mysql怎么终止当前正在执行的sql语句 show processlist; kill 要杀的ID kill 7 随机推荐 hibernate缓存 ...
  • 深入理解:Mysql执行SQL语句过程发布时间:2020-08-11 17:48:12来源:ITPUB博客阅读:107作者:Java大蜗牛开发人员基本都知道,我们的数据存在数据库中(目前最多的是mysql和oracle,由于作者更擅长mysql,所以这里...
  • 今天收到一个小学弟的求助,数据库插入偶尔重复,怎么在sql语句上进行解决。 Q:学长,我导入excel数据的操作,平时使用好好的,怎么突然发生插入重复的问题? A:你是使用哪个ORM框架进行操作的? Q:什么是ORM...
  • 比如 : 商品信息 和 商品的详情 , 是分开的个表 . dt_mall和dt_mall_content;当我dt_mall插入一数据的时候 , 如果插入成功 , 还要在dt_mall_content表里 , 插入一个同id的content ;这个时候 , 可以使用...
  • oracle查看执行最慢与查询次数最多的sql语句前言在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 158,570
精华内容 63,428
关键字:

两条语句可以并发执行的条件

友情链接: quxian.rar