drop table test2;
drop table test1;
create table test1
(
test_no int primary key,
test_name char(20) not null,
test_age int ,
test_sex char(20)
);
create table test2
(
no int ,
name varchar(20),
no1 varchar(20),
primary key(no,name)
);
--字段操作
alter table test1 add (test_phone char(20) unique);
alter table test1 modify (test_phone char(100) );
--alter table test1 drop (test_phone);
--主键操作
alter table test1 drop primary key;
alter table test1 add constraint PK_NO_NAME primary key (test_no,test_name);
--唯一索引
alter table test1 add (test_phone1 int);
alter table test1 add constraint UK_phone1 unique (test_phone1);
alter table test1 disable constraint UK_phone1;
--外键
alter table test1 add (no1 VARCHAR2(20) unique);
--外键创建条件,建立外键的字段属性必须一样,其次外键的数量必须跟主键的数量一样,就是是从表的字段数量,要跟主表的主键数量是要一致的。 主表的键值必须是主键或者unique
alter table test2 add constraint FK_NO1 foreign key (no1) references test1(no1);
--检查约束
--alter table test1 add constraint CK_PHONE check (test_phone like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'); --不可用,要用下面哪一个
--alter table test1 drop constraint CK_PHONE;
alter table test1 add constraint CK_SEX check(test_sex = '0' or test_sex = '1');
alter table test1 drop constraint CK_SEX;
alter table test1 add (phone varchar(20));
alter table test1 add constraint CK_PHONE1 check(regexp_like(phone,'[1-9][1-9]'));
--万能删除约束
--alter table test1 drop constraint FK_SEX;
--默认值约束
alter table test1 add (test_sexx int);
alter table test1 modify (test_sexx default 0);
drop sequence test2_sequence;
--创建自增长序列
create sequence test2_sequence
minvalue 0
nomaxvalue --无上限
start with 0
increment by 2
nocycle --不循环,一直递增
--nocache --不缓存
cache 10;
drop Trigger test2_AUTOINCREMENT;
--给表增加触发器
Create or Replace Trigger test2_AUTOINCREMENT
Before Insert on test2
For Each Row
When (new.no IS NULL)
Begin
Select test2_sequence.NEXTVAL INTO :new.no FROM dual;
End;
--创建索引
create index INCLIENTNO_INDEX on test1 (test_no asc,test_name desc);
--以下要单独执行
insert into test1 values('1','1','1','1','1',1,'1','12',1);
insert into test2(name,no1) values('3','1');
insert into test2(name,no1) values('4','1');
insert into test2(name,no1) values('5','1');
insert into test2(name,no1) values('6','1');
insert into test2(name,no1) values('7','1');
select * from test2;
以上代码是可以单独执行的,对应的字段增删都在里面,删除关系的时候,是有万能公式的,对于检查索引的时候,直接用like是会报错的,需要要到函数regexp_like(字段名,正则表达式)。这个like的意思就是允许去使用正则表达式去进行字符匹配。否则只能使用固定的值岂不是很难受,但是一般情况这个在大项目中不会去使用,因为很耗费时间。其他的就没了,都是千篇一律。对了,修改默认值的操作我是只找到了一个,如果还有其他的麻烦评论区告诉我一下,只会modify去修改,这个是修改字段的,通用。
再就是给主键增加自增的时候,要先创建自增序列,然后给表增加一个触发器,当这个主键没有给他赋值的时候,就会自己去触发这个操作。自增序列还是标记的比较清楚的,触发器的话,new后面跟的是自己想要自增的那个字段,dual是系统的一张表,不用管,test_squence就是咱们之前加的那个自增序列。这个方法是oracle的,mysql的话有个更简单的方法,直接在字段后面加一个 AUTO_INCREMENT 就可以实现自增1。