表变量自动增加字段、主键的定义+exists使用例子

表变量与子查询实战
本文演示了如何使用T-SQL定义包含自动增长字段的表变量,并将其作为主键的一部分。此外,还介绍了如何通过子查询检查表中数据的存在性。

--表变量定义自动增加字段,定义主键

DECLARE @tmp2 table(id int IDENTITY(1,1),id2 int primary key(id))insert into @tmp2(id2) select top 100 id from book order by idselect * from @tmp2 order by id

--指定一个子查询,测试行是否存在

select t.id from book t where exists(select 1 from @tmp2 where id2=t.id )

解决PostgreSQL数据库主键重复问题,可从设置主键生成方式、加主键及插入数据的操作方面来处理。 设置主键序列能保证主键按特定规则生成,避免重复。可查看已有序列,使用`SELECT c.relname FROM pg_class c WHERE c.relkind = 'S';` ,若需创建新序列,如针对`plan_repeat_query`使用`CREATE SEQUENCE plan_repeat_query_id_seq START 1;` ,之后给设置该序列主键,`ALTER TABLE plan_repeat_query ALTER COLUMN id SET DEFAULT nextval('plan_repeat_query_id_seq'::regclass);` [^1]。 给主键时确保操作可重复执行。以`tzq.tzq_log_t`为例,先添加列`alter table tzq.tzq_log_t add column IF NOT EXISTS log_id int8;` ,注释列用途`COMMENT ON COLUMN tzq.tzq_log_t.log_id IS '日志id:IT主键';` ,创建序列`CREATE SEQUENCE IF NOT EXISTS seq_tzq_log_t;` ,设置默认值`ALTER TABLE tzq.tzq_log_t ALTER COLUMN log_id SET DEFAULT nextval('seq_tzq_log_t');` ,更新空值`update tzq.tzq_log_t set log_id = nextval('seq_tzq_log_t') where log_id is null;` ,设置非空`alter table tzq.tzq_log_t alter column log_id set not null;` ,删除旧约束并添加新主键约束`ALTER TABLE tzq.tzq_log_t DROP constraint if exists tzq_log_t_pkey; ALTER TABLE tzq.tzq_log_t add CONSTRAINT tzq_log_t_pkey PRIMARY KEY (log_id);` [^2]。 在插入数据时遵循正确格式,普通插入格式为`INSERT INTO table_name (column1, column2 ... columnN) VALUES (value1, value2 ... valueN);` ,插入变量时用`'%s'` 且加单引号,如`"INSERT INTO table_name(column1, column2 ... columnN) VALUES ('%s','%s','%s','%s')" %(value1, value2 ... valueN)` ,保证插入数据时主键不重复 [^3]。 创建时可让PostgreSQL自动创建序列,例如建立后会自动创建名为名_字段名_seq的序列,且`MAXVALUE=9223372036854775807` ,其余值为1,以此保障主键自增不重复 [^4]。 ### 示例代码 ```sql -- 查看序列 SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; -- 创建序列 CREATE SEQUENCE plan_repeat_query_id_seq START 1; -- 给设置该序列主键 ALTER TABLE plan_repeat_query ALTER COLUMN id SET DEFAULT nextval('plan_repeat_query_id_seq'::regclass); -- 给主键 alter table tzq.tzq_log_t add column IF NOT EXISTS log_id int8; COMMENT ON COLUMN tzq.tzq_log_t.log_id IS '日志id:IT主键'; CREATE SEQUENCE IF NOT EXISTS seq_tzq_log_t; ALTER TABLE tzq.tzq_log_t ALTER COLUMN log_id SET DEFAULT nextval('seq_tzq_log_t'); set app.current_tenant = '11111111111111111111111111111111'; update tzq.tzq_log_t set log_id = nextval('seq_tzq_log_t') where log_id is null; alter table tzq.tzq_log_t alter column log_id set not null; ALTER TABLE tzq.tzq_log_t DROP constraint if exists tzq_log_t_pkey; ALTER TABLE tzq.tzq_log_t add CONSTRAINT tzq_log_t_pkey PRIMARY KEY (log_id); -- 普通插入数据 INSERT INTO table_name (column1, column2) VALUES (value1, value2); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值