但是这样有线程同步问题;很可能插入的id值一样等问题;
1.创建序列:
2.序列属性:
create sequence user_seq start with 1 minvalue 1 increment by 1;
使用序列:t_user表中的id是主键,使用序列自增:
insert into t_user values(user_seq.nextval, 'zhangsan', '123456');
insert into t_user values(user_seq.nextval, 'lisi', '123456');
select user_seq.currval from dual;
select user_seq.nextval from dual;
序列产生一个序列的数,而且保证不会重复;即便是两个线程同时来访问这个东西,放心,还是不会重复,说白了自己内部已经做了线程同步了。
真正项目中是一个项目用一个序列,还是一个表用一个序列??
优缺点:
一个项目用一个序列,很多表用一个序列: 缺点-每个表的主键就不连续了;
一个表用一个序列:好管理点,生成的主键都是连续的;缺点-麻烦点,每个表都得建序列;
一般是一个表对应一个序列;
四、Oracle表操作:
1、update:
更新一行的两个字段,之间用逗号隔开:
update t_user set username='zhang_san', password='123' where id = 1;
2、select查询:
联合查询:
例如现在数据库中表记录:
t_user:
t_user2:
1)并集(去重复):
select * from t_user union select * from t_user2;
2) 并集(不去重复):
select * from t_user union all select * from t_user2
3)交集:
select * from t_user intersect select * from t_user2 得到结果就是只有一个 zhang_san 123
4) 差集: 属于第一个集合里面,不在第二个集合里面;
select * from t_user minus select * from t_user2 得到结果 lisi 123456
五、oracle数据类型及函数:
1.字符串类型及函数:
//解释:
select lpad(username, 10, '0') username, password from t_user;
substr(字段名,索引位置,截取长度) : 索引位置从1开始;
instr(字段名,要查找的串,从第几个索引位置开始, 第几次出现),查不到的话,返回0;索引位置值从1开始;
2.数值类型及函数:
//代码解释:
select round(123.45, 1) from dual //123.5
round第二个参数,是保留几位小数;
sign() 整数返回1; 0返回0; 负数返回-1;
select trunc(123.456,2) from dual; //123.45
trunc第二个参数是保留几位小数,单纯的截取,不进行其他操作;
select to_char(123.45,'0000.000') from dual; // 0123.450
select to_char(123.45,'9999.999') from dual //123.450 9999.999和上面的区别就是:整数位不会自动补0;
select to_char(123123,'99,999,999.99') from dual //123,123.00
select to_char(123123.3,'FM99,999,999.99') from dual; //123,123.3 FM会把结果前面的空格去掉;
select to_char(123123.3,'$99,999,999.99') from dual //$123,123.30
select to_char(123123.3,'FM$99,999,999.99') from dual //$123,123.3 FM将返回结果前面空格去掉,FM可以和$连用;
select to_char(123123.3,'L99,999,999.99') from dual; //¥123,123.30
select to_char(123123.3,'99,999,999.99C') from dual //123,123.30CNY
3.日期类型及函数
//代码解释:
select * from t_date;
select add_months(d1,2) from t_date where id=1;
ADD_MONTHS(D1,2)
----------------
26-5月 -17
select last_day(d1) from t_date where id=1;
LAST_DAY(D1)
------------
31-3月 -17
select months_between(d1,d3) from t_date where id=1;
MONTHS_BETWEEN(D1,D3)
---------------------
3.197800553
select extract(year from sysdate) from dual;
EXTRACT(YEARFROMSYSDATE)
------------------------
2017
select extract(month from sysdate) from dual;
EXTRACT(MONTHFROMSYSDATE)
-------------------------
3
select to_char(d1,'YYYY-MM-DD') from t_date where id=1;
TO_CHAR(D1,'YYYY-MM-DD')
------------------------
2017-03-26
select to_char(d1,'YYYY-MM-DD HH24:MI:SS') from t_date where id=1;
TO_CHAR(D1,'YYYY-MM-DDHH24:MI:SS')
----------------------------------
2017-03-26 21:41:23
4.其他常用处理函数