数据库建表
测试用户:scott/tiger
超级管理员:sys/as sysdba
1、建表
creat table 表名(列名 数据类型 约束,列名 数据类型 约束。。。)
数据类型
字符串:varchar(2)长度不固定 nvarchar(1) char(10)固定长度,不够补空格 nchar()
数字:number(7整数,0小数)
日期:date(7-7月-2019/除此格式其他都不识别)
大数据类型
字节型/字符型
blob(最多4G)/clob
2、约束
保证数据的完整性:正确,有效
四大类型
A、实体完整性(每行数据唯一,不能重复)主键,唯一
B、域完整性(每列数据都在一个有效的范围内)检查,非空,默认值,数据类型
C、引用完整性(两个表A/B,B中某一列的数据会参照A表中的某一列) 外键约束
D、自定义完整性 触发器,过程
主键约束
primary key
1.非空 2.唯一 3.一个表中只能有一个主键,但一个主键可以是多列组合
语法
主键约束:alter table 表名
add constraint pk_列名 primary key(列名)
唯一约束(只保证数据唯一,不保证非空,空值不验证唯一)
alter table 表名
add constraint uq_列名 unique(列名)
检查约束:alter table 表名
add constraint ck_列名 check(条件表达式)
关系运算符:> < >= <= = != <>
逻辑运算符:and or not
模糊匹配:like
通配符:
% 匹配任意长度的一段任意字符 (%.jpg 所有jpg文件)
_ 匹配一个任意字符
默认值约束:
default
alter table 表名 modify 列名 default ‘值’
外键:
foreign key
A (学生)主表 B(成绩)子表 子表参照主表中数据
A(账户) B(消费记录)
主表被参照的序列必须是主键
子表--------外键
alter table 表名 add constraint fk_列名 foreign key(外键列名) references 主表名(主键列名)
添加数据时,先加主表,再加子表
删除数据时,先删子表,再删主表
eg:create table student
(stuid number(10) not null,
stuname varchar2(20) not null,
gender varchar(4) not null,
phone varchar2(11) null
)
查询表属性
desc student;
查询
select * from student;
添加主键(主键约束)
alter table student
add constraint pk_stuid primary key(stuid);
唯一约束(只保证数据唯一,不保证非空,空值不验证唯一)
alter table student
add constraint uq_phone unique(phone);
添加
insert into student values('10001','张三','男','12345678901')
检查约束
alter table student
add constraint ck_gender check(gender='男' or gender='女');
性别默认男
alter table student modify gender default '男';
删除默认值
再建一个成绩表
create table exam(
stuno number(10) not null,
subject varchar(30) not null,
score number(3) not null,
examdate date not null);
添加外键
alter table exam add constraint fk_stuno foreign key(stuno) references student(stuid);
添加成绩
insert into exam values('10001'','java',87,sysdate);
删除学生
先删除成绩再删除学生