首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

Mysql的SQL模式

2023-11-09 来源:花图问答

mysql> select @@sql_mode;+--------------------------------------------+| @@sql_mode |+--------------------------------------------+| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |+--------------------------------------------+1 row in set (0.00 sec)
二、指定模式 5.6以后默认的my.cnf文件里模式配置是sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,所以启动指定这个配置文件时会自动带上这两个参数值 第一个参数值NO_ENGINE_SUBSTITUTION,是指不支持engine的sql将会报错,支不支持engin可以show engines查看 第二个参数值STRICT_TRANS_TABLES,是指当前会话的严格模式,区别于以往的空,即不严格的模式  还有其他有意思的参数,如no_auto_create_user等,可以参考官网 三、示例 1.在严格的模式下
mysql> select @@sql_mode;+--------------------------------------------+| @@sql_mode |+--------------------------------------------+| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |+--------------------------------------------+1 row in set (0.00 sec)mysql> create table tbl_kenyon(id int null,vname varchar(6));Query OK, 0 rows affected (0.12 sec)mysql> insert into tbl_kenyon values(1,‘123456‘);Query OK, 1 row affected (0.00 sec)mysql> insert into tbl_kenyon values(1,‘1234567‘);ERROR 1406 (22001): Data too long for column ‘vname‘ at row 1mysql> insert into tbl_kenyon values(‘‘,‘123456‘);ERROR 1366 (HY000): Incorrect integer value: ‘‘ for column ‘id‘ at row 1mysql> insert into tbl_kenyon values(null,‘123456‘);Query OK, 1 row affected (0.01 sec)mysql> select * from tbl_kenyon;+------+--------+| id | vname |+------+--------+| 1 | 123456 || NULL | 123456 |+------+--------+2 rows in set (0.00 sec)
2.在非严格的模式下
mysql> set @@sql_mode=‘‘;Query OK, 0 rows affected (0.00 sec)mysql> select @@sql_mode;+------------+| @@sql_mode |+------------+| |+------------+1 row in set (0.00 sec)mysql> insert into tbl_kenyon values(99,‘123456‘);Query OK, 1 row affected (0.00 sec)mysql> insert into tbl_kenyon values(1,‘1234567‘);Query OK, 1 row affected, 1 warning (0.00 sec)mysql> insert into tbl_kenyon values(‘‘,‘123456‘);Query OK, 1 row affected, 1 warning (0.00 sec)mysql> show warnings;+---------+------+------------------------------------------------------+| Level | Code | Message |+---------+------+------------------------------------------------------+| Warning | 1366 | Incorrect integer value: ‘‘ for column ‘id‘ at row 1 |+---------+------+------------------------------------------------------+1 row in set (0.00 sec)mysql> select * from tbl_kenyon;+------+--------+| id | vname |+------+--------+| 1 | 123456 || NULL | 123456 || 99 | 123456 || 1 | 123456 || 0 | 123456 |+------+--------+5 rows in set (0.00 sec)
四、 应用场景 两种模式各有利弊,通常生产上会设置严格模式,可以保证数据的完整性; 非严格模式并不一定就是差的,在数据一致性要求不严的场景下某些忽略警告操作可能更方便,比如不同版本数据库的非关键数据导入: mysql> load data infile ‘/data/source_data/trace/tbl_msg.sql‘ into table tbl_msg; ERROR 1366 (HY000): Incorrect integer value: ‘NULL‘ for column ‘pid‘ at row 1 换个模式导入: mysql> set @@session.sql_mode=‘‘; Query OK, 0 rows affected (0.00 sec) mysql> load data infile ‘/data/source_data/trace/tbl_msg.sql‘ into table tbl_msg; Query OK, 23525 rows affected, 65535 warnings (2.80 sec) Records: 23525 Deleted: 0 Skipped: 0 Warnings: 185707 五、参考: https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html

Mysql的SQL模式

标签:

小编还为您整理了以下内容,可能对您也有帮助:

MySQL中SQL模式的特点总结

mysql中sql块的用法:

1、使用非默认的排序,例如使用213之类的排序

可以使用如下方法

SELECT DISTINCTpg.part_grp_id,pg.part_grp_name,pg.equip_category_idFROMcost_part_grp pg,cost_part_kit pk,cost_part_event peWHEREpe.mdl_ver_id IN (SELECTs.mdl_ver_idFROMcost_fleet_model sWHEREs.fleet_id = 1002)AND pe.part_kit_id = pk.part_kit_idAND pk.part_grp_id = pg.part_grp_idORDER BYCASE pg.equip_category_idWHEN 2 THEN1WHEN 1 THEN2WHEN 4 THEN3ELSE4END

2、mysql更新替换某一个字段中的特定字符串

UPDATE t_bss_employeesSET mobilephone = REPLACE (mobilephone, "2129", "0000")WHEREid IN (SELECTa.idFROM(SELECTidFROMt_bss_employeesWHEREmobilephone IN ('18121299262','18121299247','18121299206','18121299209')) AS a)

将mobilephone字段中的2129字符串替换为0000

使用当前表为条件更新当前表。需要在条件处再添加一个()构建一个虚拟表

3、求比例的sql

select a.style, ROUND( b.num / a.sum * 100, 2 ) as styleRate from (SELECT count(qspc.id) sum ,qq.style stylefrom t_qc_security_plan_comment qspc inner join t_qc_question qqon qq.id = qspc.question_idLEFT JOIN t_qc_address qa ON qa.id = qspc.address_idLEFT JOIN t_system_organ so on qa.hospital = so.idWHERE qq.scr_level is not NULLand qq.type = 3 and so.tenant_code = 'zzyy'GROUP BY style) a left join (SELECT count(qspc.id) num ,qq.style stylefrom t_qc_security_plan_comment qspc inner join t_qc_question qqon qq.id = qspc.question_idLEFT JOIN t_qc_address qa ON qa.id = qspc.address_idLEFT JOIN t_system_organ so on qa.hospital = so.idWHERE qq.scr_level is not NULLand qq.type = 3 and so.tenant_code = 'zzyy'and qspc.is_bad =0GROUP BY style) b on a.style = b.style

计算逻辑是分别求总数和平均数。然后两数相除再用round求精度

更多相关免费学习推荐:mysql教程(视频)

MySQL中SQL模式的特点总结

mysql中sql块的用法:

1、使用非默认的排序,例如使用213之类的排序

可以使用如下方法

SELECT DISTINCTpg.part_grp_id,pg.part_grp_name,pg.equip_category_idFROMcost_part_grp pg,cost_part_kit pk,cost_part_event peWHEREpe.mdl_ver_id IN (SELECTs.mdl_ver_idFROMcost_fleet_model sWHEREs.fleet_id = 1002)AND pe.part_kit_id = pk.part_kit_idAND pk.part_grp_id = pg.part_grp_idORDER BYCASE pg.equip_category_idWHEN 2 THEN1WHEN 1 THEN2WHEN 4 THEN3ELSE4END

2、mysql更新替换某一个字段中的特定字符串

UPDATE t_bss_employeesSET mobilephone = REPLACE (mobilephone, "2129", "0000")WHEREid IN (SELECTa.idFROM(SELECTidFROMt_bss_employeesWHEREmobilephone IN ('18121299262','18121299247','18121299206','18121299209')) AS a)

将mobilephone字段中的2129字符串替换为0000

使用当前表为条件更新当前表。需要在条件处再添加一个()构建一个虚拟表

3、求比例的sql

select a.style, ROUND( b.num / a.sum * 100, 2 ) as styleRate from (SELECT count(qspc.id) sum ,qq.style stylefrom t_qc_security_plan_comment qspc inner join t_qc_question qqon qq.id = qspc.question_idLEFT JOIN t_qc_address qa ON qa.id = qspc.address_idLEFT JOIN t_system_organ so on qa.hospital = so.idWHERE qq.scr_level is not NULLand qq.type = 3 and so.tenant_code = 'zzyy'GROUP BY style) a left join (SELECT count(qspc.id) num ,qq.style stylefrom t_qc_security_plan_comment qspc inner join t_qc_question qqon qq.id = qspc.question_idLEFT JOIN t_qc_address qa ON qa.id = qspc.address_idLEFT JOIN t_system_organ so on qa.hospital = so.idWHERE qq.scr_level is not NULLand qq.type = 3 and so.tenant_code = 'zzyy'and qspc.is_bad =0GROUP BY style) b on a.style = b.style

计算逻辑是分别求总数和平均数。然后两数相除再用round求精度

更多相关免费学习推荐:mysql教程(视频)

教你如何在MySQL命令行中使用SQL语句的规则_MySQL

规则1: SQL语句必须以分号(;)或者(G)结束

分号(;)是SQL语句的结束标志。如果遗忘了分号,而直接按下回车键时,在MySQL客户端上将显示如下

mySQL> SELECT * FROM customer

因为没有以分号结束,客户端认为SQL语句并没有结束,显示[]等待用户继续输入命令,直到以分号结束。有些数据库中,支持省略最后的分号的情况。

规则2: 保留关键字不区分大小写

保留关键字是SQL中事先定义好的关键字,如上面检索语句中的SELECT、FROM等就属于保留关键字。在SQL中这些保留关键字是不区分大小写的。也就是说以下的语句都能正确地

被执行。

mySQL> SELECT * FROM customer;

mySQL> select * FROM customer;

mySQL> SeLecT * FROM customer;

但是,一般情况下在编写SQL时,还是要尽量统一保留关键字的大小。例如,以大写字母的形式写保留关键字,以小写字母的形式写表或列名, SQL语句也会看起来一目了然。另外,根据使用的数据库的不同,有的数据库中是区分表或列名的大小写的。

规则3: 可自由地加入空白或换行符

在SQL语句的中间,可以自由地加入空格或换行符,例如以下语言是可以被正确执行的。

mySQL> SELECT *

FROM customer;

mySQL> SELECT

*

FROM

customer;

但是,在一个关键字的中间加入空格或改行符是不合法的。

一个SQL语句可以作为一行来编写,但是对那些比较长的语旬,可以在其中加入适当的改行符,这样方便阅读。

以命令语句为单位换行是一个可以参考的标准,例如,在SELECT语句中将检索对象列名一一列出,而下一行的FROM命令后列出检索对象表名,这样整个SQL语句看起来层次分明。

另外,在列名或表名后也可以换行,例如,将SELECT单独列一行,其后的检索对象列名前加入一个缩进(tab)后,将所有的列名一一行单独列出。

规则4: 使用[--]或[/* ...*/]加注释

在SQL语句中可以加入注释的。注释是不被DBMS解释的信息。注释又分为单行注释,以及多行注释。单行注释以两个[-]开头, 直到一行的末尾部被看作注释。多行注释是由[/*]与[*/]包含起来的字符串组成。.

mySQL> SELECT * FROM customer; --THIS IS COMMENTS

mysql>/*this

/*>is

/*>comments*/

显示全文