一、数据表的建立理论知识浅谈
数据库的操作基本都是基于表的操作,这一节我就来讲讲自己对与数据表建立学习的一些心得,如果有错误,欢迎大家的指正,共同进步。
首先创建数据表是数据库组成的重要部分,以SQL语言当中的CREATE TABLE语句来实现。其结构主要如下:
CREATE TABLE 表所属的架构名称 表名(
段名1 字段类型 字段的完整性约束,
字段名2 字段类型 字段的完整性约束,
…
表级的完整性约束);
这就是利用SQL语言进行创建数据表的基本结构。现在就这一结构进行解释说明:
CREATE TABLE这是创建数据表的一个固定语句是不可变的存在。
在固定语句后接表的所属架构名称。这是从 SQL Sever 2008版本之后有的,及每个数据库的对象都属于某一个架构,但是如果在定义表的时候不说明表的架构,那么它会默认使用dbo架构,一般来说在前面学习的话,可以不用写直接默认就行了,除非有特殊说明。
在架构名称后接表名,表名可以任意命名但是在一个数据库里面的表名要唯一**。一般数据库表的命名要能够概括的说明数据库表所存放数据的主题,这是为了方便对表进行查询和理解。
字段名可以理解为所建表的属性,字段名根据实际情况进行命名,但是在一张表当中字段名要唯一并且最好能够直接概括该字段的所存放数据的含义。
在字段名后接表的类型,即数据类型,在我之前的文章有对数据类型进行简单的介绍。在我学习过程当中比较常用的数据类型有char、 varchar、 numeric、 smalldatetime、int。具体的数据类型可以根据所给的条件进行合理的选择。
字段的完整性约束。这是针对该字段的约束,只在这个字段中起作用,其他的字段并不起作用,经常使用的有
NOT NULL:写这个的时候代表着该字段不能为空。
DEFAULT:这个表示该字段的默认值为什么。格式为:DEFAULT 常量。如: DEFAULT ‘软件工程’; 这个代码就表示该字段的默认值为软件工程。
UNIQUE:这个表示在该字段不能够重复出现相同的值。
CHECK:这个是用于设置取值范围的。格式为:CHECK(取值范围);如CHECK(a>=0);
这个 代码就表示a这个字段的取值要大于等于0。
PRIMARY KEY :这个表示该字段被设置为主键。
FOREIGN KEY:这个表示该字段被设置为外码即外键,一般用于两个表之间的联系。格式 为:FROEIGN KEY 本表的所设置的外码名称 REFERENCES 所关联表的表名(该表的主键)。如:
CREATE TABLE dep(
id int primary key ,
dep_name char(10)
);
CREATE TABLE emp(
cid int primary key ,
name char(16),
sid int,
foreign key(sid) references dep(id)
);
这个就是对外码的一个实例应用。
现在来讲讲UNIQUE 和 PRIMARY KEY 约束的区别:
UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 UNIQUE 约束。注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
二、实际操作
在sql语言当中固定结构的大小写并不会影响运行结果,CREATE TABLE这样写与create table 这样写并没有区别。
1、利用sql语言建立数据表
根据上表我们可以写出一下代码:
create table student(
no char(8) primary key,
name char(8) not null,
sex char(2) check(sex = '男'or sex = '女'),
birthday smalldatetime check(birthday >= '1995-1-1' and birthday< = '2003-1-1'),
speciality varchar(50) default '软件工程',
avgrade numeric(4,1) check(avgrade >= 0 and avgrade <= 100),
dept varchar(50) default '工学院'
);
根据上面的代码运行后会建成这样一个表格
上面的代码也可以改成以下这样的形式:
create table student(
no char(8) ,
name char(8) not null,
sex char(2) ,
birthday smalldatetime ,
speciality varchar(50) default '软件工程',
avgrade numeric(4,1) ,
dept varchar(50) default '工学院' ,
primary key(no),
check(sex = '男'or sex = '女'),
check(birthday> = '1995-1-1' and birthday< = '2003-1-1'),
check(avgrade >= 0 and avgrade <= 100)
);
这样执行后的结果与前面的代码执行的结果一样,不一样的地方是主键在最后才强调的,同时check(birthday = ‘1995-1-1’ and birthday = ‘2003-1-1’) 这个语句由原来的字段约束变成了表级约束。
2、如何在数据表当中增加字段
语法格式为:
ALTER TABLE 表名
ADD 增加的字段名 数据类型 字段约束;
如在上表当中新增字段nationality 表示民族 长度为20 默认值为汉。
代码如下
alter table student
add nationality varchar(20) default '汉';
根据上面的代码可以实现新增字段名结果如下:
在数据表当中的情况如下:
在数据表当中输入2001 张三 男 1998-1-1然后提交,利用select * from student 进行查询结果如下:
3、修改字段
语法格式:
ALTER TABLE 表名
ALTER COLUMN 要修改的字段名 新的数据类型
如将上表当中的nationality的长度改成25
alter table student
alter column nationality varchar(25);
结果如下:
4、删除字段
语法格式如下:
ALTER TABLE 表名
DROP COLUMN 要删除的字段名;
代码如下:
alter table student
drop column nationality;
但是如果这样写会出现这样的情况:
这是由于在上面新增加的字段有约束,要先把要删除的字段的约束先删除掉,同时约束的名称会随机分配要在执行错误后他才会显现比如我这边的约束名称为:DF__student__nationa__59FA5E80
所以我的代码应该为:
alter table student
drop constraint DF__student__nationa__59FA5E80;
alter table student
drop column nationality;
select * from student;
这样的结果如下所示:
其中的
alter table student
drop constraint DF__student__nationa__59FA5E80;为删除约束的语句
如果所要删除的字段nationality没有约束只要用这样的代码
alter table student
drop column nationality;
就能够实现成功。
以上就是我学习数据表的建立的一些心得。如果有不足的地方,欢迎大家的指正。谢谢大家!!!