测试内容
MySQL数据库中注释方式验证
测试验证
1.单行注释
使用"#“或者”-- ",-- 后面有空格,否则不代表注释,代表两个减号
mysql> select #1,
-> 2 ;
+---+
| 2 |
+---+
| 2 |
+---+
1 row in set (0.00 sec)
mysql> select -- 1,
-> 2;
+---+
| 2 |
+---+
| 2 |
+---+
1 row in set (0.00 sec)
--后面没有加空格,不能进行注释,此处作为了数学表达式,负负得正显示为 1
mysql> select --1,
-> 2;
+-----+---+
| --1 | 2 |
+-----+---+
| 1 | 2 |
+-----+---+
1 row in set (0.00 sec)
2.多行注释
/*
多行注释内容
*/
mysql> select /* --1,
/*> -- 1,
/*> */
-> 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
3./!version-number SQL/
这种注释在mysql中叫做内联注释,后面接数据库版本号时,当实际的版本等于或是高于那个字符串,应用程序就会将注释内容解释为SQL,否则就会当做注释来处理。当没有接版本号时,是会执行里面的内容的。
/*!50013 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!50503 SET NAMES utf8mb4 */;
/*!80000 SET SESSION information_schema_stats_expiry=0 */
'/' '*' '!', followed by exactly
第1位: 主版本号(VERSION_MAJOR)
第2,3位:小版本号(VERSION_MINOR)
第4,5位:Patch号(VERSION_PATCH)
示例:
50013 -> 5.0.13
50735 -> 5.7.35
80034 -> 8.0.34
/*!50013 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 表示当MySQL版本为5.0.13或更高版本时,会执行 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT 命令;低于5.0.13 则此行会当成注释。
举例说明:
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.34 |
+-----------+
1 row in set (0.00 sec)
--数据库版本为8.0.34 高于 8.0.23 ,此处执行了invisible
mysql> CREATE TABLE test1 (a INT, b DATE /*!80023 INVISIBLE */);
Query OK, 0 rows affected (0.08 sec)
mysql> show create table test1 ;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
`a` int DEFAULT NULL,
`b` date DEFAULT NULL /*!80023 INVISIBLE */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
--数据库版本为8.0.34 低于 8.0.38 ,此处未执行invisible
mysql> CREATE TABLE test2 (a INT, b DATE /*!80038 INVISIBLE */);
Query OK, 0 rows affected (0.04 sec)
mysql> show create table test2;
+-------+----------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------+
| test2 | CREATE TABLE `test2` (
`a` int DEFAULT NULL,
`b` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+----------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
--表test1的b列为隐藏列,此处插入按照不存在的列处理
mysql> insert into test1 values(1,now());
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into test1 values(1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test2 values(1,now());
Query OK, 1 row affected, 1 warning (0.01 sec)
--隐藏的列查询不出来
mysql> select * from test1;
+------+
| a |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql> select * from test2;
+------+------------+
| a | b |
+------+------------+
| 1 | 2023-10-12 |
+------+------------+
1 row in set (0.00 sec)
最后修改时间:2023-10-30 15:23:07
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




