创建表,添加约束
create table tb_user (
id int primary key,
name varchar(50) not null,
age int check (age > 0 and age < 65),
sex char(4) check (sex = '男' or sex = '女'),
phone varchar(20) unique,
address varchar(50) default '广州天河'
);
-- 约束
-- 约束其实就是一个规则
-- 为了使数据库数据能够符合商业逻辑或者企业规则,需要采用约束,触发器
-- 甚至可以直接使用代码逻辑来进行甄别判断,得到一个正常的值。
-- 在实际开发中,我们一般选择直接在 SQL 语句中使用约束,最直观最快最便捷。
-- 约束的种类
-- 1)检查约束:check 特殊的检查约束:not null 不为空
-- 2)唯一约束:unique
-- 3)主键约束:primary key
-- 4)外键约束:foreign key 一般用于多张表之间的关联
-- 5)默认值:default
-- 约束它也是数据库的对象,可以有自己的名字,可以单独放在系统表中。
-- 创建的两种方式:
-- 1)在创建表的时候,直接指定。(建议:基本的约束)
-- 2)建表后再去创建,通过修改动作。(建议:外键约束)
-- 主键:primary key
-- 作用:用来唯一区别确定的一行数据。不能重复的。
-- 1)从功能上来看,相当于你同时用了非空和唯一两个约束。
-- 2)一个表中,只允许一个主键。
-- 3)主键可以是单字段的,也可以是多字段的。
-- 4)当我们创建了主键之后,Oracle 默认会为主键创建对应的索引。
-- 以后面试时,人家问你怎么调优 SQL 的查询,回答多用索引。
-- 索引,只有两个字段,找到索引值,即可找到对应的数据,搜索速度非常快。
-- 5)现在数据库建模,建议一张表一定要有主键,并且主键应该和业务数据无关
-- 然后我们需要使用序列的方式来实现自动增长。
表级约束
-- 创建好表的结构之后,再去添加约束。
-- 第一种写法
create table tb_stu4 (
id int,
name varchar(20),
sex char(4),
age int,
address varchar(100) default '广州天河',
phone varchar(30),
clazz_id int,
-- 当创建好表的结构之后,跟着就可以添加约束了
primary key(id),
check(name is not null),
check(sex = '男' or sex = '女'),
check(age > 0 and age < 65),
unique(phone),
-- 外键
foreign key (clazz_id) references tb_clazz(id)
);
-- 如果还碰到资源正忙,可以点击提交按钮,然后再继续执行即可。
-- 要不,就是直接断掉连接,重新连接即可
-- 第二种写法
create table tb_stu5 (
id int,
name varchar(20),
sex char(4),
age int,
address varchar(100) default '广州天河',
phone varchar(30),
clazz_id int,
-- 约束 约束名 约束类型(列名)
constraint stu_pk primary key(id),
constraint stu_name check(name is not null),
constraint stu_sex check(sex = '男' or sex = '女'),
constraint stu_age check(age > 0 and age < 65),
constraint stu_phone unique(phone),
-- 外键
constraint stu_fk foreign key (clazz_id) references tb_clazz(id)
);
-- 第三种:推荐写法,基本约束采用列级形式,外键采用表级形式
create table tb_stu6 (
id int primary key,
name varchar(20) not null,
sex char(4) check(sex = '男' or sex = '女'),
age int check(age > 0 and age < 65),
address varchar(100) default '广州天河',
phone varchar(30) unique,
clazz_id int,
-- 外键
foreign key (clazz_id) references tb_clazz(id)
);