1.SQL分為5大類:
DDL:數據定義語言
DCL:數據控制語言
DML:數據操縱語言
DTL:數據事務語言
DQL:數據查詢語言
2.DDL(data definition language):create,drop,alter,rename to
創建表格分為兩個步驟:
a.定義列和數據類型
b.添加約束
數據類型:
1.數字類型,可以做所有的數學運算
number
number(4)代表整數,最大能存9999
number(7,2)代表double類型,整數長度為5,小數位2
2.字符型,可以做拼接運算
char(20) 定長
varchar2(20) 不定長,表示字符竄最長是20
注意:字符串在數據庫中用''
3.日期類型,可以做加減運算
Date 年月日時分秒
Time 時分秒
Timestamp 年月日時分秒,還有小時位,如1.2秒
4.大數據類型
clob character large object 大字符型對象,最大可存4G
blob binary large object 大二進制對象,最大可存4G
注意:大數據類型不支持查看結果
約束(constraint)
作用:約束表格中是數據,相對於數據類型而言,用來進一步限定表中的數據,使得添加到表中的數據都是合法有效的,符合業務需求的數據,不會出現無效數據
3.Oracle中的5種約束類型
primary key PK 含義:主鍵約束,非空唯一(表中最多只能含有一個主鍵約束)
not null NN 含義:非空
unique UK 含義:唯一
check CK 含義:自定義約束(往往用來定義業務的約束,如分數不能為負)
foreign key FK 含義:外鍵約束(表示此列的值是引用自己的或其他表的主鍵)
注意:能夠被外鍵所引用的列,其本身也必須是主鍵約束或唯一性約束
4.創建表格的第一種方法:
語法:
create table 表名(
列名 數據類型(默認值) 約束,
列名 數據類型(默認值) 約束,
列名 數據類型(默認值) 約束
);
例:
--創建用戶表(無約束)
create table tbl_user(
id number(6),
name varchar2(25),
password varchar2(25)
);
注意:在創建表格時,如果不定義約束的名字,則數據庫會給約束提供默認名字,並且把這些內容存儲到數據庫字典中
添加約束名的語法:
constraint 約束名 約束類型;
約束名的命名規范:
表名_列名_約束類型縮寫;
--創建用戶表(有約束)
5.添加約束的2中方法:
1.列級語法添加——邊定義,邊添加約束
如:創建用戶表
2.【重點】表級語法添加——先定義列,然后在添加約束
--創建賬戶表(tbl_account,id,accountNo非空唯一,realName,password六位數/默認值000000,balance不能小於0)
create table tbl_account (
id number(6),
accountNo number(6) not null,
realName varchar2(26) not null ,
password char(6) default '000000',
balance number(10,2),
constraints tbl_account_id_pk i primary key(id),
constraints tbl_account_accountNo_nn unique (accountNo),
constraints tbl_account_balance_ck check (balance>0)
);
注意:not null不支持表級語法,只能支持列級語法添加。但是也可以采用check 模擬非空
例:
--創建賬戶表(tbl_account,id,accountNo非空唯一,realName,password六位數/默認值000000,balance不能小於0)
create table tbl_account (
id number(6),
accountNo number(6) ,
realName varchar2(26) not null ,
password char(6) default '000000',
balance number(10,2),
constraints tbl_account_id_pk primary key (id),
constraints tbl_account_accountNo_ck check (accountNo is not null) ,
constraints tbl_account_accountNo_un unique(accountNo) ,
constraints tbl_account_balance_ck check (balance>0)
);
--創建員工表(自關聯)
create table p_emp(
id number(6),
name varchar2(25),
title varchar2(25),
salary number(10,2),
start_date date,
manager_id number(6),
constraint p_emp_id_pk primary key (id),
constraint p_emp_name_ck check(name is not null),
constraint p_emp_title_ck check(title is not null),
constraint p_emp_start_date_ck check(start_date is not null),
constraint p_emp_manager_id_fk foreign key(manager_id) references primary key(id)
);
6.補充:創建表格的第二種方法(根據已經存在的某張表創建一張新表格):
--復制某張表中的指定列,構建一張新的表格(拷貝了數據)
create table 新表格名 as select 列,列,列from原表格;
例:創建一張表格,表格中只有s_emp表中的id,first_name,salary三列數據
create table new_emp as select id,first_name,salary from s_emp;
--復制了某張表格的指定列,構建一張新表格(不拷貝數據,取表結構)
create table 新表格名 as select 列,列,列from原表格 where 恆假條件;
例:創建一張表格,表格中只有s_emp表中的id,first_name,salary三列數據
create table new_emp as select id,first_name,salary from s_emp where 1=2;
注意:此處1=2表示恆false,則數據庫不會被拷貝,只能得到一張空表
》》》》
刪除表格(注意約束控制)
基本語法:drop table 表名 [cascade constraints];
注意:cascade constraints表示連帶約束一起刪除(暴力刪除);如果不添加,當有外鍵引用,不能刪除。
例:
修改表格:
--列相關
1.添加列
alter table 表名 add 列名 數據類型 [default默認值] 約束;
例:--給tbl_user表添加一列年齡
alter table tbl_user add age number(3) default 18 not null;
2.刪除列
alter table 表名 drop column 列名;【注意關鍵字column】
例:刪除tbl_user表中age列
alter table tbl_user drop column age;
3.修改列(修改列數據類型和約束)
alter table 表名 modify 原列名 新數據類型 新約束;
例:修改tbl_user表中password列為char(6)默認值‘000000’非空
alter table tbl_user modify password default'000000' not null;
4.修改列名
alter table 表名 rename column 原列名 to 新列名;
--修改tbl_user表中password列名為pwd
alter table tbl_user rename column password to pwd;
--約束相關
1.添加約束
alter table 表名 add constraint 約束名 約束類型(列名)
注意:如果是添加非空約束,則:
alter table 表名 add constraint 表名_列名_nn check (is not null)
注意:所有的DDL語句都是自動提交事務的,所以語句是不能回滾的
2.刪除約束
alter table 表名 drop constraint 約束名;
3.使約束生效
alter table 表名 enable constraint 約束名
4.使約束失效
alter table 表名 disable constraint 約束名