# 使用函数

__*ERROR_FOR_DIVISION_BY_ZERO SQL 模式*__
__*函数基础知识*__

+ 函数可以在任何接受表达式的地方使用
+ 大多数函数都需要参数才能执行  
+ 列可以用作参数
+ 一个函数的输出可以用作另一个函数的输入
+ 数学函数在出错时返回 NULL 值
  + 例如,除以零
    + 在 `ERROR_FOR_DIVISION_BY_ZERO` SQL 模式下,试图使用其返回值进行 `INSERT/DELETE` 时会报错
      + `ERROR 1365 (22012): Division by 0` 

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

以下操作出错的原因是数学运算违反了 `ERROR_FOR_DIVISION_BY_ZERO` SQL 模式:

```
tidb> desc test.dropme;
+-------+---------+------+------+---------+-------+
| Field | Type    | Null | Key  | Default | Extra |
+-------+---------+------+------+---------+-------+
| id    | int(11) | YES  |      | NULL    |       |
+-------+---------+------+------+---------+-------+
1 row in set (0.00 sec)

tidb> SELECT 8/0;
+------+
| 8/0  |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.01 sec)

tidb> INSERT INTO test.dropme (8/0);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 26 near "8/0)" 
tidb> SELECT @@SQL_MODE;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@SQL_MODE                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
```