Chinaunix首页 | 论坛 | 博客
  • 博客访问: 99232
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-25 12:35
个人简介

Attitude is everything. Change your attitude and change your life!

文章分类

全部博文(11)

文章存档

2013年(11)

分类: Mysql/postgreSQL

2013-04-17 16:38:27

表的基础概念
表是包含数据库中所有数据的数据对象,
表中的数据库对象包含列、索引和触发器
列(column):也叫属性列,在具体创建表时,必须指定列的名字和数据类型;
索引(index):是指根据指定数据库表列建立起来的顺序,提供快速访问数据的途径且可监督表的数据,使其索引所指定的列中的数据不重复;
触发器(triger);是指定用户定义的事务命令的集合;当一个表中的数据进行插入、删除或更新时这组命令会自动执行,可用来确保数据的完整性和安全性;

创建表
创建表的语法形式
create table table_name(
属性名 数据类型,
属性名  数据类型,)

例:创建数据库zuoyou 并创建表t_dept


其中t_dept表的名字,t_dept中3个字段  分别是int和varchar类型;

查看表结构
查看表结构describe命令来实现;
describe table_name;

可以用show create table t_dept;查看表的详细信息;

删除表

删除表的命令
drop table table_name;

删除表t_dept;
drop table t_dept;

修改表

修改表名
alter table old_table_name rename [to] new_table_name;
alter table t_dept rename tab_dept;

增加字段

在表的最后一个位置增加字段
alter table table_name add 属性名 属性类型;
例:在t_dept中增加一个名为 descri类型为 varchar的字段
alter table t_dept add descri varchar(20);


在表的第一个位置添加字段
可以通过frist来实现;
alter table table_name add 属性名  属性类型 frist;
例:在表t_dept的第一位置添加名称为descri 类型为varchar的字段


在指定字段之后增加字段

alter table table_name add 属性名  属性类型 after 属性名;
例:在deptno之后添加名为xiaotejiang的字段;



删除字段

alter table table_name drop 属性名;
例:删除表中名为descri的字段;



修改字段

修改字段的数据类型
alter table table_name modify 属性名  属性类型;
例;修改的deptno字段的数据类型为int(11)改为varchar(20)


修改字段的名字
alter table table_name change 旧属性名 新属性名 旧属性类型;
例:将名为loc改为loc132



同时修改字段的名字和属性
alter table  table_name change 旧属性名  新属性名 新属性类型;
例子:将名loc   改成loc123 类型为int(11) 


修字段的顺序;

alter table table_name modify 属性名2 数据类型 first|after 属性名2

after 属性名2表示调整到属性名2之后
例:将loc的字段调整到第一个位置  然后报字段deptno调整到字段dname字段之后
alter table t_dept modify loc varchar(40) first;

alter table t_dept modify deptno int(11) after aname;




操作表的约束

创建好的表,虽然字段数据类型绝对了所能存储的数量类型,但是所存储的数据类型是否合法并没有检测;
所有需要针对表中的数据做一些完整性检查操作,这些可以通过表的约束来完成;

完整性约束
1.完整性约束关键字
NOT NULL  约束字段的值不能为空
DEFAULT 设置字段的默认值
UNIQUE KEY(UK)  约束字段的值为唯一
PRIMARY KEY(PK)  约束字段为表的主键  可以作为该表记录的唯一标识;
AUTO_INCREMENT   约束字段的值为自动增加
FOREIGN KEY(FK)  约束字段为表的外键;

约束可以分为:单列约束,就是每个约束之约束一列数据;多列约束,就是可以约束多列数据;


2.、设置非空约束
create table table_name (属性名 数据类型 NOT NULL .....  );
例:创建数据库 zouyou  创建表t_dept  添加数据  设置deptno为非空约束


3.设置字段的默认值(default)
create table table_name (属性名 数据类型 default 默认值,...................................);
例:创建表t_dept 设置dname字段的默认值为xiaotiejiang;



4、设置唯一约束(unique,uk)

唯一约束保证所有记录中的字段上的值不重复;
如果用户插入的字段与其他字段上的值重复  则数据库管理系统会报错;

create table table_name(属性名 数据类型 unique l,.....);

例:设置dname的字段为uk约束
create table t_dept (deptno int,dname varchar(20) unique,loc varchar(40));

也可以为唯一约束添加一个名字;
create table t_dept(deptno int,dname varchar(20),loc varchar(40),constraint uk_dname unique(dname));



5、设置主键约束(primary key,pk)
想用数据库表中的某个字段来唯一标识所有记录时,则可以使用pk约束进行设置;在创建表时为某个字段添加pk约束,则该字段可以唯一的标示所有记录;
在数据库郝总之所以设置主键,是为了便于数据库管理系统快速地查找到表中的记录;

设置主键约束时,主键的字段值是唯一、非空的。由于主键可以使单一字段,也可以使多个字段,分为单字段主键和多字段主键;
像数据库表总的id设置主键约束来区分。。
a、单字段主键
create table table_name(属性名 数据类型 primary key,.......);
例:
在t_deot表中 设置deptno 为主键约束;
create table t_dept (deptno int primary key,
dname varchar(20),
loc varchar(40));

可以为deptno字段上的pk约束设置一个名字,可以用命令 constraint 
create table t_dept (deptno int,dname varchar(20),loc varchar(40),
constraint pk_dname primary key(dname));

b、多字段主键

当主键由多个字段组成的时候  可以用constraint 来实现;

为deptno和dname两个字段创建主键约束;

create table t_dept (deptno int,dname varchar(20),loc varchar(40),
constraint pk_deptno_dname primary key(deptno,dname));


在表中deptno和dname已被设置为联合主键;


6、设置字段自动增加(auto_increment)
auto_increment 是mysql唯一扩展的完整性约束,当数据库表中插入新记录时,字段上的值会自动生成唯一的ID...。。
一个数据库表中只能有一个字段使用该约束,auto_inctement约束后的字段也会生成id  所以该字段也经常会设置成pk主键;

create table table_name(属性名 数据类型 auto_increment,..........);

l例:在t_dept中设置deptno的字段为auto_increment 和pk约束;
create table t_dept (
deptno int primary key auto_increment,
dname varchar(20),
loc varchar(40));


7、设置外键约束(foreign key ,fk.)

外键约束保证多个表(通常两个表)之间的参照完整性;即构建于两个表之间的参照关系;

设置外键约束的两个表之间会具有父子关系,即子表的某个字段的取值范围由父表所决定,

例如表示一个部门和员工的关系;
有两张表 部门表和员工表,员工表中有一个表示部门标号的字段 deptno,其依赖于部门表的主键,这样字段deptno就是员工表的外键,这样两个表才建立了关系;。。
感觉挺绕弯的。。


设置一个表的Fk 非常简单

create table table_name(属性名  数据类型,属性名  数据类型,........constraint 外键约束名 foreign key(属性名1) references 表名 (属性名2));

属性1:参数是子表中设置外键的字段名;属性2 :是父表设置的主键约束的字段名;

例子:
数据库中两个表 一个部门表t_dept 和员工表t_yuangong,设置员工表字段deptno为外键约束,表示一种部门中有多个雇员的关系;

先在t_dept部门表中创建主键约束
create table t_dept (deptno int primary key,
dname varchar(20),
loc varchar(40));

在创建员工表中的外键约束
create table t_yuangong(
pno int primary key,
name varchar(20),
job varchar(40),
mgr int,
hireate date,
sal double(10,2)
comm double(10,2)
detpno int,
conctraint fk_deptno foreign key(deptno) references t_dept(deptno));


创建外键的时候  父表中参考字段的数据类型要和子表中创建外键字段的类型一致。。

今天先写这些吧。。明天继续。。。
阅读(3589) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~