当前位置: 首页>数据库>正文

SQLite 数组类型 sql server数组定义

一:定义基本表和完整性约束的实现

1、使用CREATE  TABLE 语句,用户可以创建一个表结构,还可以为某个域设定缺省值。
   定义基本表
       CREATE TABLE <表名>
          ( <列名><数据类型> [列级完整性约束条件] 
              [ ,<列名><数据类型> [列级完整性约束条件]...]
              [ ,<表级完整性约束条件>]   );
   语法说明:
     表名:所要定义的基本表的名字。
     列名:表由一个或多个属性(列)组成。建表时通常需要定义列信息及每列所使用的数据类型,列名在表内必须为唯一的,一个表至少包  含一个列。
     数据类型:定义表的各个列(属性)时需指明其数据类型和长度,不同的数据库管理系统支持的数据类型不完全相同,应根据实际使用 的DBMS来确定。
     列级完整性约束条件:只应用到一个列的完整性约束条件
     表级完整性约束条件:应用到多个列的完整性约束条件。



2、语句



--建立学生表student
 create table student
 (
    sno char(5) primary key,  /*设置主键*/
    sname char(20),           /*sname取唯一值*/
    ssex char(2),
    sage smallint,    /*smallint:4字节整数/2字节整数,8字节/4字节,存放货币类型,值为-2^63~2^63-1*/
    sdept char(15)
 )
【在student表中,学号属性的列级完整性约束条件限制该列数据值不能为空(null),并且其值具有唯一性。该完整性约束是由RDBMS内部定义,性别属性的完整性约束由用户自己定义约束表达式,并对该约束命名为ssex。
    该题目描述的约束实际上可以在建立表的过程中直接实现,具体语法如下:
     create table student
    (
     sno char(5) not null unique,
     sname char(20),
     ssex char(2),
     sage smallint default 20,
     sdept char(15),
     constraint ssex  check( ssex in (‘男’,’女’))
     )】
 
 --查询student表
 select * from student
 
 --建立课程表course
 create table course
 (
    cno char(4) primary key,
    cname char(20),
    cpno char(4) foreign key references course(cno),   /*cpno(先修课)是外码,被参照表是course,被参照列是cno*/
   【 或者  cpno char(4),
            foreign key (cpno) references  course(cno)】
    ccredit smallint
 )
 
 select * from course
 
 --建立学生选课表1 sc
 create table sc
 (
   sno char(5),
   cno char(4),
   grade smallint,
   primary key(sno,cno)     /* 主码由两个属性构成,必须作为表级完整性进行定义*/
   foreign key (sno) references student(sno),   /* 表级完整性约束条件,Sno是外码,被参照表是Student */
   foreign key (cno) references course(cno)      /* 表级完整性约束条件, Cno是外码,被参照表是Course */ 
 )
 
 select * from sc
 
 --建立学生选课表2  sc2
 create table sc2
 (
    sno char(5),
    cno char(4),
    grade smallint,
    primary key(sno,cno),
    foreign key(sno) references student(sno),
    foreign key(cno) references course(cno)
 )
 select * from sc2
【 <1>上述中建立的student表中,其中学号属性为主键(primary key),该完整性约束由用户自己定义约束名为PK_sno。实现语句如下:
       alter table student
          add constraint PK_sno primary key(sno)
  <2>建立的course表中,其中课程号属性为主键(primary key),该完整性约束由用户自己定义约束名为PK_cno,先修课号(cpno)必需是存在的课程号或者为空,所以可以建成外键约束,
     该完整性约束由用户自己定义约束名为FK_cpno。具体实现语句为:
       alter table course
          add constraint PK_cno primary key(cno),
              constraint PK_cpno foreign key(cpno) references course(cno)    
  <3>建立的sc表上,(sno,cno)联合做主键。sno和cno单独做外键。如果建立表的过程中student表sno列已经建成主键,course表的cno已经建成主键则可以通过下列语句直接建表时实现
     题目要求。
      create table sc
        (
         sno char(5) foreign key references student(sno),
         cno char(3) foreign key references course(cno),
         grade int,
         constraint PK_sc primary key (sno,cno) 
        )
    如果sc表已经建立,可以通过下面语句实现题目要求:
     alter table sc
       add  constraint PK_sc primary key (sno,cno) ,
            constraint FK_sno foreign key(sno),
            references student(sno),constraint PK_cno roreign key(cno) references cource(cno)
     需要保证Student(Sno)和Course(Cno)已经建成主键。】
 
 --向student中添加列(stept)时,不用column
 alter table student 
   add sdept1 char(20)
   
 --在student表中增加入学时间
 alter table student
   add s_entrance datetime    /*datetime为日期类型*/
 
 --修改student表中的sage数据类型
 alter table student
   alter column sage int
   
 --在course表中增加unique约束
 alter table course
   add constraint c_cname unique(cname)
   
 --删除course表中的uniqu约束
 alter table course
   drop constraint c_cname
   
 --向student表中插入一条数据
 insert into student(sno,sname,ssex)values('2012','小一','女')
 
 --向student表的sdept属性加 not null 约束
 delete from student
   alter table student
      alter column sdept char(20) not null
 
 --增加default(默认)约束
   alter table student
     add constraint c_sage default 20 for sage
     
 --check(核对)
  alter table student
    add constraint c_sstep check(ssex in('男','女'))
    
  insert into student(sno,sname,ssex)values('20121','小二','男')
  insert into student(sno,sname)values('20100','小三')
  
  select * from student
  
  --在student中,sno属性为主键(primary key),该完整性约束由用户自己定义约束名为PK_sno.实现语句如下:
  alter table student
    alter column sno char(10) not null
  alter table student
    add constraint PK_sno primary key(sno)



二:索引 

1、概念
    索引是以表列为基础的数据库对象,它保存着表中排序的索引列,并且记录了索引列在数据表中的物理存储位置,实现了表中数据的逻辑排序,其主要目的是提高数据库管理系统的性能,加快
    数据的查询速度和减少系统的响应时间。
2、作用
    表的索引就是表中数据的目录。索引是建立在表上的,不能单独存在,如果删除表,则表上的索引将随之消失。
    不使用索引,就需将数据文件分块,逐个读到内存中进行查找的比较操作。如果使用索引,则扫描索引文件,根据索引项找到元组的地址,然后再根据地址找到数据,由于索引文件很小,而且
    索引有顺序,可以极大地提高查询的速度。
3、索引类型
    (1)聚集索引聚簇索引是指数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列的值对表的物理数据页中的数据进行排序,然后再重新存储到磁盘上。每一个表只能有一个聚簇
        索引,因为一个表的记录只能以一种物理顺序存放,在通常情况下,使用的都是聚簇索引。  
    (2)非聚集索引,表的物理顺序与索引顺序不同,即表的数据并不是按照索引列排序的。索引是有序的,而表中的数据是无序的。一个表可以同时存在聚簇索引和非聚簇索引,而且一个表可以
        有多个非聚簇索引。
    (3)唯一索引,唯一索引不允许两行具有相同的索引值。例如,如果在表中的“姓名”字段上建立了唯一索引,则以后输入的姓名将不能同名。
4、建立索引原则
    在最经常查询的列上建立聚簇索引以提高查询效率;
    经常更新的列不宜建立聚簇索引;
    大表应当建索引,小表不必建索引,不宜建较多索引;
    根据查询要求建立索引。对于一些查询频度高,实时性高的数据一定要建立索引;
    主键列默认自动建立聚簇索引;
    很少在查询中被引用的列不要建立索引;
    包含较少的唯一值的列不要建立索引。
5、 <1>建立索引
      语句格式:
      CREATE [UNIQUE] [CLUSTERED] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
      用<表名>指定要建索引的基本表名字
      索引可以建立在该表的一列或多列上,各列名之间用逗号分隔
      用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
      UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
    (1)唯一值索引对于已含重复值的属性列不能建UNIQUE索引,对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值,这相当于增加了一个UNIQUE约束。



--为学生-课程数据库中的student,course,sc三个表建立索引。其中student表按学号升序建唯一索引,course表按课程号升序建唯一索引,sc表按学号升序和课程号降序建唯一索引。 
      create unique index stusno on student(sno),
      create unique index coucno on course(cno),
      create unique index scno on sc(sno ASC,cno DESC)



(2)聚簇索引,cluster表示要建立的索引是聚簇索引,建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放,也即聚簇索引的索引项顺序与表中记录的物理顺序一致。



--在student表的姓名列上建立聚族索引
      create cluster index stusame on student(sname)



在一个基本表上最多只能建立一个聚簇索引。聚簇索引的用途:对于某些类型的查询,可以提高查询效率;聚簇索引的适用范围:很少对基表进行增删操作、很少对其中的变长列进行修改操作。
   <2>删除索引
         DROP INDEX <索引名>;
     索引一经建立,就由系统使用和维护它,不需用户干预。建立索引是为了减少查询操作的时间,但如果数据增删改频繁,系统会花费许多时间来维护索引。这时,可以删除一些不必要的索引。删除索引时,系统会同时从数据字典中删去有关该索引的描述。



--删除student表的stusname索引
       drop index stusname



  --后记:我喜欢逻辑、系统性的学习知识,以上是我为自己总结的最基础、简单的SQL,分享下,也虚心接受各位的指教喽!@_@


https://www.xamrdz.com/database/65s1932723.html

相关文章: