数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
用SQL创建数据库

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

用SQL创建数据库

首先说说怎么用SQL语句创建数据库,创建数据库的语句有如下几种:
   1. CREATE TABLE(创建新表)
   2. CREATE INDEX(增加索引)
   3. DROP INDEX(删除索引)
   4. CONSTRAINT(约束语句)
   5. ALTER TABLE(修改表)
   6. DROP TABLE(删除表)

CREATE TABLE语句:

在数据库中生成新表,表中字段的类型可以为:INTEGER(整型)、LONG(长整型)、 SINGLE(单精度浮点数)、DOUBLE(双精度浮点数)、DATETIME(日期型,也可以写成DATE)、BIT(布尔型)、 TEXT(字符串型,最大255个字节)、MEMO(字符串型,最大可达1.2G字节)、 COUNTER(自动递增长整型,可确定记录的唯一性)、CURRENCY(货币型,精确到小数点左边15位,右边4位)、 BINARY(字节型,最大255个)、LONGBINARY(用于OLE对象)、GUID(全局唯一标识符)。

生成表NewTable,该表有文本字段Field1和整型字段Field2,表名和字段名可以随便你取,不区分大小写,但是,有些保留字不能用作表名字段名,比如Number
CREATE TABLE NewTable(Field1 TEXT(30), Field2 INTEGER);

CREATE INDEX语句:

INDEX是为了加快查找记录的速度,或者是为了增加字段约束关系而设置的。

创建索引语句执行前表中可以有记录,但存在的记录必须满足该索引语句的约束关系,否则语句不能执行,另外要注意的是在同一个数据库中(而不仅仅是在同一个表中),索引名不能相同,否则语句也会失败。

生成字段Field1的索引字段NewIndex,两条语句作用相同
生成后Field1字段可以有相同的值,可以有空值(NULL)
CREATE INDEX NewIndex ON NewTable (Field1);
CREATE INDEX NewIndex ON NewTable (Field1) WITH IGNORE NULL;

生成字段Field1的索引字段NewIndex,注意,每个表里只能有一个主索引(PRIMARY)。生成后Field1字段不能有相同的值,不能有空值(当然,如果是TEXT类型,可以有一个空串,但是空串不是空值)
CREATE INDEX NewIndex ON NewTable(Field1) WITH PRIMARY;

字段Field1不能有相同的值,但可以有空值(两个空值不算相同的值)
CREATE UNIQUE INDEX NewIndex ON NewTable(Field1);

字段Field1可以有相同的值,但不能有空值
CREATE INDEX NewIndex ON NewTable(Field2) WITH DISALLOW NULL

可以在索引语句中加入ASC(升序)或DESC(降序)来控制记录排列顺序如果不使用顺序字,SQL则默认使用ASC顺序
CREATE INDEX NewIndex ON NewTable(Field1 ASC, Field2 DESC);

DROP INDEX语句:

删除表NewTable中的索引NewIndex,语句执行前索引NewIndex必须存在
DROP INDEX NewIndex ON NewTable;

CONSTRAINT语句:

CONSTRAINT子句用于创建数据库完整性的索引,它和INDEX语句作用一样,有些地方可以互相替代,它可以使用PRIMARY KEY(主关键字),UNIQUE(唯一)和FOREIGN KEY(外部关键字),和INDEX相比不能使用IGNOR NULL和DISALLOW NULL,但多了FOREIGN KEY(这也是它最强大的地方)。另外, CONSTRAINT语句必须和CREATE TABLE或ALTER TABLE语句一起使用。

生成表NewTable,主关键字段是Field1,主索引是NewPK
CREATE TABLE NewTable(Field1 LONG CONSTRAINT NewPK PRIMARY KEY, Field2 MEMO, Field3 DATETIME);

生成索引为NewUK的表NewTable,Field1不能有相同值,可以有空值
CREATE TABLE NewTable(Field1 INTEGER CONSTRAINT NewUK UNIQUE);

生成多列的主索引,两条记录的Field1和Field2不能全部相同,也不能为空值
CREATE TABLE NewTable(Field1 INTEGER, Field2 CURRENCY, CONSTRAINT NewPK PRIMARY KEY(Field1, Field2));

生成多列的UNIQUE索引,两条记录的Field1和Field2不能全部相同注意,如果两条记录其中一个字段相同而另一个字段都是空值,那也算两个字段不同
CREATE TABLE NewTable(Field1 INTEGER, Field2 CURRENCY, CONSTRAINT NewUK UNIQUE(Field1, Field2));

要在几个不同的表之间建立联系,就要使用FOREIGN KEY REFERENCES子句,它可以限定某个表的字段内容必须存在于另外一个表中。

第一个例子:
首先,生成主关键字段为Field1的表NewTable1
CREATE TABLE NewTable1(Field1 INTEGER CONSTRAINT NewPK PRIMARY KEY);

然后,再生成外部索引,两个表的Field1必须类型相同,并且第一个表的Field1是主关键字段或UNIQUE字段。生成外部索引后,表NewTable2要增加记录,它的Field1字段值必须已经存在于表NewTable1的Field1字段中。
下面两条语句作用相同,因为Field1是NewTable1的主关键字段,可以省略不写
CREATE TABLE NewTable2(Field1 INTEGER CONSTRAINT NewFK REFERENCES NewTable1);
CREATE TABLE NewTable2(Field1 INTEGER CONSTRAINT NewFK REFERENCES NewTable1(Field1));

第二个例子:
首先,生成主关键字段为Field1和Field2的表NewTable1
CREATE TABLE NewTable1(Field1 INTEGER, Field2 TEXT(20), CONSTRAINT NewPK PRIMARY KEY(Field1, Field2));

然后,生成多列外部索引
CREATE TABLE NewTable2(Field1 INTEGER, Field2 TEXT(20), CONSTRAINT NewFK FOREIGN KEY(Field1, Field2) REFERENCES NewTable1(Field1, Field2));

ALTER TABLE语句:

在表生成之后,如果想修改表的结构,就使用这条语句,它能增加或删除字段以及约束关系。

给表NewTable增加日期型字段Field3,语句执行前表NewTalbe必须没有字段Field3
ALTER TABLE NewTable ADD COLUMN Field3 DATE;

删除表NewTable中的字段Field3,语句执行前字段Field3必须存在表NewTable中
ALTER TABLE NewTable DROP COLUMN Field3;

给表NewTable增加NewUK约束关系
ALTER TABLE NewTable ADD CONSTRAINT NewUK UNIQUE(Field1,Field2);

删除表NewTable的NewUK约束关系
ALTER TABLE NewTable DROP CONSTRAINT NewUK;

DROP TABLE语句:

删除表NewTable,语句执行前表NewTable必须存在
DROP TABLE NewTable;



相关文章

相关软件