Sql语句执行的次序(mysql)

之前一直没有写到很复杂的语句了,这次项目中涉及比较多,发现自己对执行次序还是很不明白。这几天一直在用这个,转过来,原文链接:http://www.cnblogs.com/rollenholt/p/3776923.html


    **FORM**: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1
    **ON**: 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
    **JOIN**: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止。
    **WHERE**: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
    **GROUP BY**: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
    **CUBE | ROLLUP**: 对表VT5进行cube或者rollup操作,产生表VT6.
    **HAVING**: 对虚拟表VT6应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT7中。
    **SELECT**: 执行select操作,选择指定的列,插入到虚拟表VT8中。
    **DISTINCT**: 对VT8中的记录进行去重。产生虚拟表VT9.
    **ORDER BY**: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.
    **LIMIT**:取出指定行的记录,产生虚拟表VT11, 并将结果返回。

转载于:https://my.oschina.net/passer007/blog/719720

### 使用 `INSERT INTO` 语句MySQL 中插入数据 #### 单条记录插入 为了向表中插入单个新记录,可以采用如下两种方式之一: 通过指定字段名称以及对应的值来实现精确的数据插入。这种方式有助于防止因表格结构变化而导致的错误。 ```sql INSERT INTO Websites (name, url, country) VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND'); ``` 另一种方法是在不指明具体列的情况下直接提供相应的值列表;然而这种方法要求所提供的值顺序严格匹配表定义中的各列排列次序[^3]。 ```sql INSERT INTO Websites VALUES ('stackoverflow', 'http://stackoverflow.com/', 'IND'); ``` 对于部分字段赋值的情况,则可利用 `SET` 关键字完成操作,这允许仅更新特定属性而保留其他默认或现有设置不变。 ```sql INSERT INTO Websites SET name='stackoverflow', url='http://stackoverflow.com/', country='IND'; ``` #### 批量多行插入 当需要一次性添加多个独立实体时,可以通过扩展上述基本形式,在同一个命令内列举若干组参数集合以提高效率并减少网络往返次数。 ```sql INSERT INTO Websites (name, url, country) VALUES ('example1', 'https://www.example1.com', 'USA'), ('example2', 'https://www.example2.org', 'CAN'); ``` 此批处理模式同样适用于较大规模的数据集导入场景下优化性能表现[^5]。 #### 处理重复主键冲突 如果遇到由于违反唯一性约束所引发的异常提示:“Duplicate entry '1' for key 'PRIMARY'”,则表明尝试插入具有相同标识符的新项违背了既定规则。此时应当检查输入源是否存在冗余或者考虑应用替代策略如忽略已有项目或是替换旧版本等措施加以解决[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值