首页 > 数据库 >使用SQL语句创建数据库表

使用SQL语句创建数据库表

时间:2023-04-07 11:46:43浏览次数:42  
标签:语句 SNO 数据库 SQL 约束 VARCHAR2 表中 CNO 主键

为维护数据库的完整性,数据库管理系统必须能够实现如下功能:

  • 提供定义完整性约束条件的机制
  • 提供完整性检查的方法
  • 进行违约处理

所以我们要使用规范的SQL语句来创建数据库表:

  • 在建表时声明主关键字和外关键字的约束名
  • 被参照表中的列必须是该表中的主关键字组成部分,否则ORACLE将不产生外关键字
  • 对主关键字有许多限制。首先,作为主关键字组成部分的列不能为NULL;其次,定义为LONGLONG RAW的列不能是主关键字的组成部分;第三,主关键字的列最多只能有16列

以上的规则看不太懂是不是,没关系,我们用实例来解释一下。

创建下面这张表

 

 我们先用最简单的想法去创建一个表,再逐渐添加功能

CREATE TABLE S
(
    SNO    VARCHAR2(2),
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4)
);

 

1.添加主键约束

CREATE TABLE S
(
    SNO    VARCHAR2(2) PRIMARY KEY,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4)
);

将SNO列定义为主键约束的作用是将该列作为表S的主键,主键是用于标识表中每个行的唯一标识符。主键的作用是确保表中每行的唯一性,可以通过主键来避免表中出现重复的行。

在该示例中,将SNO列定义为主键约束的方式是在列定义后添加PRIMARY KEY关键字。这意味着在表格中,每个行的SNO列都必须包含唯一的值。如果插入了两个具有相同SNO值的行,将无法插入第二个行,因为它将与第一个行产生主键冲突。

另外,定义主键约束的列通常会自动创建索引,以提高主键列的查询效率。在上述示例中,SNO列的主键约束将自动创建一个名为S_PK的索引。

总之,主键约束是确保表中每行的唯一性的一种方法。它可以确保表中没有重复行,并且可以提高查询效率。

书上的写法是下面这种,它给约束赋予了一个约束名,注意括号:

CREATE TABLE S
(
    SNO    VARCHAR2(2) ,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CONSTRAINT PK_SNO PRIMARY KEY (SNO)    
);

 

2.添加外键约束

CREATE TABLE S
(
    SNO    VARCHAR2(2) PRIMARY KEY,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CNO    VARCHAR2(2),
    FOREIGN KEY (CNO) REFERENCES C (CNO)
);

外键约束着手于解决定义参照完整性的问题。在这个例子中,S表中有一个名为CNO的列,它被定义为外键列,并参照了另一个名为C表中的CNO列。这个外键约束的作用是确保S表中的每个CNO值都存在于C表中的CNO列中。也就是说,如果在S表中插入一个CNO值,但在C表中不存在相应的CNO值,则插入操作将被拒绝,并引发外键约束错误。

举个例子,如果在S表中插入一行记录,其中CNO列的值为"01",但在C表中并不存在CNO为"01"的行,这个插入操作将被拒绝,并报告外键约束错误。这个约束确保了S表中的CNO值与C表中的CNO值一致,保证了数据的完整性和一致性。

在这个例子中,外键约束还可以有其他约束选项,例如ON DELETE CASCADE和ON UPDATE CASCADE。这些选项指定当C表中的主键行被删除或更新时,S表中的相关行应该如何处理。例如,ON DELETE CASCADE选项将指示数据库删除S表中相关行,以确保数据的一致性。

书上的写法是这种,同样是赋予了一个约束名,注意括号:

CREATE TABLE S
(
    SNO    VARCHAR2(2) PRIMARY KEY,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CNO    VARCHAR2(2),
    CONSTRAINT FK_SNO FOREIGN KEY (CNO),REFERENCES C (CNO)
);

 

3.添加检查约束

CREATE TABLE S
(
    SNO    VARCHAR2(2),
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CHECK (SNO LIKE 'S%')
);

这个例子中,S表中的SNO列定义了一个检查约束,该约束要求SNO列中的所有值都以字符“S”开头。也就是说,如果在S表中插入一行记录,其中SNO列的值不以字符“S”开头,则插入操作将被拒绝,并引发检查约束错误。

检查约束是一种用于强制执行数据完整性的机制,它要求在插入或更新数据时对其进行特定的检查。在这个例子中,检查约束确保S表中的SNO列中的所有值都符合特定的模式。这可以有效地防止插入无效或不合法的数据。

需要注意的是,检查约束并不是一个必需的约束,因为可以在应用程序层面对数据进行检查。但是,在数据库层面定义检查约束可以确保数据的完整性和一致性,减少应用程序层面的错误处理和数据处理的负担。

书上的写法是这种,同样赋予了约束名:

CREATE TABLE S
(
    SNO    VARCHAR2(2),
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4),
    CONSTRAINT CHK_SNO CHECK (SNO LIKE 'S%')
);

 

4.添加唯一约束

CREATE TABLE S
(
    SNO    VARCHAR2(2) UNIQUE,
    SNAME    VARCHAR2(6),
    STATUS    VARCHAR2(2),
    CITY    VARCHAR2(4)
);

用于确保列中的值是唯一的,但可以包含NULL值。

 

总结:通过对以上SQL语句的理解,你已经可以创建一个规范的表啦。创建一个规范的表通常要在直观的表上添加三个部分:主键约束,外键约束,检查。

标签:语句,SNO,数据库,SQL,约束,VARCHAR2,表中,CNO,主键
From: https://www.cnblogs.com/yonuyeung/p/17295680.html

相关文章

  • GaussDB(DWS)集群中寻找节点CPU占用高的语句
    摘要:本文主要通过实例讲解如何通过gs_cpuwatcher.sh脚本寻找CPU占用高语句。本文分享自华为云社区《GaussDB(DWS)gs_cpuwatcher.sh脚本如何寻找CPU占用高语句》,作者:fighttingman。【工具名称】gs_cpuwatcher【功能描述】1.寻找集群内节点占用CPU高的语句【使用场景】CP......
  • 爬虫之数据库存储
    在对于爬取数量数量较少时,我们可以将爬虫数据保存于CSV文件或者其他格式的文件中,既简单又方便,但是如果需要存储的数据量大,又要频繁访问这些数据时,就应该考虑将数据保存到数据库中了。目前主流的数据库有关系性数据库MySQL,以及非关系性数据库MongoDB和Redis等。这里我先来讲讲MySQL......
  • C# opc ua客户端实例源码,带ef6+sqlite
    C#opcua客户端实例源码,带ef6+sqlite。代码有完整的注解,及包括所有的链接库和程序结构思维图。纯学习资料YID:2855638904489888......
  • sqlmap基本使用教程
    转载于https://blog.csdn.net/m0_46230316/article/details/105290227如有侵权,联系删除,感谢......
  • 常见sql问题总结三
    --查询各科成绩前三名的记录:(不考虑成绩并列情况)--ROW_NUMBER()函数方便统计排序。--ROW_NUMBER()OVER(PARTITIONBYSC.corse_idORDERBYSC.numberDESC)RN根据corse_id分组在进行倒叙排序SELECT*FROM(SELECTSC.student_idSNO,......
  • C# SQLHelp工具类
    usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Linq;usingSystem.Reflection;usingSystem.Web;namespaceEFXXH.Tool{///此类为抽象类,......
  • Centos7使用systemctl管理mysql8服务开机启动
    centos7下开机默认不执行原来配置启动命令的/etc/rc.local文件,建议使用systemctl管理自启动服务,如果要使用/etc/rc.local进行自启动,需要给文件/etc/rc.d/rc.local添加可执行权限。    systemctl常用命令如下:1.列出所有启动项命令systemctllist-unit-files开启的和未开启的......
  • SQLiteOpenHelper&SharedPreferences练习
    目录结构:packagecom.dc.app;importjava.text.DecimalFormat;importjava.util.Locale;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.app.Dialog;importandroid.app.Notification;importandroid.app.Notificati......
  • SqlServer中PATINDEX()函数
    SQLServer的PATINDEX()函数用于在字符串中查找某个模式的位置,并返回该模式第一个匹配项的起始位置。它接受两个参数:要查找的模式和要查找的字符串。下面是语法格式:PATINDEX('%pattern%',expression)其中,'%pattern%'是模式,expression是要查找的字符串。模式中可以含有通配......
  • 力扣1050(MySQL)-合作过至少三次的演员和导演(简单)
    题目:ActorDirector 表: 写一条SQL查询语句获取合作过至少三次的演员和导演的id对 (actor_id,director_id)示例:  建表语句:1createtableifnotexistsactordirector_1050(actor_idint(3),director_idint(3),timestampint(3)primarykey);2truncatetable......