MySQL注释形式_可执行注释语句(/*!...*/)_数据库注释_数据库脚本注释_SQL脚本注释格式_SQL脚本注释分类

文章目录

  • 单行注释
  • 多行注释
  • 可执行注释
    • 为什么要把可执行的 SQL 语句写在注释里面呢?
    • 注释示例
    • 导入数据时禁止/激活索引
    • 测试禁止索引再导入数据的效率

单行注释

SELECT * from tf_user; # 单行注释,从这个注释符号起直到该行结束
SELECT * from tf_user; -- 单行注释,从这个注释符号起直到该行结束

多行注释

/* 
this is multiline comment
*/
SELECT * from tf_user;

可执行注释

使用 MySQL 的命令 mysqldump 导出的备份脚本文件中,你会看到大量如下所示的特殊注释语句:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!...*/ 这叫可执行的注释(Executable Comments),注释当中的语句会被 MySQL 正常解析和执行,但在其他数据库管理系统将被作为注释忽略,这可以提高数据库脚本的可移植性。

为什么要把可执行的 SQL 语句写在注释里面呢?

MySQL 包含一些其它 DBMS 中不具备的功能扩展,如果使用了它们,将无法把代码移植到其它 DBMS 中。在某些情况下,你可以编写包含 MySQL 特殊扩展功能的代码,但仍保持其可移植性,方法是用 /*!... */ 注释掉这些扩展。MySQL DBMS 能够解析并执行注释中的代码,就像对待其它 MySQL 语句一样,但其它 DBMS 则将其当成注释,从而忽略这些扩展功能。

也就是说,把 SQL 语句放在 /*! ... */ 中,这些语句在其它数据库中是不会被执行,但在 MySQL 中它会被执行,在其它数据库中 /*! ... */ 就仅是注释。

注释示例

以下是在备份文件开头会出现的注释语句:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

说明:

  1. 40101,这是 MySQL 版本号,该数字告诉我们这些语句只有在大于等于该版本的 MySQL 中才能执行,即在 MySQL 4.1.1(4.01.01)及以上版本的 MySQL 中执行

  2. 上述注释语句中的第一条 SET 语句,是将当前系统变量 CHARACTER_SET_CLIENT 的值赋值给用户变量 @OLD_CHARACTER_SET_CLIENT

以下是在备份文件末尾会出现的注释语句,使用 SET 语句恢复服务器系统变量原来的值:

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

导入数据时禁止/激活索引

LOCK TABLES `td_appraise_dimension` WRITE;
/*!40000 ALTER TABLE `td_appraise_dimension` DISABLE KEYS */;
INSERT INTO `td_appraise_dimension` VALUES (1,'管理氛围',20,1),(2,'福利待遇',25,2),(3,'面试经历',15,3),(4,'实力前景',15,4),(5,'CEO能力',25,5);
/*!40000 ALTER TABLE `td_appraise_dimension` ENABLE KEYS */;
UNLOCK TABLES;

说明:

  1. DISABLE KEYS 是禁止索引
  2. ENABLE KEYS 是激活索引
  3. 在插入数据时,都会先禁止索引,再激活索引,这样可以节省导入数据的时间

测试禁止索引再导入数据的效率

有一个表 tbl1 的结构如下:

CREATE TABLE `tbl1` ( 
`id` int(10) unsigned NOT NULL auto_increment,
`name` char(20) NOT NULL default '',
PRIMARY KEY (`id`), 
KEY `name` (`name`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

该表里已经存在了 200 万条记录. 现在, 需要把 tbl1 中的所有记录全部导到另一个完全相同的表 tbl2 中去:

  1. 如果采用以下传统的方式, 则执行时间为: 98.01s
mysql>INSERT INTO tbl2 SELECT * FROM tbl1;
Query OK, 2000000 row affected (1 min 38.01 sec) Records: 2000000 Duplicates: 0 Warnings: 0
  1. 如果是用以下SQL语句, 则执行时间为: 80.85s (36.30 + 44.55)
mysql>ALTER TABLE tbl2 DISABLE KEYS; 
Query OK, 0 rows affected (0.00 sec) 
mysql>INSERT INTO tbl2 SELECT * FROM tbl1;
Query OK, 2000000 row affected (36.30 sec) Records: 2000000 Duplicates: 0 Warnings: 0 
mysql>ALTER TABLE tbl2 ENABLE KEYS;
Query OK, 0 rows affected (44.55 sec)

从上面的测试结果来看,在大批量导入时先禁用索引,在完全导入后, 再开启索引,一次性完成重建索引的效率会相对高很多,经过反复几次测试,感觉后者基本能比前者快 1.2 倍左右。这也就是 LOAD DATAL INFILE 相对较快的原因之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果android投屏,iphone怎么投屏到mac?苹果手机投屏到苹果电脑方法

iphone和mac的使用人群越来越多,其中投屏功能却难倒了大部分新手用户,许多使用iPhone以及Mac的用户朋友都还不知道iPhone怎么投屏到mac,好奇的用户朋友马上点击查看iphone投屏到mac教程来实现这个具有科技革新感的功能吧。官方推荐方法1:用数据线- 1.使用lightning线…

微服务java模块内存管理_Java 9模块服务

微服务java模块内存管理接线与查找 Java长期以来都有一个ServiceLoader类。 它是在1.6中引入的,但是自Java 1.2以来就使用了类似的技术。 一些软件组件使用了它,但是使用并不广泛。 它可以用于模块化应用程序(甚至更多)&#xff0…

学python多大年龄可以学车_多大年龄可以学驾照?

展开全部最少要满 18 岁才32313133353236313431303231363533e4b893e5b19e31333365656662可以考部分车型的《机动车驾驶证》一、根据《中华人民共和国公安部令》第十一条规定申请《机动车驾驶证》的人,应当符合下列规定1. 年龄条件(1)申请小型汽车、小型自动挡汽车、…

Linux 命令之chgrp -- 用来改变文件或目录所属的用户组

文章目录命令介绍常用选项参考示例(一)修改指定目录及其所含的文件的用户组(二)更改指定文件的用户组(三)把指定文件的所属群组设成和参考文件的所属群组相同命令介绍 chgrp 是英语单词“change group”的…

signature=02d2eb69b4d24e2f9bb2956f66089339,Signature Balancing

摘要:Signatures are an important part of the design of a ship. In an ideal situation, signatures must be as low as possible. However, due to budget constraints it is most unlikely to reach this ideal situation. The arising question is which leve…

使用实例工厂方法实例化_一些工厂实例

使用实例工厂方法实例化我时不时地发现自己摸索了一些旧代码,找到了“我在哪里做过类似工厂的事情”的示例。 上周再次发生这种情况时,我决定只查找所有示例,并创建一个示例项目和有关该示例的博客文章。 所以在这篇文章中,我&a…

linux内核设计与实现 epub_Epoll学习服务器的简单实现-Linux内核Epoll结构

1.Begins~有的人学习linux编程很久,只知道网络编程是socket,bind, listen。。。,然而这些都是网络通信软件最基本的接口。在某网络公司待了y,也了解到公司的基础就是网络转发 ,然而网络转发实现并非我们平时…

Linux 命令之 sftp -- 交互式的文件传输程序

文章目录一、命令介绍二、常用选项三、参考示例(一)使用 sftp 连接远程主机(二)使用 sftp 上传文件到远程主机(三)使用 sftp 从远程主机下载文件(四)查看远程主机的当前目录&#xf…

鸿蒙有安卓内核吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上,华为消费业务CEO 余承东,正式发布鸿蒙OS2.0,并宣布华为鸿蒙OS将全面启用全场景生态,并将于2020年12月发布手机版。余承东还表示,明年,华为的智能手机将全面升级,以支持鸿蒙操…

命名对象实体对象_我的对象命名

命名对象实体对象这是最常见的辩论之一。 大多数人对此主题有自己的见解,却没人能真正说出哪个是正确的。 我当然不能,但是尽管如此,我还是决定与大家分享我的想法,投入两美分,也许对某人会有帮助。 当我创建一个新类…

python查看关键字列表的命令是_Python 41 完整查询语句 和 一堆关键字

一:完整查询语句1、拷贝表 ***create table copy_table select *from customer ; 拷贝结构 与数据create table copy_table select *from customer where 0 > 1; 仅拷贝结构共同点: 索引 不能拷贝 描述不能拷贝(自增)[ ] 表示可选的{ }表示必选的增…

程序员的技术人生

文章目录第一阶段,高级程序员第二阶段,技术经理第三阶段,技术总监第四阶段,架构师第五阶段,CTO人们常常把 CTO、架构师、技术经理的头衔,乱授予技术负责人。在国内这种现象尤其严重。比如,一个初…

python csv转为html,在Python中将CSV转换为HTML表格

首先安装熊猫:pip install pandas然后运行:import pandas as pdcolumns [age, week, opp, ACscr, OPPscr, location]df pd.read_csv(Crushers.csv, namescolumns)# This you can change it to whatever you want to getage_15 df[df[age] U15]# Othe…

python椭圆拟合_opencv python 轮廓特征/凸包/外接矩形/外接圆/拟合矩形/拟合直线/拟合圆...

Contour Features1 图像的矩cv2.moments()图像的矩可以帮助计算物体的某些特征,如对象的质心,对象的区域等.代码:import cv2import numpy as npimg cv2.imread(img7.png,0)ret,thresh cv2.threshold(img,127,255,0)im2,contours,hierarchy …

RPM 软件包命名规范

文章目录命名格式示例命名格式 name-version-release.os.arch.rpm,软件名称-版本号-发布次数.适合linux系统.硬件平台.rpm name:程序名称 version:程序版本号 release:用于标识 RPM 包本身的发行号,其实就是软件包…

junit5和junit4_JUnit 5符合AssertJ

junit5和junit4JUnit 5在断言库中带来了很多改进,这主要归功于Java 8和Lambda Expression的支持以及新断言(如assertAll , assertTimeout或assertThrows 。 尽管我非常喜欢JUnit 5,但我相信AssertJ在生产级单元测试中仍然是必不可…

微信html人脸识别接口,微信人脸识别可视化的实现:

实现方式主要通过以下模块实现:DateFromWebChat (从网页版微信窗口下载好友头像)AI (识别模块,主要用于识别好友头像是否为人脸,并且计算人脸的数量与头像的总数且return)DateVisul (数据可视化模块,用与AI模块返回参数的可视化)u…

安卓手机端运行的adb工具_MQTT通信手机端接收生产车间设备运行信息3

应用场景:对车间重点设备的运行参数进行实时跟踪。比如烘干炉的烟囱温度、TNV的出口温度、喷漆室的温湿度、小时产量等等信息。以前这些信息的获取都需要在电脑端获取、相对比较繁琐。这里我们选择在手机端实现获取这些信息。尤其是对于作者这样的设备负责人而言&am…

Linux 命令之 tree -- 以树状图列出目录的内容/查看目录内容

文章目录一、命令介绍二、常用选项三、命令示例(一)按树形结构显示当前目录下的内容(二)按树状图显示当前目录下的所有目录名称而非文件(三)列出指定目录下的第一层级的文件和目录名称(四&#…

jsf 项目_您将在下一个项目中使用JSF吗?

jsf 项目上周有一篇很棒的stackoverflow博客文章,主题是“ Javascript框架的残酷生命周期” 。 这篇文章是关于Javascript UI框架(angularjs,angular,jquery和react)的流行和流行的速度。 这篇文章的关键指标是每月关于…