自动增量列:Oracle和MySQL之间SQL语法的差异
我是大学生,需要使用Oracle的iSQL * Plus提交课程.
我正在尝试使用以下SQL语句创建一个表: CREATE TABLE Category ( `id` INT(11) NOT NULL AUTO_INCREMENT,`title` VARCHAR (45) NULL,PRIMARY KEY (`id`) ); 这会产生以下消息:
它指的是勾号.所以我尝试了以下内容,使用单引号代替: CREATE TABLE Category ( 'id' INT(11) NOT NULL AUTO_INCREMENT,'title' VARCHAR (45) NULL,PRIMARY KEY ('id') ); 错误:
所以再试一次“ – 错误: ( "id" INT(11) NOT NULL AUTO_INCREMENT,*
如果我删除INT后面的(11),它将抱怨AUTO_INCREMENT属性. CREATE TABLE Category ( "id" INT NOT NULL AUTO_INCREMENT,"title" VARCHAR (45) NULL,PRIMARY KEY ("id") ); 我认为SQL是SQL,并且在这些非常基本的级别上没有真正的差异.我认为事情在更深层次上变得不同了? >我如何让我的陈述有效? 解决方法并非所有SQL都是相同的. Oracle和MySQL都不支持IDENTITY的实际SQL标准.Oracle不使用反引号…您实际上不需要引用您的标识符.最好不要这样,你最终无意中在标识符中使用了无效字符. Oracle数字称为NUMBER,可以采用可选的精度和比例. CREATE TABLE Category ( id NUMBER(11) NOT NULL,title VARCHAR2(45) NULL,PRIMARY KEY (id) ) 要执行AUTO_INCREMENT,请创建一个序列: CREATE SEQUENCE seq_category_id START WITH 1 INCREMENT BY 1; 然后当您插入表格时,执行以下操作: INSERT INTO category VALUES (seq_category_id.nextval,'some title'); 要自动执行此操作,例如AUTO_INCREMENT,请使用before insert触发器: -- Automatically create the incremented ID for every row: CREATE OR REPLACE trigger bi_category_id BEFORE INSERT ON category FOR EACH ROW BEGIN SELECT seq_category_id.nextval INTO :new.id FROM dual; END; 要么: -- Allow the user to pass in an ID to be used instead CREATE OR REPLACE TRIGGER bi_category_id BEFORE INSERT ON category FOR EACH ROW DECLARE v_max_cur_id NUMBER; v_current_seq NUMBER; BEGIN IF :new.id IS NULL THEN SELECT seq_category_id.nextval INTO :new.id FROM dual; ELSE SELECT greatest(nvl(max(id),0),:new.id) INTO v_max_cur_id FROM category; SELECT seq_category_id.nextval INTO v_current_seq FROM dual; WHILE v_current_seq < v_max_cur_id LOOP SELECT seq_category_id.nextval INTO v_current_seq FROM dual; END LOOP; END IF; END; 现在,就发现这些差异而言,您通常可以搜索“oracle identity”或“oracle auto_increment”之类的内容,以了解Oracle如何执行此操作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- flash cs5导出swc到flash builder4 And Late
- XML----DOM DELETE
- FMS3系列(五):通过FMS实现时时视频聊天(Flash|
- Swift CollectionViewCell重排
- react native unable to load script form asset
- rownum用法详解
- Ruby str.match(regex)返回仅包含第一个匹配项的
- Flash Professional / 处理 Flash 文档 XFL(XML
- 【potatoes游戏开发】cocos2dx3.X项目重写(八)
- Flex4+Spring3+Hibernate3+BlazeDS整合笔记