创建表和添加表约束

 一、标准的建表语法
   
    CREATE TABLE 表名
    (列名 数据类型 [默认 表达式],...
    );
  
    
说明:
    1.在创建新表时,指定的表名必须不存在,否则会出错
    2.使用值: 当插入行时如果不给出值,dbms将自动采用默认值   dbms:数据库管理系统 null 0 0.0
    3.在使用create语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据库插入表中
    
    
    数据库表字段的数据类型
     字符数据类型 
          CHAR:存储固定长度的字符串     
          VARCHAR2 :存储可变长度的字符串   
          
    数值数据类型
       NUMBER:存储整数和浮点数,格式为NUMBER(p, s)
          列名  NUMBER             
          列名  NUMBER (p)              {整数}   number (10)   zhengshu 
          列名  NUMBER (p, s)            {浮点数}    number (5,3)   11.111
          
          
          
    日期时间数据类型
        DATE:存储日期和时间数据 
        TIMESTAMP:比DATE更精确  
        
    LOB数据类型
        BLOB:存储二进制对象,如图像、音频和视频文件
        CLOB:存储字符格式的大型对象 


  
  --创建表
  CREATE TABLE STUDENT(
        SNO NUMBER(6),  
        SNAME VARCHAR2(20),
        SEX VARCHAR2 (2),
        AGE NUMBER(3),
        ENTERDATE DATE,
        CLAZZ VARCHAR2 (10)
  );
  
   --EMAIL VARCHAR2(20)
  SELECT * FROM STUDENT;
  
  --插入数据
  INSERT INTO STUDENT VALUES(1001,'羽毛','',-10,sysdate,'01级02班');
    INSERT INTO STUDENT(sno,sex,age) VALUES(1001,'',-100);
  
  --像已有表中添加一个列()
  ALTER TABLE STUDENT ADD ADDRESS VARCHAR2 (20);
  
  --以下代码要求表中没有数据,因为如果表中存在数据,那么已存在的数据列email讲使用null填充
  ALTER TABLE STUDENT ADD EMAIL VARCHAR2(20) NOT NULL;
  
  --插入数据sno,sname,email
  INSERT INTO student(sno,sname) VALUES (110,'缺一个'); 
  
  --将已有表中的列删除  column--列  table -表
  ALTER TABLE STUDENT
  DROP COLUMN EMAIL;
  
  --将已有表中的列进行修改,默认只对新添加的数据起作用   modify
  ALTER TABLE STUDENT 
  MODIFY (SEX VARCHAR2(4) DEFAULT '');
  
  --对已有表中的列名重命名
  ALTER TABLE STUDENT
  RENAME COLUMN SNAME TO STU_NAME;
  
  --给表重命名
  RENAME STUDENT TO STU ;
  
  SELECT * FROM STU;
  
DROP TABLE STUDENT;
DROP TABLE STU;

--小结:
     --insert--> 向已有表中插入数据  -->操作数据
     --add  -->向表中添加列  -->操作的表结构
     
     --update -->对已有表中的数据进行修改
     --modify -->修改表中的列
     
     --delete -->删除表中的数据
     --drop -->删除表

  二、表约束

  数据完整性约束

    1.表的数据有一定的取值范围和联系,多表之间的数据有时也有一定的参照关系。
    2.在创建表和修改表时,可通过定义约束条件来保证数据的完整性和一致性。
    3.约束条件是一些规则,在对数据进行插入、删除和修改时要对这些规则进行验证,从而起到约束作用。

  完整性约束分类
    域完整性约束(非空not null,检查check)字段约束
    实体完整性约束(唯一unique,主键primary key) 行和行之间的约束
    参照(引用)完整性约束(外键foreign key) 表和表之间的约束

  主键约束 (primary key) PK_表名_字段名
    要求主键类数据唯一,并且不允许为空,主键可以包含表的一列或多列,多列组成的主键称之为-复合主键
  唯一约束(unique) UK_表名_字段名
    要求该列值唯一,允许为空,而且null可以是多个
  检查约束 (check) CK_表名_字段名
    某列取值范围显示,格式限制等,如年龄拘束,邮件限制 email like '%@%' --length (pwd) =6
  非空约束(not null) NN_表名_字段名
    某列内容(值)不为空
  外键约束(foreign key) FK_表名_字段名
    用于两个表之间建立关系,需要制定引用主表的那列,外键同创是用来约束两个表之间的数据关系
    定义外键的那张表称之为子表,另一张表称之为主表,在表的创建过程中,应该先创建主表,后创建子表

--主键,唯一,非空,检查
CREATE TABLE STUDENT(
       STUNO NUMBER(4) CONSTRAINT PK_STU_STUNO PRIMARY KEY ,
       SNAME VARCHAR2(10) CONSTRAINT NN_STU_SNAME NOT NULL,
       SEX VARCHAR2(3) DEFAULT '',
       AGE NUMBER(3) CONSTRAINT CK_STU_AGE CHECK (AGE BETWEEN 18 AND 30),
       EMAIL VARCHAR2(20) CONSTRAINT CK_STU_EMAIL CHECK (EMAIL LIKE '%@%'),
       PSWD VARCHAR2(10) CONSTRAINT CK_STU_PSWD CHECK (LENGTH(PSWD)>=6),
       CLAZZ NUMBER(2)
);

SELECT * FROM STUDENT;

DROP TABLE STUDENT;

--查看约束
SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'STUDENT'; 

--性别没有限定值
ALTER TABLE STUDENT
ADD CONSTRAINT CK_STU_SEX CHECK (SEX = '' OR SEX = '');

--邮箱没有唯一约束
ALTER TABLE STUDENT
ADD CONSTRAINT UN_STU_EMAIL UNIQUE (EMAIL);

--测试数据
INSERT INTO STUDENT
VALUES (1002,'BACK',DEFAULT,30,'abcd@','1111111',1);

--写约束的时候,写上约束名,一旦执行插入数据时,能很快的定位


--添加班级的外键
ALTER TABLE STUDENT
ADD CONSTRAINT FK_STUDENT_CLASSID
FOREIGN KEY (CLAZZ) REFERENCES GRADE (GREADEID); 
原文地址:https://www.cnblogs.com/SacredOdysseyHD/p/9063274.html