创建数据库

 首先来认识两个概念:DML(Data Manipulation Language),数据操作语言,例如 select,insert,delete,update,commit,rollback等等。

DDL(Data Definition Language),数据顶用语言,例如create,drop,alter等等。数据操作语言不允许其修改数据库的结构,只能操作数据库中的数据。

创建数据库:

 
  
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 create database MyData -- 数据库名称
2   on Primary
3 (name = ' MyData ' , -- 主文件名称
4   filename = ' E:\MyData\Mydata.mdf ' , -- 安装路径
5 size = 10mb, -- 主文件大小
6 filegrowth = 10 % -- 增长速度
7 )
8 log on
9 (
10 name = ' MyData_log ' , -- 日志名称
11 filename = ' E:\MyData\MyData_log.ldf ' , -- 日志路径
12 size = 1mb, -- 日志大小
13 maxsize = 10mb, -- 日志最大
14 filegrowth = 1mb -- 日志增长速度
15 )
16 use Mydata

创建表:

create table 表名(1:字段定义;2:表约束定义)。

1:字段定义:字段名  数据类型  default值  not null

2:表约束定义:constraint 约束名 1)主键约束,2)外键约束,3)唯一性约束,4)检验约束 not deferrable initially immediate/initially deferred

1)主键约束:primary key(字段名)

2)外键约束: foreign key(字段名) references 表名(字段名) match(full/partial)/ on delete(cascade/set null/set default/no action) on update(cascade/set null/set                         default/no action)。

3)唯一性约束:unique (字段名)

4)检验约束:check (搜索条件)

 
   
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 CREATE TABLE CUSTOMERS
2 (CUST_NUM INTEGER PRIMARY KEY ,
3 COMPANY VARCHAR ( 15 ) NOT NULL ,
4 CUST_REP INTEGER NOT NULL ,
5 CREDIT_LIMIT DECIMAL ( 9 , 2 ) NOT NULL );
6
7   CREATE TABLE PRODUCTS
8 (MFR_ID CHAR ( 3 ) NOT NULL ,
9 PRODUCT_ID CHAR ( 5 ) NOT NULL ,
10 DESCRIPTION VARCHAR ( 15 ) NOT NULL ,
11 PRICE DECIMAL ( 9 , 2 ) NOT NULL ,
12 QTY_ON_HAND INTEGER NOT NULL
13 PRIMARY KEY (MFR_ID,PRODUCT_ID))
14
15   CREATE TABLE OFFICES
16 (OFFICE INTEGER NOT NULL ,
17 CITY VARCHAR ( 15 ) NOT NULL ,
18 REGION VARCHAR ( 10 ) NOT NULL ,
19 MGR INTEGER ,
20 TARGET DECIMAL ( 9 , 2 ),
21 SALES DECIMAL ( 9 , 2 ) NOT NULL ,
22 PRIMARY KEY (OFFICE),
23 UNIQUE (CITY));
24
25 -- DROP TABLE SALESREPS
26 CREATE TABLE SALESREPS
27 (EMPL_NUM INTEGER NOT NULL ,
28 NAME VARCHAR ( 15 ) NOT NULL ,
29 AGE INTEGER ,
30 REP_OFFICE INTEGER ,
31 TITLE VARCHAR ( 15 ),
32 HIRE_DATE VARCHAR ( 15 ) NOT NULL ,
33 MANAGER INTEGER NOT NULL ,
34 QUOTA DECIMAL ( 9 , 2 ) NOT NULL ,
35 SALES DECIMAL ( 9 , 2 ) NOT NULL ,
36 PRIMARY KEY (EMPL_NUM));
37
38 CREATE TABLE ORDERS
39 (ORDER_NUM INTEGER NOT NULL ,
40 ORDER_DATE VARCHAR ( 15 ) NOT NULL ,
41 CUST INTEGER NOT NULL ,
42 REP INTEGER ,
43 MFR CHAR ( 3 ) NOT NULL ,
44 PRODUCT CHAR ( 5 ) NOT NULL ,
45 QTY INTEGER NOT NULL ,
46 AMOUNT DECIMAL ( 9 , 2 ) NOT NULL
47 PRIMARY KEY (ORDER_NUM));

 

 删除表:

 DROP TABLE  表名 CASCADE/RESTRICT

CASCADE/RESTRICT说明了删除该表是对其他数据库造成的影响。

CASCADE 依赖于该字段的数据库中的任何其他对象会因为DROP TABLE的影响而被删除。可能会引起数据库的重大改变,慎用。

RESTRICT 数据库中的任何其他对象依赖于要删除的字段,DROP TABLE语句失败,并且字段不被删除。

SQL中删除的表是没有办法恢复的,只能通过CREATE TABLE去重建,ORACLE中删除的表会放入“垃圾箱”,也可从中恢复。

 

修改表定义:

ALTER TABLE 表名  1:ADD 字段定义

                            2:ALTER 字段名 SET DEFAULT值/DROP DFAULT

                            3: DROP 字段名 CASCADE/RESTRICT

                            4: ADD 1)主键定义,2)外键定义,3)唯一性定义,4)检验约束。

                            5:DROP CONSTRAINT 字段名 CASCADE/RESTRICT

 

 

 
  
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 ALTER TABLE CUSTOMERS ADD CONTACT_NAME VARCHAR ( 30 );
2 ALTER TABLE PRODUCTS ADD MIN_QTY INTEGER NOT NULL DEFAULT 0 ;

3 ALTER TABLE SALESREPS DROP HIRE_DATE;

  

要删除一个表的主键,必须先删除最初这个主键对应的外键。

 
  
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 ALTER TABLE SALESREPS DROP CONSTRAINT WORKSIN;
2 ALTER TABLE OFFICES DROP PRIMARY KEY ;

 

 
   
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 ALTER TABLE SALESREPS ADD CONSTRAINT SAL_OFF FOREIGN KEY (REP_OFFICE) REFERENCES OFFICES
2   ALTER TABLE SALESREPS ADD CONSTRAINT QUOTA_CAP CHECK ((HIRE_DATE < ' 2006-01-01 ' ) OR (QUOTA <= 300000 ));
3   ALTER TABLE ORDERS ADD CONSTRAINT ORD_SAL FOREIGN KEY (REP) REFERENCES SALESREPS ON DELETE SET NULL
4 ALTER TABLE ORDERS ADD CONSTRAINT ORD_PRO FOREIGN KEY (MFR,PRODUCT) REFERENCES PRODUCTS ON DELETE CASCADE
5 ALTER TABLE ORDERS ADD CONSTRAINT ORD_CUS FOREIGN KEY (CUST) REFERENCES CUSTOMERS ON DELETE CASCADE
6 ALTER TABLE OFFICES ADD CONSTRAINT OFF_SAL FOREIGN KEY (MGR) REFERENCES SALESREPS
7 ALTER TABLE OFFICES ADD CONSTRAINT HASTAR CHECK (TARGET >= 0.00 );

 

 断言:

 数据库的4中约束(唯一性约束,主键和外键约束,检验约束)另外还有两种数据库完整性约束:断言和域。

 断言是数据库约束,用它可以限制数据库的整个内容。与检验约束一样,断言作为检索条件来制定。但是与检验约束不同,断言中的检索条件可以限制多个表的内容和他们之间的

 关系。

 
  
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 CREATE ASSERTION CREDLIMIT CHECK ((CUSTOMERS.CUST_NUM = ORDERS.CUST) AND ( SUM (AMOUNT <= CREDIT_LIMIT));
2
3   DROP ASSERTION CREDLIMIT;

 

 很少有数据库支持断言。

域:

用CREATE DOMAIN创建域。一旦创建了域,就可以好像它是一个字段定义内的数据类型那样引用它。

 
  
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 CREATE DOMAIN VALID_EMPL_IDS INTEGER CHECK (VALUE BETWEEN 101 AND 199 );
2
3   DROP DOMAIN VALID_EMPL_IDS CASCADE ;
4   DROP DOMAIN VALID_EMPL_IDS RESTRICT ;

CASCADE,RESTRICT和上面的意思一样,同样也很少有数据库支持域。

别名:

别名就是把用户.表名定义为一个其他的名字,为了简化数据库的访问。

 
  
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 CREATE ALIAS REPS FOR SACHIE.SALESREPS;
2 就可以用
3   SELECT REPS.SALES FROM OFFICES;
4 来代替
5   SELECT SACHIE.SALESREPS.SALES FROM OFFICES;
6   DROP ALIAS REPS;

 

 索引:

 索引的优点是可以大大加快带有索引字段的索引条件的SQL语句的执行。

 索引的缺点之一是它消耗额外的磁盘空间,还有一个缺点是每次在表中添加记录时必须更新索引,每次更新已有记录的索引字段时也必须更新索引。

 大多数DBMS自动地位定义有唯一性约束的字段建立索引。

 CREATE (UNIQUE) INDEX 索引名 ON 表名 (字段名 ASC/DESC)

 
  
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 CREATE UNIQUE INDEX OFC_MGR_IDX ON OFFICES(MGR);
2   CREATE INDEX ORD_PROD_IDX ON ORDERS(MFR,PRODUCT);
3
4   DROP INDEX ORD_PROD_IDX;

其他的DBMS支持多种索引,例如B树索引,位图索引,和有组织的索引表。

模式:

CREATE SCHEMA 模式名 AUTHORIZATION 用户名 CREATE TABLE,CREATE VIEW,CREATE DOMAIN......

 
   
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt 1 CREATE SCHEMA JSCHEMA AUTHORIZATION JOE
2   CREATE TABLE PEOPLE(NAME VARCHAR ( 30 ),AGE INTEGER )
3   CREATE TABLE PACES(CITY VARCHAR ( 30 ),STATE VARCHAR ( 30 ))
4 GRANT ALL PRIVILEGES ON PEOPLE TO PUBLIC
5 GRANT SELECT ON PLACES TO MARY;
6
7 DROP SCHEMA JSCHEMA CASCADE / RESTRICT

 

模式有个优点:定义外键之前首先创建一个表,然后再创建其他表之后,添加外键定义。CREATE SCHEMA语句避免了这一问题,因为在所有的表定义被创建之前,DBMS不见眼被模式指定的完整性约束。实际上,CREATE SCHEMA语句常被用于首次创建一系列表的相关表,随后,用CREATE/ALTER/DROP TABLE的功能添加,删除或修改各个表。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-677252/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16436858/viewspace-677252/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值