
if(strindexof("abc-")!=-1)
{
int number=strsubstring(3): number++;
str="abc-"+number;//这个就是最后的结果了
}else
{ str="abc-001";}解决方法如下:
在你所要设为自增型的键上(比如你的id)双击 ,d出一个Column Properties 对话框,右下角有一个Identify的选择框,选中它OK,就可以了。
再去查看Preview,就能看到用大写标识出来的AUTO_INCREMENT。
另外一个更快捷的方法:
Columns 的UI上有一个漏斗型 的图标 Customize columns and filters
点击以后选择你要的列,里面有:default 和identity 选中后,以后表格能只需要填写或者打勾就行了
=============
双击字段,把identity前面的钩打上即可
identity就在Primary key的右边
===in action===
在概念模型下找不到啊??
PowerDesigner设置主键自增方法 - 小蚂蚁绊大象 - 小蚂蚁绊大象
在物理模型当中找到了~~~identity!!
PowerDesigner设置主键自增方法 - 小蚂蚁绊大象 - 小蚂蚁绊大象
PowerDesigner这是一款进行数据库设计的强大的软件。使用它可以分别从概念数据模型(Conceptual Data Model)和
物理数据模型(Physical Data Model)两个层次对数据库进行设计。
在这里,概念数据模型描述的是独立于数据库管理系统(DBMS)的实体定义和实体关系定义;
物理数据模型是在概念数据模型 的基础上针对目标数据库管理系统的具体化。列的自增属性,一般用来设置整数列根据一定步长逐步增长的值,类似于其他数据库的序列。不过这里的“序列”是基于特定一张表的。关于自增属性的相关特性如下:
1 控制自增属性性能的变量:innodb_autoinc_lock_mode
innodb_autoinc_lock_mode=0
代表传统模式,也就是说,在对有自增属性的字段插入记录时,会持续持有一个表级别的自增锁,直到语句执行结束为止。比如说下面两条语句,SQL 1 在执行期间,一直持有对表 f1 的表级自增锁,接下来 SQL 2 执行时锁超时。
innodb_autoinc_lock_mode=1
代表连续模式,和传统模式差不多,不同的点在于对于简单的插入语句,比如 SQL 2,只在分配新的 ID 过程中持有一个轻量级的互斥锁(线程级别,而不是事务级别),而不是直到语句结束才释放的表锁。
代表交错模式。这个模式下放弃了自增表锁,产生的值会不连续。不过这是性能最高的模式,多条插入语句可以并发执行。MySQL 80 默认就是交错模式。
那针对复制安全来说,以上三种模式,0 和 1 对语句级别安全,也就是产生的二进制日志复制到任何其他机器都数据都一致;2 对于语句级别不安全;三种模式对二进制日志格式为行的都安全。
2 控制自增属性的步长以及偏移量
一般用在主主复制架构或者多源复制架构里,主动规避主键冲突。
auto_increment_increment 控制步长
auto_increment_offset 控制偏移量
3 对于要立刻获取插入值的需求
就是说要获取一张表任何时候的最大值,应该时刻执行以下 SQL 3 ,而不是 SQL 2。SQL 2 里的函数 last_insert_id() 只获取上一条语句最开始的 ID,只适合简单的 INSERT。
4 自增列溢出现象
自增属性的列如果到了此列数据类型的最大值,会发生值溢出。比如变更表 f1 的自增属性列为 tinyint。一、主键id自增
oracle 中不能设置自动增加,这个和其他数据库不一样,但是有 序列,这个是Oracle自己特有的东西,
1、首先创建序列:create sequence seq;
语法:
CREATE SEQUENCE 序列名
[INCREMENT BY n] --每次加几
[START WITH n] --序列从几开始
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] --小值、大值限制
比CREATE SEQUENCE seq start with 1 increment by 1; --建立了额从1开始每次加1序列
访问序列时用 序列名称nextval语法
这就创建好了,然后 seqnextval 就会返回一个值,不会重复的值,
insert into tablename values(seqnextval,'test');
insert into tablename values(seqnextval,'test');
insert into tablename values(seqnextval,'test');
这样前3个id 分别是 1,2,3
二、自动生成UUID策略
import javautilUUID;
Student s = new Student();
ssetId(UUIDrandomUUID()toString());建立一个序列啊,每次从序列中取值,提醒一下插入值的时候不要插入主键,用一个触发器自动插入主键的值,给你我的一个案例
CREATE OR REPLACE TRIGGER CRC_028_INOUT_SUMMARY_T(触发器名)
BEFORE INSERT ON CRC_028_INOUT_SUMMARY(表名称)
FOR EACH ROW
DECLARE
L_SUMMARY_ID NUMBER := 0;
BEGIN
-- CRC_028_INOUT_SUMMARY_S 是序列名
SELECT CRC_028_INOUT_SUMMARY_SNEXTVAL INTO L_SUMMARY_ID FROM DUAL;
:NEWSUMMARY_ID := L_SUMMARY_ID;
END;
好好看看,可以参考我的博客:>字符串的自增,用程序实现吧,在一个表里面用一个字段来保存上一次插入表中的编号即可。
如果你的字符串是可以直接转换为 int 型的话,用sql max最大的更好一些, 但如果你的字符串型似 C0001 , 直接用sql 的话还要拆分字符串,就没有用程序来方便了。id int identity(1,1) 是 SQL Server 的 自动递增列的写法。\x0d\\x0d\对于SQLite\x0d\主键数据类型为 int 类型。 \x0d\插入的时候,不传入数据, 就是默认为自动递增处理。 \x0d\last_insert_rowid() 函数用于获取最新生成的 ID\x0d\\x0d\sqlite> CREATE TABLE test_create_tab2 (\x0d\ > id integer,\x0d\ > val VARCHAR(10),\x0d\ > PRIMARY KEY (id)\x0d\ > );\x0d\sqlite> INSERT INTO test_create_tab2(val) VALUES ('NO id');\x0d\sqlite> select last_insert_rowid();\x0d\last_insert_rowid()\x0d\1\x0d\\x0d\sqlite> INSERT INTO test_create_tab2(val) VALUES ('NO id 2');\x0d\sqlite> select last_insert_rowid();\x0d\last_insert_rowid()\x0d\2\x0d\\x0d\sqlite> select from test_create_tab2;\x0d\id|val\x0d\1|NO id\x0d\2|NO id 2\x0d\\x0d\sqlite> INSERT INTO test_create_tab2(id, val) VALUES (100, 'id is 100');\x0d\sqlite> INSERT INTO test_create_tab2(val) VALUES ('NO id again');\x0d\sqlite> select from test_create_tab2;\x0d\id|val\x0d\1|NO id\x0d\2|NO id 2\x0d\100|id is 100\x0d\101|NO id again\x0d\\x0d\注意:\x0d\对于无主键的表\x0d\SQLite 中还有一个 伪列 rowid, 可以作为自动递增的查询处理。\x0d\ \x0d\sqlite> CREATE TABLE test_create_tab3 (\x0d\ > id integer,\x0d\ > val VARCHAR(10)\x0d\ > );\x0d\sqlite>\x0d\sqlite> INSERT INTO test_create_tab3(id, val) VALUES (1, 'Test1');\x0d\sqlite> INSERT INTO test_create_tab3(id, val) VALUES (2, 'Test2');\x0d\sqlite> INSERT INTO test_create_tab3(id, val) VALUES (100, 'Test100');\x0d\sqlite> INSERT INTO test_create_tab3(id, val) VALUES (101, 'Test101');\x0d\sqlite> select rowid, id, val from test_create_tab3;\x0d\rowid|id|val\x0d\1|1|Test1\x0d\2|2|Test2\x0d\3|100|Test100\x0d\4|101|Test101比方说,你要创建一个表user_info,设置的
主键
名称是user_id,那么可以如下设置:
create
table
user_info
(user_id
int
primary
key
identity(1,1),//主键初值为1,每次自增1,数值可变化,但要符合之前定义的类型
user_name
varchar(20)
not
null,
)
希望能帮到你!~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)