- 主键:primary key(PK)—— unique + not null
- 外键:foreign key (FK)
- 唯一:unique
- 非空:not null
- 检查:check
一些术语
DDL操作
create
1
2
3
4
5
6
create table student(
id number primary key,
name varchar2(20),
email char(40),
registtime date default sysdate
);
DML操作
insert:
-
普通插入
1 2 3 4
insert into student(id, name, email) values(3, 'lilmartin', 'lilmartin@qq.com') insert into studetn(id, name, email, registtime) values(1, 'jacky', 'jacky@qq.com', sysdate)
ps:如果新增全部字段,可以省略字段名称(但不推荐)
-
同时建议写出完整字段,时间字符串可由 to_date() 函数进行格式化
1 2
insert into student(id, name, email, registtime) values(4, 'jamartin', 'jamartin@qq.com', to_date('2021-09-27','yyyy-mm-dd'))
-
一次增加多条记录(将另一个表中的数据填入此表)
1 2 3
-- 用子查询代替values insert into student(id, name) select empno, ename from emp
delete:
1
delete student where id = 1234
删除时一定要带where,否则会删掉所有数据
update:
-
修改一个同学的信息
1
update student set name = 'jacky1' where id = 1
-
批量修改同学信息
1 2 3 4
-- 修改 id 不为1的同学的信息 update student set name = name||id where id <> 1 -- 修改所有同学的 email 为 name+'@qq.com' update student set email = name||'@qq.com'
约束总结
创建主键约束
直接创建在列级,由系统命名
1
2
3
4
create table student1(
id number PRIMARY KEY,
name varchar2(20)
)
创建在表级,自己命名
1
2
3
4
5
create table student1(
id number ,
name varchar2(20) ,
CONSTRAINT stuning1_id_pk PRIMARY KEY(id)
)
建表后创建主键约束
1
2
3
4
5
6
7
create table student1(
id number PRIMARY KEY,
name varchar2(20)
);
-- 约束名称:自定义(最好有意义)
alter table student2
add constraint stuning2_id_pk PRIMARY KEY(id);
ps: 查看主键约束条件:
1
2
3
select constraint_name, constraint_type
from user_constraints
where table_name='tableName'
主键的属性
- 唯一性
- 不为空
非空约束和唯一约束
两个约束都只能建立在列级!
外键约束 (FK)
-
父表:
1 2 3 4 5 6 7
create table major ( mid number(2) primary key, mname varchar2(30) ) insert into major values(1, 'computer') insert into major values(2, 'music') insert into major values(3, 'movie')
-
从表(子表)
1 2 3 4 5 6 7 8 9 10
create table student( id number(5) primary key name varchar2(20), mid number(2), constraint stuning_mid_fk foreign key(mid) references major(mid) ) insert into student values(101, 'peter',1); insert into student values(102, 'chris',3); insert into student values(103, 'king',2);
在没有约束的情况下为表增加一条数据,会变成垃圾数据
在进行了DML操作后,需要将事务提交(ctrl+s)