SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)和事务控制语言。
数据库模式定义语言DDL(Data Definition Language),是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。数据库模式定义语言并非程序设计语言,DDL数据库模式定义语言是SQL语言(结构化程序设计语言)的组成部分。
下面给出一个完整的DDL语句练习过程,在MySQL6测试通过:
//创建数据库
create database if not exists mydb;
//删除数据库
drop database mydb;
//使用数据库
use mydb;
//建表
create table tb1
(
id int,
name varchar(255) default 'anonymity',
info text
);
//查看该数据库的表
show tables;
//查看表结构
desc tb1;
//截断表:删除表内所有数据但是保留表结构。(DDL)相对于delete(DML)执行效率更高
truncate tb1;
//添加主键约束
alter table tb1 modify id int primary key;
//添加唯一约束,即不允许出现重复值,但是可以出现多个null,因为null不等于null
alter table tb1 modify name varchar(255) unique;
//建表并添加主键、外键约束
create table tb2
(
id int primary key auto_increment,
fid int,
name varchar(255) default 'anonymity' not null,
info text,
#建立外键约束,约束名为tb2_fk,
constraint tb2_fk foreign key(fid) references tb1(id)
);
//删除外键约束
alter table tb2 drop foreign key tb2_fk;
//添加外键约束
alter table tb2 add foreign key(fid) references tb1(id);
MySQL对check约束的支持并不太好,虽然可以定义此约束,单没有任何作用
//添加check约束,会添加成功,但不会生效
alter table tb1 add check(id>5);
//下面可以正常执行
insert into tb1 values(1,'a','one');
而Oracle数据库可以正常使用check约束,下面是Oracle 10g 的运行效果:
//oracle数据库支持check约束
create table tb3
(
id number(8),
name varchar(255),
check(id>100)
);
//不满足check约束将会出错
insert into tb3 values(600,'six');
insert into tb3 values(6,'six');
下面是控制台的输出:
-------------------------------------------------------------------------------------
SQL> create table tb3
2 (
3 id number(8),
4 name varchar(255),
5 check(id>100)
6 );
Table created
SQL> insert into tb3 values(6,'six');
insert into tb3 values(6,'six')
ORA-02290: check constraint (SCOTT.SYS_C005457) violated
SQL> insert into tb3 values(600,'six');
1 row inserted
-------------------------------------------------------------------------------------