天天看點

SQL學習筆記10--表的建立和限制表限制 constraint

建立表

标準表的格式:

  CREATE TABLE [schema.]table

  (column datatype [DEFAULT expr] , …

    );

子查詢建立表的方式;

  CREATE TABLE table [column(, column...)]

   AS subquery ;

--設計要求:建立一張用來存儲學生資訊的表,
--表中的字段包含了學生的學号、姓名、年齡、入學日期、年級、班級、email等資訊,
--并且為grade指定了預設值為1,如果在插入資料時不指定grade得值,就代表是一年級的學生
create table student(
stu_id number(1),
name varchar2(50),
age number(3),
hiredate date,
grade varchar2(10) default 1,
classes varchar2(10),
email varchar2(30)
);

insert into student values(1,'mick',20,to_date('2019-12-23','YYYY-MM-DD'),'2','1','[email protected]');
select * from student;
insert into student(stu_id,name,age,hiredate,grade,classes,email) values(2,'yy',10,to_date('2018-11-22','YYYY-MM-DD'),'3','2','[email protected]');

           

修改表

在給表添加列的時候不能夠設定成not null

--修改表
alter table student add address varchar2(100);
alter table student drop column address;
alter table student modify(email varchar2(100));
           

重新命名表

rename student to stu;
           

删除表

   在删除表的時候,經常會遇到多個表關聯的情況,多個表關聯的時候不能随意删除,需要使用級聯删除

   cascade:如果A,B,A中的某一個字段跟B表中的某一個字段做關聯,那麼再删除表A的時候,需要先将表B删除

  set null:再删除的時候,把表的關聯字段設定成空

drop table stu;
           

限制 constraint

   建立表的時候可以給表中的資料添加資料校驗規則,這些規則稱之為限制。

   限制分為5類:

   not null: 非空限制,插入資料的某些列不能為空。

   unique key: 唯一鍵限制,可以限定某一列的值是唯一的,唯一鍵的列一般别用作索引。

   primary key: 主鍵,非空且唯一,任何情況下一張表一般情況下都有一個主鍵,用來辨別唯一的一行記錄。

      主鍵子句: 在表的定義中加上 primary key(列);

      主鍵短語: 在主屬性的定義之後加上 primary key;

    foreign key: 外鍵,當多個表之間有關聯聯系的時候,需要用到外鍵,一個表A依賴另一個表B的某個值,則A叫做依賴表,B                            叫做主表。

    check限制:可以根據使用者自己的需求去限制某些列的值。

 表級限制和列級限制  

1. 表級定義限制

指的是在定義完一個表所有列之後,再去定義所有相關的限制。

注意:not null 限制隻能在列級上定義。

2. 列級定義限制

指的是在定義一個表的每一列的同時定義每一個列的限制條件,其限制條件

位于每一列之後。

限制:FOREIGN KEY,PRIMARY KEY,NOT NULL,CHECK,UNIQUE

有些時候,列級限制無法實作某種限制的定義,比如聯合主鍵的定義,就要用到表級限制:

限制的增,删,查

可增加或删除限制,但不能直接修改 alter table tablename 增加 add constraint con_name unique(col) 删除 drop constraint com_name [cascade]  

create table student
(
stu_id number(10) primary key,
name varchar2(20) not null,
age number(3) check(age>0 and age<126),
hiredate date,
grade varchar2(10) default 1,
classes varchar2(10),
email varchar2(50) unique,
deptno number(2)
);

insert into student(stu_id,name,age,hiredate,classes,email,deptno) values(20191109,'zhansgan',111,to_date('2019-11-09','YYYY-MM-DD'),'1','[email protected]',10);

--增加限制
alter table student add constraint fk_0001 foreign key(deptno) references dept(deptno);

--查詢限制
select constraint_name,constraint_type from user_constraints
 where owner='SCOTT';
 
 select constraint_name,column_name from user_cons_columns
 where table_name=upper('student');
 
--删除限制
 alter table student drop constraint fk_0001;