SQL的主键和外键约束
设置外键约束的基本语法
设置外键约束的基本语法
在关系型数据库管理系统(RDBMS)中,为了确保数据的完整性和一致性,可以设置外键约束(Foreign Key Constraint)。
外键约束定义了一个表中的列(称为外键),与另一表中的列(称为主键)之间的关系。
下面是设置外键约束的基本SQL语法:
ALTER TABLE 子表ADD CONSTRAINT 外键名称FOREIGN KEY (子表的外键列) REFERENCES 主表(主表的主键列);
具体说明如下:
•ALTER TABLE 子表:指定要添加外键约束的子表。
•ADD CONSTRAINT 外键名称:定义外键约束的名称,名称应该是唯一的,用于标识这个外键约束。
•FOREIGN KEY (子表的外键列):指定子表中的外键列,这是与主表中的主键列建立关系的列。
•REFERENCES 主表(主表的主键列):指定主表的名称和主键列,子表的外键将引用主表的主键。
下面是一个示例,演示如何使用SQL语句为两个表之间创建外键约束:
-- 创建主表CREATE TABLE 主表( 主键列INT PRIMARY KEY, -- 其他列); -- 创建子表,并添加外键约束CREATE TABLE 子表( 子表的外键列INT, -- 其他列CONSTRAINT fk_外键名称FOREIGN KEY (子表的外键列) REFERENCES 主表(主键列) );
在上面的示例中,我们首先创建了一个主表和一个子表,并在子表中
使用CONSTRAINT子句添加了一个外键约束,将子表的外键列与主表的主键列建立关系。
这样,如果试图在子表中插入一个不在主表中存在的值,将会触发外键约束错误。
这有助于确保数据的一致性和引用完整性。
SQL约束讲解
SQL约束讲解编辑人:星辰·樱一.约束的类型SQL Server 系统提供了6种约束类型,即not null非空约束,primary key主键约束,Foreign key外键约束,unique唯一约束,check检查约束和default 默认约束。
约束与完整性之间的关系域完整性:default ,check。
实体完整性:primary key ,unique。
参照完整性:foreign key。
二.定义约束的方式定义约束可以使用create table语句或alter table语句完成。
前者表示创建表的同时定义约束,后者表示在已有表中定义约束。
定义约束时,即可以所约束放在一个列上,也可以约束放在多个列上。
前者称为列级约束,后者称为表级约束。
定义约束和修改约束时,要考虑以下几个因素:1.不必删除表,就可以直接创建、修改表和删除约束的定义。
2.应该在应用程序中增加错误检查机制,测试数据是否与约束相冲突。
3.当在表上增加约束时,SQL Server系统将检查表中的数据是否与约束冲突。
4.一般情况,约束的名称应该符合,约束类型简名_表名_列名_代号这样的形式。
1.主键约束主键约束用来强制数据的实体完整性,它是在表中定义一个主建来唯一标识表中的每行记录。
--T-SQL语句Create table 表名(列名数据类型constraint 主键约束名primary key [,···n] ---列级主键Constraint 主键约束名primary key (列名[,···n]) ---表级主键——alter table命令Alter table 表名Add constraint 列名primary key [clustered|nonclustered] {(列名[,···n])} ·clustered:表示在该列上建立聚集索引。
sql中alter的用法
在SQL中,ALTER是用于修改数据库对象结构的命令。
它允许您添加、删除或修改表的列、约束、索引等。
下面是一些常用的ALTER 用法示例:1. 添加列:```sqlALTER TABLE table_nameADD column_name data_type;```2. 删除列:```sqlALTER TABLE table_nameDROP COLUMN column_name;```3. 修改列:```sqlALTER TABLE table_nameMODIFY COLUMN column_name new_data_type;```4. 添加主键约束:```sqlALTER TABLE table_nameADD CONSTRAINT constraint_name PRIMARY KEY (column_name);```5. 添加外键约束:```sqlALTER TABLE child_table_nameADD CONSTRAINT constraint_name FOREIGN KEY (child_column_name) REFERENCES parent_table_name (parent_column_name);```6. 删除约束:```sqlALTER TABLE table_nameDROP CONSTRAINT constraint_name;```7. 添加索引:```sqlALTER TABLE table_nameADD INDEX index_name (column_name);```8. 删除索引:```sqlALTER TABLE table_nameDROP INDEX index_name;```这些是ALTER命令的一些常见用法,您可以根据具体的需求和数据库系统的语法进行相应的调整。
请注意,使用ALTER命令时要小心,因为它可能会对数据库结构产生永久性的更改。
sql操作数据库(3)--外键约束、数据库表之间的关系、三大范式、多表查询、事务
sql操作数据库(3)--外键约束、数据库表之间的关系、三⼤范式、多表查询、事务外键约束在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名)在已有表中添加外键约束:alter table 从表表名 add constraints 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名)删除外键语法: alter table 从表表名 drop foreign key 外键名称;级联操作:注意:在从表中,修改关联主表中不存在的数据,是不合法的在主表中,删除从表中已经存在的主表信息,是不合法的。
直接删除主表(从表中有记录数据关联) 会包删除失败。
概念:在修改或者删除主表的主键时,同时它会更新或者删除从表中的外键值,这种动作我们称之为级联操作。
语法:更新级联 on update cascade 级联更新只能是创建表的时候创建级联关系。
当更新主表中的主键,从表中的外键字段会同步更新。
删除级联 on delete cascade 级联删除当删除主表中的主键时,从表中的含有该字段的记录值会同步删除。
操作:-- 给从表student添加级联操作create table student(s_id int PRIMARY key ,s_name VARCHAR(10) not null,s_c_id int,-- constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名)CONSTRAINT stu_cour_id FOREIGN key(s_c_id) REFERENCES course(c_id) -- 给s_c_id 添加外键约束ON UPDATE CASCADE ON DELETE CASCADE)insert into student VALUE(1,'⼩孙',1),(2,'⼩王',2),(3,'⼩刘',4);insert into student VALUE(4,'⼩司马',1),(5,'⼩赵',1),(6,'⼩钱',1);-- 查询学⽣表中的记录select * from student;-- 级联操作。
Oracle:SQL语句--对表的操作——添加主键约束
Oracle:SQL语句--对表的操作——添加主键约束–创建主外键(可以在创建表的同时添加主外键约束,也可以
–创建完成后再添加约束)
—–⽅法⼀:表创建的同时,添加主键约束
语法:
create table 表名
(
列名1 数据类型及长度 constraint 主键名称(⼀般主键名称为”PK_”开头) primary key,
列名2 数据类型及长度 not null,——-not null 约束该列不为空,不写表⽰可以为空
列名3 数据类型及长度
)tablespace 表空间名称;——-指定将该表放在某个表空间⾥,可以省略不指定
例:
create table T_DEPOSIT
(savingid VARCHAR2(20) constraint pk_savingid primary key,
savingname VARCHAR2(20) not null,
descrip VARCHAR2(50)
)tablespace ATM_tablespace;
————注意————-
CREATE TABLE T_cardInfo –银⾏卡信息表
(
cardID varchar2(19) primary key,
—— 如果此处这样定义主键,则主键名称系统⾃⼰定义设置
);
—–⽅法⼆:表创建后,添加主键约束
语法:
alter table 表名
add constraint 主键名称(⼀般主键名称为”PK_”开头) primary key(要设为主键的列名);
例:
alter table T_Grade
add constraint pk_gradeId primary key (gradeId);。
SQL中的主键和外键
主键与外键一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结一下:主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。
是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键和索引的区别收藏聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。
但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。
而主键和外键的结构是这个设计过程的症结所在。
一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:关系数据库依赖于主键---它是数据库物理模式的基石。
主键在物理层面上只有两个用途:1. 惟一地标识一行。
SQL:addconstraint方法添加约束
格式:alter table 表名 add constraint 约束名称 check(列名)
例子:alter table ss add constraint pp check(age>20)
4、添加unique约束:
格式:alter table 表名 add constraint 约束名称 unique(列名)
例子:alter table ss add constraint pp unique(sname)
altertable表名addconstraint约束名称foreignkey列名references被引用表的名称列名
SQL:addconstraint方法添加约束
SQL: add constraint 方法添加约束
alter table 表名 add constraint 约束名称 约束类型(列名)
1、添加主键约束:
格式:alter table 表名 add constraint 约束名称 primary key(列名)
例子:alter table ss add constraint pp primary key(sid)
2、添加外键约束:
格式:alter table 表名 add constraint 约束名称 foreign key(列名) references 被引用表的名称(列名)
sql中,表级约束与列级约束的区别
sql中,表级约束与列级约束的区别在SQL Server中有5种约束:主键约束(primary key constraint)唯⼀性约束(unique constraint)检查约束(check constraint)缺省约束(default constraint)外部键约束(foreign key constraint)在SQL SERVER中,(1)对于基本表的约束分为列约束和表约束约束是限制⽤户输⼊到表中的数据的值的范围,⼀般分为列级约束与表级约束。
列级约束有六种:主键Primary key、外键foreign key 、唯⼀ unique、检查 checck 、默认default 、⾮空/空值 not null/ null表级约束有四种:主键、外键、唯⼀、检查列约束是对某⼀个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,⽤空格分隔,不必指定列名;表约束与列定义相互独⽴,不包括在列定义中,通常⽤于对多个列⼀起进⾏约束,与列定义⽤’,’分隔,定义表约束时必须指出要约束的那些列的名称。
完整性约束的基本语法格式为:[ CONSTRAINT <约束名> ] <约束类型>约束名:约束不指定名称时,系统会给定⼀个名称。
(2)列级约束与表级约束的区别如果完整性约束涉及到该表的多个属性列,必须定义在表级上,否则既可以定义在列级也可以定义在表级。
简⽽⾔之:列级约束:列级约束是⾏定义的⼀部分,只能应⽤于⼀列上。
表级约束:表级约束是独⽴于列的定义,可以应⽤在⼀个表中的多列上。
(3)列级约束与表级约束在SQL中的⽤法(即如何在SQL中定义约束)在创建表时定义约束:CREATE TABLE table_name({ -------列级约束定义|column_name AS computed_column_expression -------计算列定义| ------表级约束定义}[,….n])⼀个约束定义为列级约束还是表级约束根据实际需要和设计者思路确定。
SQL语句常用约束类型
SQL语句常⽤约束类型常⽤五类约束: not null:⾮空约束,指定某列不为空 unique:唯⼀约束,指定某列和⼏列组合的数据不能重复 primary key:主键约束,指定某列的数据不能重复、唯⼀ foreign key:外键,指定该列记录属于主表中的⼀条记录,参照另⼀条数据 check:检查,指定⼀个表达式,⽤于检验指定数据 注意: MySQL不⽀持check约束,但可以使⽤check约束,⽽没有任何效果;根据约束数据列限制,约束可分为: 单列约束:每个约束只约束⼀列 多列约束:每个约束约束多列数据1、not null ⾮空约束⽤于确保当前列的值不为空值,⾮空约束只能出现在表对象的列上。
*Null类型特征:所有的类型的值都可以是null,包括int、float等数据类型空字符串””是不等于null,0也不等于nullcreate table temp(id int not null,name varchar(255) not null default ‘abc’,sex char null)上⾯的table加上了⾮空约束,也可以⽤alter来修改或增加⾮空约束增加⾮空约束 alter table temp modify sex varchar(2) not null;取消⾮空约束 alter table temp modify sex varchar(2) null;取消⾮空约束,增加默认值 alter table temp modify sex varchar(2) default ‘abc’;2、unique 唯⼀约束是指定table的列或列组合不能重复,保证数据的唯⼀性。
虽然唯⼀约束不允许出现重复的值,但是可以为多个null,同⼀个表可以有多个唯⼀约束,多个列组合的约束。
在创建唯⼀约束的时候,如果不给唯⼀约束名称,就默认和列名相同。
MySQL会给唯⼀约束的列上默认创建⼀个唯⼀索引;create table temp (id int not null,name varchar(25),password varchar(16),constraint uk_name_pwd unique(name, password));unique(name, password)表⽰⽤户名和密码组合不能重复 添加唯⼀约束 alter table temp add unique(name, password); 修改唯⼀性约束 alter table temp modify name varchar(25) unique; 删除约束 alter table temp drop index name;3、primary key 主键约束相当于唯⼀约束+⾮空约束的组合,主键约束列不允许重复,也不允许出现空值;如果的多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
SQL的主键和外键的作用
SQL的主键和外键的作用首先,主键是一列或一组列,其作用是唯一地标识一个表中的每一条记录。
它具有以下作用:1.数据唯一性约束:主键保证表中的每条记录具有唯一的标识,确保了数据的唯一性。
2.快速数据访问:通过主键,可以快速定位到表中的其中一条记录,提高数据的访问速度。
3.定义表之间的关系:在表之间建立关联时,主键作为外键的参照,起到了关联的作用。
4.提供索引:主键通常会自动创建一个索引,加快数据查找和排序。
主键有以下几种类型:1.单字段主键:一个表中只有一个字段作为主键。
2.复合主键:一个表中多个字段组合起来作为主键,确保组合字段的唯一性。
3.自增主键:主键的值会自动递增,常用于自动生成唯一标识符。
其次,外键是一个或多个表中的列,它建立了表之间的关联关系。
外键所在的表称为子表,参照外键的表称为父表。
1.建立表之间的关联:外键通过关联表之间的共同数据,建立了表与表之间的关联关系。
这种关联关系可以是一对一、一对多或多对多的关系。
2.数据完整性约束:外键保证在子表中如果存在外键,则在父表中必须存在相对应的值。
它确保了数据的完整性和一致性,防止出现孤立的记录。
3.级联更新与删除:在设定外键关联时,可以设置级联更新与删除。
当父表的记录被更新或删除时,所有相关的子表记录也会更新或删除,确保数据的一致性。
4.查询优化:外键可以用于连接两个或多个表,进行关联查询,提高查询效率。
需要注意的是,外键并不一定要与主键建立关联,它可以与任意唯一的键或索引字段建立关联。
此外,外键的使用还需要满足一些条件,如被关联的字段必须是一个已经定义了唯一性约束的字段。
在实际的数据库设计和应用中,主键和外键都被广泛地运用。
通过使用主键和外键,可以建立起复杂的数据模型,保证数据的完整性和一致性,并实现不同表之间的关联查询。
这在数据库管理和数据处理中起着至关重要的作用。
使用sql语句修改表的主键和外键
使用sql语句修改表的主键和外键
主键约束:一定是非空的,唯一的,即一张表只能设计一个主键约束,但主键约束可以由多个字段构成,称之为联合主键或复合主键。
创建主键约束名称:
SQL> alter table 表名(最好在设置之前,表当中没有数据)
add constraint pk_id primary key(id);
修改主键约束名称:
SQL> alter table表名
rename constraint pk_id to new_pk_id;
外键约束:主表当中字段必须是主表中的主键字段,主从表中相应的字段必须同一数据类型,从表中的外键字段的值必须来自主表相应字段,或NULL;
删除外键约束:
SQL> alter table 表名
disable constraint fk_typeid_alter;
修改表时添加外键约束:
SQL> alter table表名
add constraint fk_typeid_alter foreign key(typeid_new)references typeinfo 删除、添加后即将外键约束修改完成。
SQL建立数据库主键外键
SQL建⽴数据库主键外键SET FOREIGN_KEY_CHECKS=0;#取消外键约束,Mysql中如果表和表之间建⽴的外键约束,则⽆法删除表及修改表结构。
DROP TABLE IF EXISTS `custinfo`;CREATE TABLE `custinfo` (`custID` varchar(19) NOT NULL COMMENT '客户号',`name` varchar(10) NOT NULL COMMENT '姓名',`sex` varchar(10) NOT NULL COMMENT '性别',`phone` varchar(20) NOT NULL COMMENT '⼿机号',`ID` varchar(19) DEFAULT NULL COMMENT '⾝份证号',`districtID` varchar(19) DEFAULT NULL COMMENT '区ID',`age` varchar(6) NOT NULL COMMENT '年龄',PRIMARY KEY (`custID`),KEY `FK_districtID_1` (`districtID`),CONSTRAINT `FK_districtID_1` FOREIGN KEY (`districtID`) REFERENCES `area_dim` (`districtID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='客户信息表';-- ------------------------------ Records of custinfo-- ----------------------------BEGIN;INSERT INTO `custinfo` VALUES ('1', '闫⼀⼀', '男', '136********', '567891321242345618', '10101', '18');INSERT INTO `custinfo` VALUES ('2', '朱三枪', '男', '136********', '567891984242345618', '20101', '28');INSERT INTO `custinfo` VALUES ('3', '姜为民', '男', '136********', '567891322489345618', '20101', '18');INSERT INTO `custinfo` VALUES ('4', '刘德华', '男', '136********', '567891989909345618', '30201', '28');INSERT INTO `custinfo` VALUES ('5', '张三三', '⼥', '136********', '567891322489349898', '30201', '18');INSERT INTO `custinfo` VALUES ('6', '刘思思', '男', '136********', '567891989909349007', '30201', '28');COMMIT;-- ------------------------------ Table structure for `cardinfo`-- ----------------------------DROP TABLE IF EXISTS `cardinfo`;CREATE TABLE `cardinfo` (`acct_no` varchar(19) NOT NULL COMMENT '账户',`balance` varchar(19) NOT NULL COMMENT '账号余额',`acct_status` varchar(19) NOT NULL COMMENT '账号状态',`openDate` varchar(19) NOT NULL COMMENT '开卡时间',`openmoney` varchar(19) NOT NULL COMMENT '开卡⾦额',`custID` varchar(19) NOT NULL COMMENT '客户号',`districtID` varchar(19) NOT NULL COMMENT '开户所在区ID',PRIMARY KEY (`acct_no`),KEY `FK_districtID` (`districtID`),KEY `FK_custID` (`custID`),CONSTRAINT `FK_districtID` FOREIGN KEY (`districtID`) REFERENCES `area_dim` (`districtID`),CONSTRAINT `FK_custID` FOREIGN KEY (`custID`) REFERENCES `custinfo` (`custID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='银⾏卡信息表';-- ------------------------------ Records of cardinfo-- ----------------------------BEGIN;INSERT INTO `cardinfo` VALUES ('1010357612121001', '888888', '1', '2019-07-19 08:49:37', '1.00', '1', '10101');INSERT INTO `cardinfo` VALUES ('1010357612121002', '888888', '1', '2019-07-18 08:49:37', '2.00', '2', '20101');INSERT INTO `cardinfo` VALUES ('1010357612121003', '888888', '0', '2019-07-19 08:49:37', '3.00', '3', '20101');INSERT INTO `cardinfo` VALUES ('1010357612121004', '888888', '1', '2019-07-19 08:49:37', '1.00', '1', '10101');INSERT INTO `cardinfo` VALUES ('1010357612121005', '888888', '1', '2019-07-18 08:49:37', '2.00', '2', '20101'); COMMIT;DROP TABLE IF EXISTS `area_dim`;CREATE TABLE `area_dim` (`districtID` varchar(19) NOT NULL COMMENT '区域ID',`area_name` varchar(19) NOT NULL COMMENT '区域名',`city_id` varchar(19) NOT NULL COMMENT '城市ID',`city_name` varchar(19) NOT NULL COMMENT '城市名',`province_id` varchar(19) DEFAULT NULL COMMENT '省ID',`province_name` varchar(19) DEFAULT NULL COMMENT '省名',PRIMARY KEY (`districtID`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='区域码值表';-- ------------------------------ Records of area_dim-- ----------------------------BEGIN;INSERT INTO `area_dim` VALUES ('10101', '⼆七区', '101', '郑州市', '1', '河南省');INSERT INTO `area_dim` VALUES ('20101', '⾼新区', '201', '青岛市', '2', '⼭东省');INSERT INTO `area_dim` VALUES ('30201', '新区', '301', '⽯家庄市', '3', '河北省');COMMIT;SET FOREIGN_KEY_CHECKS = 1; #设置外检约束注:将同⼀个字段设置成2个表的外键时,2次的外键名应不同。
sqlite数据库外键详解
sqlite数据库外键详解Sqlite数据库外键是指在一个表中,通过引用另一个表中的列来约束数据完整性。
外键主要用于确保数据的参照完整性,防止数据在两个表之间的不一致。
Sqlite支持两种类型的外键约束:主键(PRIMARY KEY)和外键(FOREIGN KEY)。
以下是Sqlite数据库外键的详细解释:1. 主键(PRIMARY KEY):主键是表中唯一的一列或几列,用于唯一标识表中的每一行数据。
在一个表中,只能有一个主键。
主键列不能包含空值(NULL)。
创建主键的语法如下:```CREATE TABLE table_name (column1 data_type,column2 data_type,...,PRIMARY KEY (column1, column2, ...));```2. 外键(FOREIGN KEY):外键是表中的一列或几列,用于引用另一个表中的列。
外键约束规定,表中的数据在插入或更新时,必须满足参照关系。
外键可以包含空值(NULL),但引用的目标列不能包含空值。
创建外键的语法如下:```CREATE TABLE table_name (column1 data_type,column2 data_type,...,FOREIGN KEY (column1, column2, ...) REFERENCES another_table(column1, column2, ...));```其中,`another_table`是引用的目标表,`column1, column2, ...`表示目标表中的列。
3. 外键约束的作用:外键约束有助于维护数据的一致性和完整性。
当尝试插入或更新数据时,Sqlite会检查外键约束是否满足。
如果不满足,插入或更新操作将失败。
例如,有一个订单表(orders)和用户表(users),订单表中有用户ID(user_id)列,用户表中有主键ID(id)列。
SQL中主键、外键完整性约束的作用以及创建语句
SQL中主键、外键完整性约束的作用以及创建语句SQL的主键和外键约束SQL的主键和外键的作用:外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
简而言之,SQL的主键和外键就是起约束作用。
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
比如:学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键;课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键;成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。
成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。
是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A 表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键和索引的区别定义:主键--唯一标识一条记录,不能有重复的,不允许为空外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值索引--该字段没有重复值,但可以有一个空值作用:主键--用来保证数据完整性外键--用来和其他表建立联系用的索引--是提高查询排序的速度个数:主键--主键只能有一个外键--一个表可以有多个外键索引--一个表可以有多个唯一索引创建SQL的主键和外键约束的方法:create table Student --建表格式:create table 自定义的表名( --字段名一般为有一定意义的英文StudentName nvarchar(15), -- 格式:字段名类型()括号里面的是允许输入的长度StudentAge int, --int型的后面不需要接长度StudentSex nvarchar(2) --最后一个字段后面不要逗号)--在创建表时就可以对字段加上约束:create table Student(StudentNo int PRIMARY KEY IDENTITY(1,1), --加主键约束,还有标识列属性(两者构成实体完整性)StudentName nvarchar(15) not null, --加非空约束,不加"not null" 默认为:可以为空StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)StudentAge int DEFAULT ((0)), --加默认值约束StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女') --加检查约束,格式:check (条件表达式))--如果在表创建好了以后再加约束,则格式分别为:-- 主键:alter table 表名add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK_字段名'就为约束名primary key (字段名) --字段名同上--唯一约束:alter table 表名add constraint UQ_字段名unique (字段名)--外键约束:alter table 表名add constraint FK_字段名--"FK"为外键的缩写foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'alter table 表A add constraint FK_B foreign key (ticket_no) references 表B(ticket_no)alter table 表A add constraint FK_C foreign key (person_no) references 表C(person_no)alter table 成绩表add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo)ON UPDATE CASCADE ON DELETE CASCADE级联更新,级联删除,这样在删除主表Student时,成绩表中该学生的所有成绩都会删除。
pgsql约束表达式
pgsql约束表达式pgsql约束表达式是指在PostgreSQL数据库中,用于定义表结构的约束条件。
约束是为了保证数据的完整性和一致性而设置的规则,它可以限制表中的数据值或关系,使得数据操作更加可靠和有效。
在pgsql中,可以通过约束表达式来定义各种约束条件。
下面将介绍几种常用的约束表达式。
1. 主键约束表达式(Primary Key)主键约束表达式是用来标识表中的唯一标识符的列或列组合,它的作用是保证表中的每一行数据都具有唯一性。
主键约束表达式的写法如下:```CREATE TABLE 表名 (列名数据类型 PRIMARY KEY);```其中,表名是要创建的表名,列名是要定义主键约束的列名,数据类型是列的数据类型。
2. 唯一约束表达式(Unique)唯一约束表达式用于保证表中某一列或列组合的值是唯一的,不允许出现重复值。
唯一约束表达式的写法如下:```CREATE TABLE 表名 (列名数据类型 UNIQUE);```其中,表名是要创建的表名,列名是要定义唯一约束的列名,数据类型是列的数据类型。
3. 非空约束表达式(Not Null)非空约束表达式用于限制表中某一列的值不能为空。
非空约束表达式的写法如下:```CREATE TABLE 表名 (列名数据类型 NOT NULL);```其中,表名是要创建的表名,列名是要定义非空约束的列名,数据类型是列的数据类型。
4. 外键约束表达式(Foreign Key)外键约束表达式用于建立两个表之间的关联关系,它可以保证两个表之间的数据一致性。
外键约束表达式的写法如下:```CREATE TABLE 表名1 (列名数据类型 REFERENCES 表名2(列名));```其中,表名1是要创建的表名,列名是要定义外键约束的列名,表名2是参照表的表名,列名是参照表中的列名。
5. 检查约束表达式(Check)检查约束表达式用于定义表中某一列的取值范围或条件,只有满足条件的数据才能被插入或更新。
sql语句约束条件
sql语句约束条件在 SQL 中,可以使用约束条件来定义对表中数据的限制规则。
常见的约束条件有以下几种:1. 主键约束(Primary Key Constraint):用于定义一个列或一组列作为表的主键,保证唯一性和非空性。
一个表只能有一个主键约束。
示例:CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(50), age INT);2. 外键约束(Foreign Key Constraint):用于定义表与表之间的关联关系,保证数据的完整性。
外部键约束要求一个表的列值必须在另一个表的主键列中存在。
示例:CREATE TABLE orders (order_id INT PRIMARY KEY, customer_id INT, FOREIGN KEY (customer_id) REFERENCES customers (customer_id));3. 唯一约束(Unique Constraint):用于保证指定列或一组列的值的唯一性,但可以允许空值。
示例:CREATE TABLE employees (employee_id INT, email VARCHAR(50) UNIQUE);4. 非空约束(Not Null Constraint):用于保证指定列不允许为空值。
示例:CREATE TABLE products (product_id INT,product_name VARCHAR(50) NOT NULL);5. 检查约束(Check Constraint):用于定义某列的取值范围或条件,使得插入或更新的数据必须符合指定的条件。
示例:CREATE TABLE customers (customer_id INT, age INT CHECK (age >= 18));这些约束条件可以在创建表时定义,也可以在已存在的表上进行修改。
sql表结构梳理
sql表结构梳理
在SQL中,表结构梳理是指对数据库中的表进行分析和整理,以便更好地了解表的组成和关系。
以下是一些常见的表结构梳理的要素:
1. 表名:每个表都有一个唯一的名称,用于标识该表。
2. 列(字段):表由一列或多列组成,每一列代表表中的一个属性或数据字段。
每列都有一个名称和数据类型,用于存储特定类型的数据。
3. 主键:主键是一列或一组列,用于唯一标识表中的每一行数据。
主键的值在表中必须是唯一且非空的。
4. 外键:外键是一列或一组列,用于建立表与其他表之间的关联关系。
外键与其他表的主键相对应,用于确保数据的完整性和一致性。
5. 索引:索引是对表中的一列或多列进行排序的数据结构,用于提高查询效率。
索引可以加快数据的检索速度,但也会增加数据的插入、更新和删除的开销。
6. 约束:约束是对表中数据的限制条件,用于确保数据的完整性和一致性。
常见的约束包括主键约束、唯一约束、非空约束、默认值约束等。
7. 关系:表之间的关系可以是一对一、一对多或多对多的关系。
关系可以通过外键来建立,用于表示不同表之间的连接和关联。
8. 触发器:触发器是与表相关联的特殊存储过程,它会在表中的数据发生特定事件时自动触发执行。
触发器可以用于实现数据的自动更新、验证和业务逻辑的处理。
以上是一些常见的SQL表结构梳理的要素,通过对表的结构进行梳理和分析,可以更好地理解和管理数据库中的数据。
使用sql语句create table定义约束的方法
使用sql语句create table定义约束的方法摘要:1.引言2.SQL创建表约束的基本语法3.约束类型及作用3.1 主键约束(PRIMARY KEY)3.2 外键约束(FOREIGN KEY)3.3 唯一约束(UNIQUE)3.4 非空约束(NOT NULL)3.5 检查约束(CHECK)4.实例演示5.总结与拓展正文:1.引言在数据库表设计中,约束是确保数据完整性和一致性的重要手段。
SQL语句中的CREATE TABLE命令可用于创建表并设置各种约束。
本文将详细介绍如何使用SQL语句创建表约束,以提高数据质量。
2.SQL创建表约束的基本语法在CREATE TABLE语句中,添加约束的关键字及其语法如下:- 主键约束(PRIMARY KEY):`PRIMARY KEY (column_name1, column_name2,...)`- 外键约束(FOREIGN KEY):`FOREIGN KEY (column_name) REFERENCES table_name(column_name)`- 唯一约束(UNIQUE):`UNIQUE (column_name1,column_name2,...)`- 非空约束(NOT NULL):`NOT NULL`- 检查约束(CHECK):`CHECK (column_name = value ORcolumn_name <> value)`3.约束类型及作用3.1 主键约束(PRIMARY KEY)主键约束用于唯一标识表中的每一行记录。
一个表只能有一个主键,主键列不能为空,且不能包含重复值。
3.2 外键约束(FOREIGN KEY)外键约束用于建立表与表之间的关联。
外键列的值必须是其关联表中主键列的值,或为空。
外键约束可以防止数据在两个表之间的不一致。
3.3 唯一约束(UNIQUE)唯一约束用于限制列中的值重复。
多个唯一约束可以应用于同一列,以进一步保证数据唯一性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL的主键和外键约束
SQL的主键和外键的作用:
外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
简而言之,SQL的主键和外键就是起约束作用。
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
比如:
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键;
课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键;
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。
成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。
是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A 表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键和索引的区别
定义:
主键--唯一标识一条记录,不能有重复的,不允许为空
外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值
索引--该字段没有重复值,但可以有一个空值
作用:
主键--用来保证数据完整性
外键--用来和其他表建立联系用的
索引--是提高查询排序的速度
个数:
主键--主键只能有一个
外键--一个表可以有多个外键
索引--一个表可以有多个唯一索引
创建SQL的主键和外键约束的方法:
create table Student --建表格式:create table 自定义的表名
(--字段名一般为有一定意义的英文
StudentName nvarchar(15),-- 格式:字段名类型()括号里面的是允许输入的长度
StudentAge int,--int型的后面不需要接长度
StudentSex nvarchar(2)--最后一个字段后面不要逗号
)
--在创建表时就可以对字段加上约束:
create table Student
(
StudentNo int PRIMARY KEY IDENTITY(1,1),--加主键约束,还有标识列属性(两者构成实体完整性)
StudentName nvarchar(15)not null,--加非空约束,不加"not null" 默认为:可以为空
StudentSchool text(20)FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)
StudentAge int DEFAULT((0)),--加默认值约束
StudentSex nvarchar(2)CHECK(StudentSex=N'男'or StudentSex=N'女')--加检查约束,格式:check (条件表达式)
)
--如果在表创建好了以后再加约束,则格式分别为:
-- 主键:
alter table表名
add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段
名,'PK_字段名'就为约束名
primary key(字段名)--字段名同上
--唯一约束:
alter table表名
add constraint UQ_字段名
unique(字段名)
--外键约束:
alter table表名
add constraint FK_字段名--"FK"为外键的缩写
foreign key(字段名)references关联的表名(关联的字段名)--注意'关联的表名'和'关联的字段名'
alter table表A add constraint FK_B foreign key(ticket_no)references 表B(ticket_no)
alter table表A add constraint FK_C foreign key(person_no)references 表C(person_no)
alter table成绩表add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo)
ON UPDATE CASCADE ON DELETE CASCADE
级联更新,级联删除,这样在删除主表Student时,成绩表中该学生的所有成绩都会删除。
--检查约束:
alter table表名
add constraint CK_字段名
check(条件表达式)--条件表达式中的条件用关系运算符连接
--默认值约束:
alter table表名
add constraint DF_字段名
default'默认值'for字段名--其中的'默认值'为你想要默认的值,注意'for'
--删除创建的约束:
alter table表名
drop constraint约束名--约束名为你前面创建的如:PK_字段这样的约束名
--注意:如果约束是在创建表的时候创建的,则不能用命令删除
--只能在'企业管理器'里面删除
-- 获取SqlServer中表结构
SELECT ,,syscolumns.isnullable, syscolumns.length
FROM syscolumns,systypes
WHERE syscolumns.xusertype = systypes.xusertype
AND syscolumns.id =OBJECT_ID('Student')
-- 单独查询表递增字段
SELECT[name] FROM syscolumns WHERE
id =OBJECT_ID(N'Student')AND COLUMNPROPERTY(id,name,'IsIdentity')=1
-- 获取表主外键约束
EXEC sp_helpconstraint'StuResults'
-- 查询表主键外键信息
SELECT sysobjects.id objectId,OBJECT_NAME(sysobjects.parent_obj) tableName,
constraintName, sysobjects.xtype AS constraintType, AS columnName
FROM sysobjects INNER JOIN sysconstraints
ON sysobjects.xtype in('C','F','PK','UQ','D')
AND sysobjects.id = sysconstraints.constid
LEFT OUTER JOIN syscolumns ON sysconstraints.id = syscolumns.id WHERE OBJECT_NAME(sysobjects.parent_obj)='StuResults'。