1基本表
1.1创建基本表
SQL语言使用create table 语句定义基本表,其基本格式如下:
create table <表名>
(
<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]
...
[,<表级完整性约束条件>];
)
例1、建立一个“学生”表student
create table <表名>
(
sno char(9) primary key, //把sno设置为主键
cno char(4)
sname char(20) unique, //sname取唯一值
ssex char(2),
sage smallint,
)
这里需要注意的是,如果sno和cno同时设置为主键,则SQL语句为:primary key(sno,cno);外键设置是:foreign key (列名) references 表名1(列名)(列名是外码,两个列名是一样的,被参照表是表名1)
1.1.1在某个模式下创建表
每一个基本表都属于某一个模式,一个模式包含多个基本表。当定义基本表时一般有三种定义它所属的模式的方法:
方法一:在表名中明显的给出模式名。
create table "S-T".student (...) //表student所属的模式时S-T
方法二:在创建模式语句中同时创建表。
create schema test authorization liu
create table <表名>
(
...
)
方法三:设置所属的模式,这样在创建表时表名中不必给出模式名。
//先设置搜索路径:
set search_path to "S-T",public;
//然后,定义基本表:
create table student
(
...
)
1.2修改基本表
使用T-SQL语句修改基本表,其一般格式为:
alter table <表名>
[add [column]<新列名><数据类型>[完整性约束]]
[add <表级完整约束>]
[drop [column] <列名>[cascade|restrict]]
[drop constraint <完整性约束名>[cascade|restrict]]
[alter column<列名><数据类型>];
例2、将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整型
alter table student
alter column sage int;
1.3删除基本表
使用T-SQL语句删除基本表,其一般格式为:
drop table <表名>[restrict|cascade];
这里需要说一下restrict与cascade和上一个博客中删除模式是一样的,这里就不做详细介绍,不明白的可以参考上一个博客-模式的删除。
1.4表中数据类型
数据类型 | 含义 |
---|---|
char(n),character(n) | 长度为n的定长字符串 |
nchar(n) | 长度为n的定长字符串 |
varchar(n) | 最大长度为n的变长字符串 |
nvarchar(n) | 可变长度的 Unicode 数据,最大长度为n的变长字符串 |
clob | 字符串大对象 |
tinyint | 允许从 0 到 255 的所有数字(1字节) |
int,integer | 长整型(4字节) |
smallint | 短整型(2字节) |
bigint | 大整数(8字节) |
numeric(p,d) | 定点数,有p位数字(不包括符号、小数点)组成,小数点后面有d位数字 |
decimal(p,d),dec(p,d) | 同numeric |
real | 取决于机器精度的单精度浮点数 |
double precisionl | 取决于机器精度的双精度浮点数 |
float(n) | 可选精度的浮点数,精度至少为n位数字 |
boolean | 逻辑布尔值 |
date | 日期,包括年、月、日,格式为 YYYY-MM-DD |
time | 时间,包括一日的时、分、秒,格式为 HH:MM:SS |
timestamp | 时间戳类型 |
interval | 时间间隔类型 |
这里我需要说明一下char(n),nchar(n),varchar(n),nvarchar(n)的区别:
- char(4):不论你存储的数据是否达到了4个字节,都要占去4个字节的空间;
- nchar(4):一般情况下一个汉字是占用两个字节,而使用nchar(4),可以输入4个字节;
- varchar(4):如果一个字段可能的值是不固定长度的,我们只知道它不可能超过4个字符,把它定义为 VARCHAR(4)是最合算的;
- nvarchar(4):把2、3结合在一起就是nvarchar(4)了,判断字符串的时候可以不需要考虑中英文两种字符的差别,输入几个字符就可以输入几个中文。
索引
2.1 建立索引
建立索引使用create index 语句,其一般格式为:
create [unique][cluster] index <索引>
on <表名>(<列名>[<次序>][,<列名>[<次序>]]...);
其中,<表名>就是建索引的基本表的名字。索引可以建立在该表的一列或多列上,各列名之间用逗号分隔。每个<列名>后面还可以用<次序>指定索引值得排列次序,可选asc(升序)或者desc(降序)默认是asc;
unique 表示此索引的每一个索引值只对应唯一的数据记录。
cluster 表示要建立的索引是聚簇索引。
例3、为student数据库中的sc表按学号降序,课程号升序建立唯一索引
create unique index scno
on sc (sno desc,cno asc);
2.2修改索引
如果需要对已经建立好的索引进行重新命名,可以使用alter index 语句。其一般格式如下:
alter index <旧索引名> rename to <新索引名>
2.3删除索引
在SQL中,删除索引使用drop index 语句,其一般格式为:
drop index <索引名>
这里需要注意一下,有时如果使用该语句删除不了索引时就使用: drop index <索引名> on <表名>进行删除。