Oracle建表及使字段自增长

建表语句
  create table Student(
         StuId NUMBER NOT NULL,     --学生ID
         StuName VARCHAR2(10) NOT NULL, --名称
         Gender VARCHAR2(10)NOT NULL,  -- 性别
         Age NUMBER(2) NOT NULL,    -- 年龄     
         JoinDate DATE NULL,       --入学时间
         ClassId NUMBER NOT NULL,   --班级ID
         Address VARCHAR2(50) NULL   --家庭住址           
  ); 

如何使学生ID自增长?

创建序列
create sequence seq_id_emps
minvalue 1000
maxvalue 9999
start with 1001
increment by 1
cache 50
创建触发器
create trigger "emps_trig"
       before insert on emps
       referencing old as old new as new for each row
declare 
begin
       select seq_id_emps.nextval into :new.id from dual;
end emps_trig;
### MySQL 和 Oracle的语法规则及特点 #### 1. 基本语法结构 在 MySQL 中,创的基本语法如下: ```sql CREATE TABLE table_name ( column1 datatype constraints, column2 datatype constraints, ... ); ``` 而在 Oracle 中,创的语法略有不同: ```sql CREATE TABLE table_name ( column1 datatype [NOT NULL | PRIMARY KEY], column2 datatype [NOT NULL | PRIMARY KEY], ... ); ``` 这两种数据库管理系统都支持基本的数据类型定义和约束条件设置[^1]。 #### 2. 数据类型的差异 MySQL 支持多种数据类型,如 `INT`, `VARCHAR`, `TEXT` 等。对于日期时间类型,MySQL 提供了 `DATE`, `TIME`, `DATETIME`, `TIMESTAMP` 等选项。 Oracle 同样提供了丰富的数据类型,但在某些方面有所不同。例如,在 Oracle 中,字符型字段可以使用 `CHAR(n)` 或者 `VARCHAR2(n)` 来声明可变长度字符串;而对于大对象存储,则有 `CLOB`(Character Large Object) 和 `BLOB`(Binary Large Object)。 #### 3. 主键与唯一索引 两者都可以通过指定列属性来设定主键或唯一性约束。不过具体写法上存在细微差别: - **MySQL**: 使用关键字 `PRIMARY KEY` 直接跟在相应列后面; - **Oracle**: 可以采用同样的方式,也可以单独写出完整的约束达式形式,即先定义好各列再统一加上 `CONSTRAINT constraint_name PRIMARY KEY (column_list)` 这样的子句。 #### 4. 外键约束 在外键约束方面,两种系统的实现也有所区别。MySQL 中通常会这样示外键关系: ```sql FOREIGN KEY (local_column) REFERENCES remote_table(remote_column), ``` 相比之下,Oracle 更倾向于利用 `REFERENCES` 关键字完成这一操作: ```sql remote_column REFERENCES remote_table(local_column) ``` 值得注意的是,上述例子中的顺序正好相反,这反映了二者之间存在的显著差异之一[^2]。 #### 5. 自动增长/序列号机制 为了处理自动编号的需求,MySQL 实现了一个叫做 AUTO_INCREMENT 的功能,它允许某特定整数类型的列为每一行记录分配唯一的递增值。 然而,在 Oracle 中并没有直接对应的特性,而是借助于 SEQUENCE 对象配合触发器共同作用达到相似效果。SEQUENCE 是一种独立的对象,用于生成一系列连续数值,可用于模拟其他 DBMS 中的 auto-increment 行为。 ```sql -- MySQL 示例 id INT NOT NULL AUTO_INCREMENT, -- Oracle 示例 CREATE SEQUENCE seq_example START WITH 1 INCREMENT BY 1; INSERT INTO example VALUES(seq_example.NEXTVAL, 'value'); ``` #### 6. 默认值赋值 当希望给定默认初始值得时候,可以在定义新的同时指明该列应持有的缺省值。两者的做法大致相仿,只是具体的关键词可能不一样而已。 - **MySQL**:`DEFAULT value` - **Oracle**:`DEFAULT value` 尽管如此,由于各自所处平台特性的缘故,实际应用过程中仍需注意细节上的兼容性问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值