



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MySQL自增长与Oracle序列的区别: 自增长只能用于表中的其中一个字段 自增长只能被分配给固定表的固定的某一字段,不能被多个表共用. 自增长会把一个未指定或NULL值的字段自动填上. 在mysql中添加序列,请看下面的实例: 在MYSQL里有这样一张表: Java代码 1. CREATE TABLE Movie( 2. id INT NOT NULL AUTO_INCREMENT, 3. name VARCHAR(60) NOT NULL, 4. released YEAR NOT NULL, 5. PRIMARY KEY (id) 6. ) ENGINE=InnoDB; CREATE TABLE Movie(id INT NOT NULL AUTO_INCREMENT,name VARCHAR(60) NOT NULL,released YEAR NOT NULL,PRIMARY KEY (id) ENGINE=InnoDB;Java代码 1. INSERT INTO Movie (name,released) VALUES (Gladiator,2000); 2. INSERT INTO Movie (id,name,released) VALUES (NULL,The Bourne Identity,1998); INSERT INTO Movie (name,released) VALUES (Gladiator,2000);INSERT INTO Movie (id,name,released) VALUES (NULL,The Bourne Identity,1998);在ORACLE是这样的: Java代码 1. CREATE TABLE Movie( 2. id INT NOT NULL, 3. name VARCHAR2(60) NOT NULL, 4. released INT NOT NULL, 5. PRIMARY KEY (id) 6. ); 7. CREATE SEQUENCE MovieSeq; CREATE TABLE Movie(id INT NOT NULL,name VARCHAR2(60) NOT NULL,released INT NOT NULL,PRIMARY KEY (id);CREATE SEQUENCE MovieSeq;Java代码 1. INSERT INTO Movie (id,name,released) VALUES (MovieSeq.NEXTVAL,Gladiator,2000); INSERT INTO Movie (id,name,released) VALUES (MovieSeq.NEXTVAL,Gladiator,2000);在oracle下为表添加一个触发器,就可以实现mysql自增长功能: Java代码 1. CREATE OR REPLACE TRIGGER BRI_MOVIE_TRG 2. BEFORE INSERT ON Movie 3. FOR EACH ROW 4. BEGIN 5. SELECT MovieSeq.NEXTVAL INTO :new.id FROM DUAL; 6. END BRI_MOVIE_TRG; 7. . 8. RUN; CREATE OR REPLACE TRIGGER BRI_MOVIE_TRGBEFORE INSERT ON MovieFOR EACH ROWBEGIN SELECT MovieSeq.NEXTVAL INTO :new.id FROM DUAL;END BRI_MOVIE_TRG;.RUN;这样,插件记录就可以成为MYSQL风格: Java代码 1. INSERT INTO Movie (name,released) VALUES (The Lion King,1994); INSERT INTO Movie (name,released) VALUES (The Lion King,1994);下面我们来看看如何在mysql数据里使用Oracle序列语法.NEXTVAL 和 .CURVAL. 我们假设在mysql中序列的语法是: NEXTVAL(sequence); CURRVAL(sequence); SETVAL(sequence,value);下面就是CURRRVAL的实现方案: Java代码 1. DROP TABLE IF EXISTS sequence; 2. CREATE TABLE sequence ( 3. name VARCHAR(50) NOT NULL, 4. current_value INT NOT NULL, 5. increment INT NOT NULL DEFAULT 1, 6. PRIMARY KEY (name) 7. ) ENGINE=InnoDB; 8. INSERT INTO sequence VALUES (MovieSeq,3,5); 9. DROP FUNCTION IF EXISTS currval; 10. DELIMITER $ 11. CREATE FUNCTION currval (seq_name VARCHAR(50) 12. RETURNS INTEGER 13. CONTAINS SQL 14. BEGIN 15. DECLARE value INTEGER; 16. SET value = 0; 17. SELECT current_value INTO value 18. FROM sequence 19. WHERE name = seq_name; 20. RETURN value; 21. END$ 22. DELIMITER ; DROP TABLE IF EXISTS sequence;CREATE TABLE sequence (name VARCHAR(50) NOT NULL,current_value INT NOT NULL,increment INT NOT NULL DEFAULT 1,PRIMARY KEY (name) ENGINE=InnoDB;INSERT INTO sequence VALUES (MovieSeq,3,5);DROP FUNCTION IF EXISTS currval;DELIMITER $CREATE FUNCTION currval (seq_name VARCHAR(50)RETURNS INTEGERCONTAINS SQLBEGIN DECLARE value INTEGER; SET value = 0; SELECT current_value INTO value FROM sequence WHERE name = seq_name; RETURN value;END$DELIMITER ;测试一下结果: Java代码 1. mysql SELECT currval(MovieSeq); 2. +-+ 3. | currval(MovieSeq) | 4. +-+ 5. |3 | 6. +-+ 7. 1 row in set (0.00 sec) 8. mysql SELECT currval(x); 9. +-+ 10. | currval(x) | 11. +-+ 12. |0 | 13. +-+ 14. 1 row in set, 1 warning (0.00 sec) 15. mysql show warnings; 16. +-+-+-+ 17. | Level | Code | Message | 18. +-+-+-+ 19. | Warning | 1329 | No data to FETCH | 20. +-+-+-+ 21. 1 row in set (0.00 sec) mysql SELECT currval(MovieSeq);+-+| currval(MovieSeq) |+-+| 3 |+-+1 row in set (0.00 sec)mysql SELECT currval(x);+-+| currval(x) |+-+| 0 |+-+1 row in set, 1 warning (0.00 sec)mysql show warnings;+-+-+-+| Level | Code | Message |+-+-+-+| Warning | 1329 | No data to FETCH |+-+-+-+1 row in set (0.00 sec)nextval Java代码 1. DROP FUNCTION IF EXISTS nextval; 2. DELIMITER $ 3. CREATE FUNCTION nextval (seq_name VARCHAR(50) 4. RETURNS INTEGER 5. CONTAINS SQL 6. BEGIN 7. UPDATE sequence 8. SET current_value = current_value + increment 9. WHERE name = seq_name; 10. RETURN currval(seq_name); 11. END$ 12. DELIMITER ; DROP FUNCTION IF EXISTS nextval;DELIMITER $CREATE FUNCTION nextval (seq_name VARCHAR(50)RETURNS INTEGERCONTAINS SQLBEGIN UPDATE sequence SET current_value = current_value + increment WHERE name = seq_name; RETURN currval(seq_name);END$DELIMITER ;Java代码 1. mysql select nextval(MovieSeq); 2. +-+ 3. | nextval(MovieSeq) | 4. +-+ 5. |15 | 6. +-+ 7. 1 row in set (0.09 sec) 8. 9. mysql select nextval(MovieSeq); 10. +-+ 11. | nextval(MovieSeq) | 12. +-+ 13. |20 | 14. +-+ 15. 1 row in set (0.01 sec) 16. 17. mysql select nextval(MovieSeq); 18. +-+ 19. | nextval(MovieSeq) | 20. +-+ 21. |25 | 22. +-+ 23. 1 row in set (0.00 sec) mysql select nextval(MovieSeq);+-+| nextval(MovieSeq) |+-+| 15 |+-+1 row in set (0.09 sec)mysql select nextval(MovieSeq);+-+| nextval(MovieSeq) |+-+| 20 |+-+1 row in set (0.01 sec)mysql select nextval(MovieSeq);+-+| nextval(MovieSeq) |+-+| 25 |+-+1 row in set (0.00 sec)setval Java代码 1. DROP FUNCTION IF EXISTS setval; 2. DELIMITER $ 3. CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER) 4. RETURNS INTEGER 5. CONTAINS SQL 6. BEGIN 7. UPDATE sequence 8. SET current_value = value 9. WHERE name = seq_name; 10. RETURN currval(seq_name); 11. END$ 12. DELIMITER ; DROP FUNCTION IF EXISTS setval;DELIMITER $CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)RETURNS INTEGERCONTAINS SQLBEGIN UPDATE sequence SET current_value = value WHERE name = seq_name; RETURN currval(seq_name);END$DELIMITER ;Java代码 1. mysql select setval(MovieSeq,150); 2. +-+ 3. | setval(MovieSeq,150) | 4. +-+ 5. |150 | 6.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度水电暖设施设备采购及安装服务合同范本
- 2025版售楼部建筑施工与物业管理服务合同
- 2025年特色商业街门面房屋租赁服务协议
- 2025年农旅融合项目特色烧鸭供应链合作协议
- 河北省安平县2025年上半年公开招聘城市协管员试题含答案分析
- 2025年度厨房设备环保检测与认证服务合同
- 2025年度食堂废弃物处理承包合同范例
- 2025第二行政小区垃圾分类宣传与保洁服务合同
- 2025版食用油企业安全生产责任书合同范本
- 贵州省湄潭县2025年上半年公开招聘村务工作者试题含答案分析
- 历史 2024-2025学年部编版七年级历史下学期期末问答式复习提纲
- 2025年中国邮政集团有限公司北京分公司招聘笔试冲刺题(带答案解析)
- 学校物业服务应急事件处理预案
- 单位车辆管理委托协议书示例3篇
- 人工智能赋能教育:技术变革与教学创新
- 木制棺木项目可行性研究报告
- 2023年高考生物试卷(福建)(答案卷)
- 跨国知识产权争议解决机制-全面剖析
- 孔子的故事课件
- 直肠癌护理疑难病例讨论
- 妇产科危重护理常规、应急预案、工作流程
评论
0/150
提交评论