4.SQL语句之二维表创建以及主键约束、非空约束、检查约束、唯一约束、外键约束

本文详细介绍了如何使用SQL创建二维表,包括number、varchar2、char、date、timestamp、BLOB、CLOB等数据类型。同时,讲解了主键、非空、检查、唯一和外键约束的创建、删除方法,以及外键约束的级联操作和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二维表创建

创建表  使用create table 表名(字段名 类型,字段名 类型,...)
数据类型
    number类型(数值类型)
        整数类型 number(a)  总长度为a
        浮点数类型 number(a,b)  总长度为a,小数长度为b,小数位可以不写
    varchar2类型(字符类型)
        varchar2(ln)   ln表示字符的最大长度,实际存储内存长度根据字符大小自动分配,但最大长度不能超过ln
                        特点:动态分配存储空间,节省空间
    char类型 (字符类型)
        char(ln) 不管字符数据长度多大,直接开辟ln大小的空间存储数据
                     特点:存储效率高于varchar2
   日期类型  

        date  保存日期和时间,在数据库中的存储固定为7个字节

        timestap  与date的区别是不仅可以保存日期和时间,还能保存小数秒。数据库内部用7或者11个字节存储,如果精度为0,

                         则用7字节存储,与date类型功能相同,如果精度大于0则用11字节存储

  大文本类型

        BLOB:二进制大对象,存储在数据库里的大对象,一般是图像声音等文件。

        CLOB: 字符型大对象。一般存储大数量文本信息。存储单字节,固定宽度的数据。


二维表创建约束

主键约束

主键特点: 非空唯一,用来标识一条数据

1.直接在创建表的字段后使用primary key

2.在创建表的语句的最后面使用 constraints pk_表名_字段名 primary key(字段名);

3.在创建表后使用 alter table 表名 add constraints pk_表名_字段名 primary key(字段名);

删除主键   alter table 表名 drop constraints (主键约束名)pk_表名_字段名;

非空约束

 

1.直接在创建表的字段后使用not null关键字

2.在创建表的语句的最后面使用 constraints ck_表名_字段名 check (字段名 is not null);

3.在创建表后使用 alter table 表名 add constraints ck_表名_字段名 check (字段名 is not null);

删除非空约束   alter table 表名 drop constraints (非空约束名)ck_表名_字段名 check (字段名 is not null);

检查约束

 

1.直接在创建表的字段后使用check(条件)  比如 sage number(3) check(sage<150 and sage>0);

2.在创建表的语句的最后面使用 constraints ck_表名_字段名 check(条件);

3.在创建表后使用 alter table 表名 add constraints ck_表名_字段名 check (条件);

删除检查约束  alter table 表名 drop constraints (检查约束名)ck_表名_字段名 check (条件); 

唯一约束

1.直接在创建表的字段后使用unique  比如 sqq varchar2(30) unique;

2.在创建表的语句的最后面使用 constraints un_表名_字段名 check(条件);

3.在创建表后使用 alter table 表名 add constraints un_表名_字段名 unique(字段名);

删除检查约束  alter table 表名 drop constraints (唯一约束名)un_表名_字段名 unique(字段名);

 通过上面的学习,我们已经可以创建一个较为完整的student表,如下所示。

create table student(
       sno number(10) primary key,  --主键约束
       sname varchar2(100) not null, --非空约束
       sage number(3) check(sage>0 and sage<150),  --检查约束
       ssex char(4) check(ssex='男' or ssex='女'), --检查约束
       sfav varchar2(500) ,
       sbirth date,
       sqq varchar2(30) unique  --唯一约束
       cid number(10) references clazz(cno)  --外键约束  下文要讲
)

外键约束

  注意到上文中创建的student表中的cid字段是一个外键约束,通过外键约束使得student表和下面的clazz表联系起来。

create table clazz(
       cno number(10) primary key,
       cname varchar2(100) not null,
       cdesc varchar2(500)
)

那么什么是外键约束呢?

概念:当一张表的某个字段的值需要依赖另外一张表的某个字段的值,则使用外键约束
            其中主动依赖的表称为子表,被依赖的表称为父表外键加在子表中

作用:当在子表中插入的数据在父表中不存在,则会自动报错

1.在子表的字段后直接使用 references 父表名(字段名) 例如 cid number(10) reference clazz(cno);

2.在创建表语句的最后面使用 constraints fk_子表名_字段名 foreign key(字段名) references 父表名(字段名)

3.在创建表后使用 alter table 表名 add constraints fk_子表名_字段名 foreign key(字段名) references 父表名(字段名)

删除外键约束  alter table 表名 drop constraints (外键约束名)fk_子表名_字段名

外键选取:  一般选取父表的主键作为子表的外键
外键缺点:无法直接删除父表数据,除非进行级联删除

    级联删除:
            使用:在添加外键约束时,使用关键字 on delete cascade
            作用:当删除父表数据时,自动删除子表相关所有数据
            缺点:无法保留子表历史数据

           使用:在添加外键约束时,使用关键字 on delete set null
           作用:删除父表数据时,将字表中的依赖字段的值设置为null
           注意:子表依赖字段不能添加非空约束

 

实际开发时解决方法:

  • 能不用外键就不用外键,实在需要外键时再使用
  • 1.删除数据时可以先接触外键约束,删除完成后,再添加上外键约束
  • 2.不让客户填写信息,而是进行信息选择。例如一共就两个班,学生在填写信息时下拉选择即可
在students数据库中,用命令方式创建下列关系。 Student(sno,sname,ssxe,sage,dept) Course(cno,cname,credit,semester) SC(sno,cno,Grade) Student 列名 说明 数据类型 约束 Sno 学号 普通编码定长字符串,长度为7 主键 Sname 姓名 普通编码定长字符串,长度为10 Ssex 性别 普通编码定长字符串,长度为2 取值范围:{男,女} Sage 年龄 整形 Dept 所在系 普通编码定长字符串,长度为20 Course 列名 说明 数据类型 约束 Cno 课程号 普通编码定长字符串,长度为10 主键 Cname 课程名 普通编码定长字符串,长度为20 取值唯一(Unique) Credit 学分 整型 大于0 Semester 开课学期 整型 SC 列名 说明 数据类型 约束 Sno 学号 普通编码定长字符串,长度为7 主键,引用Student Cno 课程号 普通编码定长字符串,长度为10 主键,引用Course Grade 成绩 整型 允许为 3、向已创建二维表输入数据。 Student数据 Sno Sname Ssex Sage Dept 0811101 李勇 男 21 计算机系 0811102 刘晨 男 20 计算机系 0811103 王敏 女 20 计算机系 0811104 张小红 女 19 计算机系 0821101 张立 男 20 信息管理系 0821102 吴宾 女 19 信息管理系 0821103 张海 男 20 信息管理系 0831101 钱小平 女 21 通信工程系 0831102 王大力 男 20 通信工程系 0831103 张姗姗 女 19 通信工程系 Course数据 Cno Cname Credit Semester C001 高等数学 4 1 C002 大学英语-1 3 1 C003 大学英语-2 3 2 C004 计算机文化学 2 2 C005 Java 2 3 C006 数据库基础 4 5 C007 数据结构 4 4 C008 计算机网络 4 4 SC数据 Sno cno grade 0811101 C001 96 0811101 C002 80 0811101 C003 84 0811101 C005 62 0811102 C001 92 0811102 C002 90 0811102 C004 84 0821102 C001 76 0821102 C004 85 0821102 C005 73 0821102 C007 Null 0811103 C001 50 0811103 C004 80 0831101 C001 50 0831101 C004 80 0831102 C007 Null 0831103 C004 78 0831103 C005 65 0831103 C007 Null
03-08
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值