SELECT MAX(INSERT_TIME) FROM USER_TAB_MODIFICATIONS WHERE TABLE_NAME = 'your_table_name'; 语句提示没有INSERT_TIME字段怎么回事
时间: 2023-07-16 12:15:50 浏览: 48
`USER_TAB_MODIFICATIONS` 表记录了表的修改历史,但是并不是所有的表都会被记录,需要开启数据库的 `ROW MOVEMENT` 功能。另外,在 Oracle 11g 以后,`INSERT_TIME` 字段已经被废弃,应该使用 `TIMESTAMP` 字段。
你可以使用以下语句查询 `USER_TAB_MODIFICATIONS` 表中可用的字段:
```
SELECT COLUMN_NAME FROM USER_TAB_COLS WHERE TABLE_NAME = 'USER_TAB_MODIFICATIONS';
```
在这个表中,常用的字段包括:
- `TABLE_NAME`:被修改的表名
- `TIMESTAMP`:最后一次修改的时间戳
- `OPERATION`:最后一次修改的操作类型,包括 `INSERT`、`UPDATE` 和 `DELETE`
- `USERNAME`:最后一次修改的用户名称
所以,你可以使用以下语句查询最后一次修改的时间:
```
SELECT MAX(TIMESTAMP) FROM USER_TAB_MODIFICATIONS WHERE TABLE_NAME = 'your_table_name';
```
相关问题
关于mysql参数lock_wait_timeout的案例
假设有两个事务 A 和 B,它们都需要访问一张名为 `account` 的表,并且事务 A 先于事务 B 开始执行。在事务 A 中,我们执行以下语句:
```sql
begin;
select * from account where id = 1 for update;
-- do some modifications
commit;
```
在事务 B 中,我们执行以下语句:
```sql
begin;
select * from account where id = 1 for update;
```
由于事务 A 在执行期间一直持有 `id=1` 的行的排它锁,因此事务 B 会一直等待,直到事务 A 释放锁为止。
如果在这个时候,我们将 `lock_wait_timeout` 参数设置为 5 秒,并且事务 B 已经等待了 6 秒,那么 MySQL 就会自动结束事务 B 并回滚所有修改操作,以避免无限等待锁的情况。
需要注意的是,如果事务 B 中的语句不是 `select`,而是 `insert`、`update` 或 `delete` 等会修改数据的语句,那么 MySQL 会自动将其阻塞,直到事务 A 释放锁为止,不会像 `select` 语句一样自动结束事务 B。
关于mysql参数 lock_wait_timeout 和 innodb_lock_wait_timeout 的案例
假设有两个事务 A 和 B,它们都需要访问一张名为 `account` 的表,并且事务 A 先于事务 B 开始执行。在事务 A 中,我们执行以下语句:
```sql
begin;
select * from account where id = 1 for update;
-- do some modifications
commit;
```
在事务 B 中,我们执行以下语句:
```sql
begin;
select * from account where id = 1 for update;
```
由于事务 A 在执行期间一直持有 `id=1` 的行的排它锁,因此事务 B 会一直等待,直到事务 A 释放锁为止。
假设 `lock_wait_timeout` 参数被设置为 10 秒,而 `innodb_lock_wait_timeout` 参数被设置为 5 秒。
当事务 B 等待时间超过 5 秒时,InnoDB 引擎会自动检测到这个超时,并自动结束事务 B,回滚事务中的所有修改操作,以避免无限等待锁的情况。
而如果事务 B 等待时间超过 10 秒,MySQL 会自动结束事务 B,并回滚事务中的所有修改操作。
需要注意的是,`lock_wait_timeout` 参数只适用于当前会话,而 `innodb_lock_wait_timeout` 参数是 InnoDB 引擎的全局参数,适用于所有会话。同时,如果 `lock_wait_timeout` 参数的值大于 `innodb_lock_wait_timeout` 参数的值,那么 `innodb_lock_wait_timeout` 参数的值会被覆盖,即事务 B 最长只会等待 `innodb_lock_wait_timeout` 参数设定的时间。