1.1 使用 INSERT…VALUES 语句插入数据( 六 )


(2)TABLE 操作比操作使用的系统和事务日志资源少 。语句每删除一行都会在事务日志中添加一行记录 , 而TABLE 语句是通过释放存储表数据所用的数据页来删除数据的 , 因此只在事务日志中记录页的释放 。
阿里开发规范 【参考】:TABLE 比速度快 , 且使用的系统和事务日志资源少 , 但无事务且不触发  , 有可能造成事故 , 故不建议在开发代码中使用此语句 。
(3) 对于参与了索引和视图的表 , 不能使用TABLE 语句来删除数据 , 而应该使用语句 。
3.4 补充: DCL 中和
:提交数据 。一旦执行  , 则数据就被永久的保存在了数据库中 , 意味着数据不可以回滚 。
:回滚数据 。一旦执行  , 则可以实现数据的回滚 。回滚到最近的一次之后 。对比TABLE 和FROM , 演示FROM 如下所示:
mysql> COMMIT;Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM tb_admin1;+----+--------+----------+------------+| id | user| password | createtime |+----+--------+----------+------------+|3 | amo123 | amo123| NULL||4 | amo| amo123| NULL|+----+--------+----------+------------+2 rows in set (0.00 sec)mysql> SET autocommit = FALSE;Query OK, 0 rows affected (0.00 sec)mysql> DELETE FROM tb_admin1;Query OK, 2 rows affected (0.00 sec)mysql> SELECT * FROM tb_admin1;Empty set (0.00 sec)mysql> ROLLBACK;Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM tb_admin1;+----+--------+----------+------------+| id | user| password | createtime |+----+--------+----------+------------+|3 | amo123 | amo123| NULL||4 | amo| amo123| NULL|+----+--------+----------+------------+2 rows in set (0.00 sec)
演示TABLE 如下所示:
mysql> COMMIT;Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM tb_admin1;+----+--------+----------+------------+| id | user| password | createtime |+----+--------+----------+------------+|3 | amo123 | amo123| NULL||4 | amo| amo123| NULL|+----+--------+----------+------------+2 rows in set (0.00 sec)mysql> SET autocommit = FALSE;Query OK, 0 rows affected (0.00 sec)mysql> TRUNCATE TABLE tb_admin1;Query OK, 0 rows affected (0.01 sec)mysql> SELECT * FROM tb_admin1;Empty set (0.00 sec)mysql> ROLLBACK;Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM tb_admin1;Empty set (0.00 sec)
3.5 补充: 新特性:计算列
什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的 。例如 , a 列值为1、b 列值为2 , c 列不需要手动插入 , 定义 a+b 的结果为 c 的值 , 那么 c 就是计算列 , 是通过别的列计算得来的 。在 MySQL 8.0 中 ,  TABLE 和 ALTER TABLE 中都支持增加计算列 。下面以TABLE 为例进行讲解 。举例:定义数据表 tb1 , 然后定义字段 id、字段 a、字段 b 和字段 c , 其中字段 c 为计算列 , 用于计算 a+b 的值 。示例如下:
mysql> CREATE TABLE tb1(-> id INT, a INT, b INT,-> c INT GENERATED ALWAYS AS (a + b) VIRTUAL-> );Query OK, 0 rows affected (0.01 sec)mysql> INSERT INTO tb1(a, b) VALUES(10, 20);Query OK, 1 row affected (0.01 sec)mysql> SELECT * FROM tb1;+------+------+------+------+| id| a| b| c|+------+------+------+------+| NULL |10 |20 |30 |+------+------+------+------+1 row in set (0.00 sec)mysql> #更新数据中的数据 , 语句如下:mysql> UPDATE tb1 SET a=40;Query OK, 1 row affected (0.00 sec)Rows matched: 1Changed: 1Warnings: 0mysql> SELECT * FROM tb1;+------+------+------+------+| id| a| b| c|+------+------+------+------+| NULL |40 |20 |60 |+------+------+------+------+1 row in set (0.00 sec)