怎么更改数据库表中的值?

怎么更改数据库表中的值?,第1张

1、首先打开SQL Server Management管理工具,使用sql语句创建一张测试表。

2、在测试表中,插入3条测试数据

3、使用一条语句批量修改整个表的数据。

4、使用一条语句批量修改指定条数的记录。

5、使用一条语句批量修改这三条数据(按条件修改值)。

6、使用一条语句批量修改数据,使用where和case when。

流水号格式:

P + 年四位月两位流水号三位

例如:

P20130203001

P20130203999

CREATE TABLE TEST_SEQNO (

SEQNO VARCHAR(10) PRIMARY KEY,

VALVARCHAR(20)

)

方案一:使用 序列号 + 触发器 + 存储过程 + 数据库作业

-- 序列号

CREATE SEQUENCE seq_testno

increment by 1-- 每次递增1

start with 1 -- 从1开始

nomaxvalue -- 没有最大值

minvalue 1 -- 最小值=1

NOCYCLE

-- 触发器.

CREATE OR REPLACE TRIGGER tr_test_seqno

BEFORE INSERT ON TEST_SEQNO

FOR EACH ROW

BEGIN

SELECT

'P' || TO_CHAR(sysdate, 'YYYYMM') || TRIM(TO_CHAR(seq_testno.nextval, '000')) INTO :new.SEQNO

FROM

dual

END

/

-- 测试

SQL>INSERT INTO TEST_SEQNO(VAL) VALUES('T1.1')

已创建 1 行。

SQL>SELECT * FROM TEST_SEQNO

SEQNOVAL

-------------------- ----------------------------------------

P201302001 T1.1

-- 用于 重置序列号的 存储过程.

CREATE OR REPLACE PROCEDURE ResetSeqTestno

-- 注:由于动态SQL 里面,创建序列号,

-- 如果不加下面这行,执行将报错 “ORA-01031: 权限不足”

AUTHID CURRENT_USER

AS

BEGIN

-- 由于每月1日早上 0点, 需要把序列号的当前数值, 重置为 1.

-- 但是由于不能通过 ALTER SEQUENCE 语句来修改序列号的当前值

-- 因此只能每月1日 删除-重建 序列号.

-- 首先是删除.

EXECUTE IMMEDIATE('DROP SEQUENCE seq_testno ')

-- 然后是重建.

EXECUTE IMMEDIATE('CREATE SEQUENCE seq_testno increment by 1 start with 1')

END

/

-- 将存储过程, 加入 Oracle 作业. 每月1日 00:00 执行.

variable jobno number

begin

dbms_job.submit(:jobno, 'ResetSeqTestno', ADD_MONTHS(trunc(sysdate, 'MM'), 1), 'ADD_MONTHS(trunc(SYSDATE, ''MM''),1)')

commit

end

/

ALTER session SET nls_date_format='yyyy-mm-dd hh24:mi:ss'

-- 查询作业.

SELECT job, what, next_date, interval FROM user_jobs

JOB

----------

WHAT

--------------------------------------------------------------------------------

NEXT_DATE

-------------------

INTERVAL

--------------------------------------------------------------------------------

62

ResetSeqTestno

2013-03-01 00:00:00

ADD_MONTHS(trunc(SYSDATE, 'MM'),1)

你是要修改数据库里面, 某个表的 自动递增列的 开始id ?

那你那个表里面, 当前有没有数据?

如果已经有数据了, 你再从1开始, 那后面就要出错了。

如果表是空表, 没有数据的, 那么可以

TRUNCATE TABLE 表名字

通过彻底清空 指定表的方式, 来重置那个 自动递增的当期值为 1

注:以上处理方式

对于 SQL Server 数据库的 identity (1,1)

或者 MySQL 的 AUTO_INCREMENT 是有效的。

如果是 Oracle 数据库的话, 你可能需要去重新创建序列号对象。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10030778.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存