Oracle数据库触发器实现主键自动增长

需积分: 2 2 下载量 22 浏览量 更新于2024-08-26 收藏 4.59MB PPT 举报
"示例使用触发器完成主键自增-Oracle数据库" 在Oracle数据库中,触发器是一种数据库对象,它允许在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行预定义的PL/SQL代码。在这个示例中,`MY_TGR`是一个在`tab_user`表上定义的BEFORE INSERT触发器,用于在插入新行前自动为`id`列分配一个递增的主键值。触发器的定义如下: ```sql create or replace trigger MY_TGR before insert on tab_user for each row declare next_id number; begin select MY_SEQ.nextval into next_id from dual; :new.id:=next_id; end; ``` 这个触发器的工作原理是,在每次向`tab_user`表中插入新行时,会先从名为`MY_SEQ`的序列对象中获取下一个值,并将其赋给新行的`id`字段。`:new`关键字在这里代表了即将被插入的行,`:new.id`则指代该行的`id`字段。 接下来,我们来讨论`ORDER BY`子句在SQL查询中的应用。`ORDER BY`是用于指定查询结果中行的排序方式的关键字。默认情况下,查询结果的顺序是未定义的,因此使用`ORDER BY`可以确保数据按照特定的条件进行排序。 `ORDER BY`子句的基本语法如下: ```sql SELECT expr FROM table [WHERE condition(s)] [ORDER BY {column,expr}[ASC|DESC]]; ``` - `expr`:表示要选择的列或表达式。 - `table`:是要从中查询数据的表名。 - `WHERE condition(s)`:可选,用于筛选满足条件的行。 - `ORDER BY column,expr`:指定用于排序的列名或表达式,可以是列的别名。 - `ASC`或`DESC`:可选,分别表示升序和降序排序。如果不指定,默认为升序(ASC)。 默认的排序顺序是升序,对于数值列,最小值会显示在前面;日期列则按最早的日期排列;字符列按字母顺序排列,从A到Z;而NULL值在升序排序中会出现在最后,在降序排序中则会出现在最前。 你还可以在`ORDER BY`子句中使用别名,例如,如果你已经为列定义了别名`annual_salary`,可以直接在`ORDER BY`中使用它来对数据进行排序。同时,如果需要根据多列进行排序,可以在`ORDER BY`中列出所有列,用逗号分隔。例如,如果你想首先按照`column1`排序,然后在同一组内再按照`column2`排序,可以这样写: ```sql SELECT * FROM table ORDER BY column1, column2; ``` 这将首先按`column1`排序,对于`column1`值相同的行,则按`column2`排序。注意,`ORDER BY`的列数量理论上不受限制,但实际使用中应考虑性能因素,过多的排序列可能导致查询效率下降。