SQL基础——DDL
初识ddl
DDL 即数据定义语言,是对数据库中的各种对象(表格,视图)进行创建等操作,也就是对表格的框架进行控制和操作。其中包含create(创建表格),alter(修改表格)和drop(删除表格)。
创建表格
我们用create 语句来创建一个表格,下面我们来创建一个表名为‘student’的表格。
create table student(
s_id number(4) primary key ,
s_name varchar2(5 char) not null,
s_gender char(3) check(s_gender in ('男','女')),
s_age number(2) check(s_age between 15 and 45),
s_date date,
s_dept varchar2(20) default('计算机系')
)
上面就是我们创建的一个student 表格,点击左上角的齿轮就可以添加了。齿轮就是程序运行,之后的操作也是需要点击齿轮,才可以看到效果的。下面我们以student表为例来详细了解下表格的创建。
创建表格的样式
创建表格都是按照 ‘create table 表名 ( 字段名 类型 约束 )’ 来创建的。像上面的student就是表名。
小括号中可以添加多个内容,作为表的列名显示在表格上,每一个定义好的 ‘列名’后面加逗号,最后一个不加逗号。这样一个表格就创建好了。
小括号中的‘s_id’我们叫它 字段名 ,number(4) 叫它 类型,primary key 叫它 约束。
类型
像是字段名就和我们平时建表格起的表头一样,只要见名知意,避免使用关键字 就可以了。
下面主要讲下类型。
我们可以从图中看到有 number 、char、varchar2,date,这四种基本的类型,也是我们常用的类型。后面跟的括号里面填写限制的字节数,number(4) 就是4个数字以下。
number就是数字类型,可以是整数,也可以是小数。因为一个数字是一个字节,即括号中限制数字的位数。
char 和 varchar2 都是字符型的,在这一列中是输入字符串的,我们在插入数据时,这一列也是要用单引号引起来才可以插入数据。后面的括号也是限制字节的,但是一个中文在 ‘utf-8’中是占3个字节的,所以一个中文是在utf-8的环境下是3个字节。其中还有一种形式 是**(3 char )这种的,这种事不管是否是中文,都是3个字**。
char 是定长字符串,即后面的括号中是几,就必修输入对应的字节数。varchar2是可变长字符串,后面括号跟的是最多的字节数。
date是日期的类型。
约束
我们在类型中可以限制一些字节的长度,但这远远是不够的。因此约束条件进一步限制和约束输入数据。约束不是必须要的,有些可以不给约束。
主要约束
primary key是主键约束,特性是唯一加非空,也就是此列必须有值,且不能为空值。
not null是非空约束,后面不能为空,null是空值得意思。
unique 是唯一约束,后面的值必须是唯一的,不能重复。
default 是默认约束,后面跟一个默认值,但插入的数据为空的时候,显示默认值。
check 是 检查约束,可以检查插入的数据是否满足check的条件。
foreign key 是 外键约束 ,当这个表有数据时引自其他表时,使用外键约束。常表示为"
s_id number(4) references class(c_id)
"* 即student 的 s_id引自 class 表的 c_id。references 是引用的意思。
定义约束名
约束也可以自己定义约束名,当报错时可以更快的让我们找到是哪里出了错误。我们可以在用constraints +定义的约束名 +约束来实现。
例如
s_id number(5) constraints pk_student primary key
修改
修改是用alter 来进行操作的,一般是修改表名,修改表结构 , 删除增加约束。
如下面的代码,先建立有关联的clazz(班级表,主表)和student1(学生表,从表)。
--在表结构结束之后,追加约束
create table clazz(
cid number(5),
cname varchar2(15)
);
--学生表
create table student1(
sid number(5) primary key,
sname varchar2(15),
sage number(3),
--学生所在班级id字段能出现的值,必须是班级表的主键cid字段已存在的值
--外键约束 参考哪一个张表的哪一个主键字段
--cid number(5) references clazz(cid) 不指定约束名
cid number(5),-- constraint fk_cid references clazz(cid)
constraint fk_cid_clazz_cid foreign key(cid) references clazz(cid)
)
修改表结构
alter table clazz add constraints pk_clazz_id primary key(cid);
alter table clazz add constraints clazz_name_not_null check(cname is not null);
alter table student add constraints fk_cid_clazz_cid foreign key(cid) references clazz(cid);
删除
删除即删除表结构,用drop来实现。
drop table student;
是删除整张student表。
删除表结构
当有主从表关联的时候,从表是可以删除的,但主表并不是可以随便就能够直接删除的,一般有两种方式删除
先删除从表,再删除主表 默认
顾名思义,从表删除了,主表与从表的关联也就消失了,这时就可以删除主表了
删除主表的同时,级联删除与从表之间的主外键约束
级联删除了两者之间的主外键约束,也就是主表与从表失去了主从表关系,就可以删除主表了。
drop table school cascade constraints;
上面的就是ddl的部分了,当然这正是基础中的基础,我选择了这一条道路,也会和各位共勉,一起学习,共同成长的。