Posts SQL基础——约束
Post
Cancel

SQL基础——约束

  1. 主键:primary key(PK)—— unique + not null
  2. 外键:foreign key (FK)
  3. 唯一:unique
  4. 非空:not null
  5. 检查: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)

This post is licensed under CC BY 4.0 by the author.

SQL练习——多表查询

SQL练习——子查询

Comments powered by Disqus.