zoukankan      html  css  js  c++  java
  • 创建数据库

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

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

    创建数据库:

    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 (搜索条件)

    代码
    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

    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;

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

    1 ALTER TABLE SALESREPS DROP CONSTRAINT WORKSIN;
    2 ALTER TABLE OFFICES DROP PRIMARY KEY;
    代码
    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中约束(唯一性约束,主键和外键约束,检验约束)另外还有两种数据库完整性约束:断言和域。

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

     关系。

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

     很少有数据库支持断言。

    域:

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

    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和上面的意思一样,同样也很少有数据库支持域。

    别名:

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

    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)

    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......

    代码
    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的功能添加,删除或修改各个表。

    I believe,I can. Sachie.Dong
  • 相关阅读:
    07-图4 哈利·波特的考试 (25分)
    Windows环境下清除SVN文件
    查看SQL SERVER 2008R2 表大小
    Oauth支持的5类 grant_type 及说明
    SignalR的性能监测
    Loadrunner11安装
    Azure ServiceBus 通信失败问题
    sql server text类型 存储问题
    System.BadImageFormatException
    InputStream只能读取一次的解决办法 C# byte[] 和Stream转换
  • 原文地址:https://www.cnblogs.com/sachie/p/1859953.html
Copyright © 2011-2022 走看看