-
2018-02-07 17:12:56
即使某一项字段设置了唯一约束,null值也不会收到唯一约束的影响,即含有唯一约束的数据列上可以存在一次或多次为空
语法:例如为email 字段设置唯一约束
constraint uk_email unique(email)更多相关内容 -
数据表的创建、约束的名称、外键约束、索引的创建和使用
2019-05-26 23:04:09文章目录数据表的创建约束的名称外键约束索引的创建和使用 数据表的创建 DEMO:创建一张保存老师信息的表 DROP TABLE teacher PURGE; CREATE TABLE teacher( tno NUMBER(4), tname VARCHAR2(10), tage ...数据表的创建
DEMO:创建一张保存老师信息的表
DROP TABLE teacher PURGE; CREATE TABLE teacher( tno NUMBER(4), tname VARCHAR2(10), tage NUMBER(3), tdate DATE); INSERT INTO teacher VALUES (1001,'x老师',100,SYSDATE); INSERT INTO teacher VALUES (1002,'y老师',100,SYSDATE); INSERT INTO teacher VALUES (1003,'z老师',100,SYSDATE);
DEMO:观察代码DROP TABLE teacher PURGE; CREATE TABLE teacher ( tno NUMBER(4), tname VARCHAR2(10), tage NUMBER(3), tdate DATE ); INSERT INTO teacher VALUES (1001,'x老师',100,SYSDATE); INSERT INTO teacher VALUES (1002,'y老师',100,SYSDATE); INSERT INTO teacher VALUES (1003,'z老师',100,SYSDATE); INSERT INTO teacher (tname,tage,tdate) VALUES ('z老师',100,SYSDATE);
运行结果如下:
数据表必须有一个字段表示主键作为数据的唯一标识,这种字段中的数据不应该为null,
此时在创建数据表的时候可以指定该字段不能为null(给该字段做一个约束)DEMO:指定字段不能为空
DROP TABLE teacher PURGE; CREATE TABLE teacher ( tno NUMBER(4) NOT NULL, tname VARCHAR2(10), tage NUMBER(3), tdate DATE ); INSERT INTO teacher VALUES (1001,'x老师',100,SYSDATE); INSERT INTO teacher VALUES (1002,'y老师',100,SYSDATE); INSERT INTO teacher VALUES (1003,'z老师',100,SYSDATE); INSERT INTO teacher (tname,tage,tdate) VALUES ('z老师',100,SYSDATE);
运行结果如下:
使用以上的方式就控制了插入数据表中的数据的tno一定不能为null,对tno字段的数据进行了约束,这种约束操作叫作非空约束。
DEMO:继续观察代码
DROP TABLE teacher PURGE; CREATE TABLE teacher ( tno NUMBER(4) NOT NULL, tname VARCHAR2(10), tage NUMBER(3), tdate DATE ); INSERT INTO teacher VALUES (1001,'x老师',100,SYSDATE); INSERT INTO teacher VALUES (1002,'y老师',100,SYSDATE); INSERT INTO teacher VALUES (1003,'z老师',100,SYSDATE); INSERT INTO teacher VALUES (1004,'w老师',100,SYSDATE); INSERT INTO teacher VALUES (1004,'c老师',100,SYSDATE);
运行结果如下:
主键字段是数据的唯一标识,是不能重复的,可以使用另外一种约束实现避免编号重复的现象。
这种约束就是唯一约束DEMO:唯一约束
DROP TABLE teacher PURGE; CREATE TABLE teacher ( tno NUMBER(4) NOT NULL UNIQUE, tname VARCHAR2(10), tage NUMBER(3), tdate DATE); INSERT INTO teacher VALUES(1001,'x老师',100,SYSDATE); INSERT INTO teacher VALUES(1002,'y老师',100,SYSDATE); INSERT INTO teacher VALUES(1003,'z老师',100,SYSDATE); INSERT INTO teacher VALUES(1004,'w老师',100,SYSDATE); INSERT INTO teacher VALUES(1004,'c老师',100,SYSDATE);
运行结果如下:
此时保证插入表中的数据的编号是不可能出现重复的,这种叫作唯一约束,其实还有一种约束可以替代以上两种约束,叫作主键约束。也就是一种约束可以有以上两种约束(唯一约束和非空约束)的效果
DEMO:主键约束
DROP TABLE teacher PURGE; CREATE TABLE teacher ( tno NUMBER(4) PRIMARY KEY, tname VARCHAR2(10), tage NUMBER(3), tdate DATE ); INSERT INTO teacher VALUES (1001,'x老师',100,SYSDATE); INSERT INTO teacher VALUES (1002,'y老师',100,SYSDATE); INSERT INTO teacher VALUES (1003,'z老师',100,SYSDATE); INSERT INTO teacher VALUES (1004,'w老师',100,SYSDATE); INSERT INTO teacher VALUES (1004,'c老师',100,SYSDATE);
运行结果如下:
主键约束是非空约束和唯一约束的叠加
总结:
- 1.非空约束:使用NOT NULL 实现,保证了指定字段插入的值不能为null;
- 2.唯一约束:使用UNIQUE实现,保证指定字段的数据不能重复;
- 3.主键约束:使用PRIMARY KEY实现,保证指定字段不能为null也不能重复。
约束的名称
在创建约束指定名称,如果要使用自定约束名称需要使用CONSTRAINT来创建。
DEMO:观察默认的约束名称
DROP TABLE teacher PURGE; CREATE TABLE teacher ( tno NUMBER(4) PRIMARY KEY, tname VARCHER2(10) UNIQUE, tage NUMBER(3), tdate DATE); INSERT INTO teacher VALUES(1001,'x老师',100,SYSDATE); INSERT INTO teacher VALUES(1002,'y老师',100,SYSDATE); INSERT INTO teacher VALUES(1003,'z老师',100,SYSDATE);
DEMO:指定自定义的约束名称
DROP TABLE teacher PURGE; CREATE TABLE teacher ( tno NUMBER(4), tname VARCHAR2(10), tage NUMBER(3), tdate DATE, CONSTRAINT pk_tno PRIMARY KEY(tno), CONSTRAINT uk_tname UNIQUE(tname) ); INSERT INTO teacher VALUES(1001,'x老师',100,SYSDATE); INSERT INTO teacher VALUES(1002,'y老师',100,SYSDATE); INSERT INTO teacher VALUES(1003,'z老师',100,SYSDATE);
DEMO:检查约束
检查约束就是可以为字段值进行简单的验证,比如果让年龄的范围是0-250岁,那么可以使用检查约束
DROP TABLE teacher PURGE; CREATE TABLE teacher ( tno NUMBER(4), tname VARCHAR2(10), tage NUMBER(3), tdate DATE, CONSTRAINT pk_tno PRIMARY KEY(tno), CONSTRAINT uk_tname UNIQUE(tname), CONSTRAINT ck_tage CHECK(tage BETWEEN 0 AND 250) ); INSERT INTO teacher VALUES(1001,'x老师',100,SYSDATE); INSERT INTO teacher VALUES(1002,'y老师',100,SYSDATE); INSERT INTO teacher VALUES(1003,'z老师',251,SYSDATE);
运行结果如下:
总结:- 1.如果要指定约束的名称,那么需要使用CONSTRAINT引导创建。
- 2.检查约束在开发中不会去使用的,因为很耗费性能,如果真有这样的需求是交给程序去实现。
外键约束
所谓的外键约束就是一张表中的某个字段的数据来源依赖于另外一张中的某个字段的数据
DEMO:创建数据表
-- 删除数据表 DROP TABLE sc PURGE; DROP TABLE course PURGE; DROP TABLE teacher PURGE; DROP TABLE student PURGE; -- 创建数据表 create table student( sno varchar2(10), sname varchar2(20), sage number(2), ssex varchar2(5), CONSTRAINT pk_sno PRIMARY KEY(sno) ); create table teacher( tno varchar2(10) , tname varchar2(20), CONSTRAINT pk_tno PRIMARY KEY(tno) ); create table course( cno varchar2(10), cname varchar2(20), tno varchar2(20), constraint pk_con primary key (cno) ); -- 最后创建选课表(有顺序) create table sc( sno varchar2(10), cno varchar2(10), score number(4,2) ); /*******初始化学生表的数据******/ insert into student values ('s001','张三',23,'男'); insert into student values ('s002','李四',23,'男'); insert into student values ('s003','吴鹏',25,'男'); insert into student values ('s004','琴沁',20,'女'); insert into student values ('s005','王丽',20,'女'); insert into student values ('s006','李波',21,'男'); insert into student values ('s007','刘玉',21,'男'); insert into student values ('s008','萧蓉',21,'女'); insert into student values ('s009','陈萧晓',23,'女'); insert into student values ('s010','陈美',22,'女'); commit; /****************** 初始化教师表 ***********************/ insert into teacher values ('t001', '刘阳'); insert into teacher values ('t002', '谌燕'); insert into teacher values ('t003', '胡明星'); commit;); /***************初始化课程表****************************/ insert into course values ('c001','J2SE','t002'); insert into course values ('c002','Java Web','t002'); insert into course values ('c003','SSH','t001'); insert into course values ('c004','Oracle','t001'); insert into course values ('c005','SQL SERVER 2005','t003'); insert into course values ('c006','C#','t003'); insert into course values ('c007','JavaScript','t002'); insert into course values ('c008','DIV+CSS','t001'); insert into course values ('c009','PHP','t003'); insert into course values ('c010','EJB3.0','t002'); commit; -- 插入选课信息 insert into sc values ('s001','c001',78.9); insert into sc values ('s002','c001',80.9); insert into sc values ('s003','c001',81.9); insert into sc values ('s004','c001',60.9); insert into sc values ('s001','c002',82.9); insert into sc values ('s002','c002',72.9); insert into sc values ('s003','c002',81.9); insert into sc values ('s001','c003','59'); insert into sc values ('s005','c004','91'); insert into sc values ('s007','c008','55.7'); commit;
DEMO:观察问题
INSERT INTO sc(sno,cno,score) VALUES ('s100','c1000',90);
DEMO:创建外键约束
DROP TABLE sc PURGE; CREATE TABLE sc( sno VARCHAR2(10), cno VARCHAR2(10), score NUMBER(4,2), CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno), CONSTRAINT fk_cno FOREIGN KEY(cno) REFERENCES course(cno) ); INSERT INTO sc VALUES ('s001','c001',78.9); INSERT INTO sc VALUES ('s002','c001',80.9); INSERT INTO sc VALUES ('s10000','c100000',80.9);
运行结果如下:
使用了外键约束保证了不合逻辑的数据不能插入数据表中。
总结:
- 1.外键约束指的是数据表中的某个字段的数据来源依赖于其他数据表中的某个字段的数据,也就是说当前的数据表中插入的数据必须在其他数据表中有记录。
- 2.使用了外键约束之后,表之间就存在一定的依赖关系,依赖的数据表(引用其他表中数据的表)叫作子表或者从表,被依赖的数据表叫做父表或者主表。
- 3.外键约束的语法。
CONSTRAINT fk_sno FOREIGN KEY(sno) REFERENCES student(sno); - 4.删除数据表的时候要先删除子表再删除父表。
- 5.创建数据表的时候先创建父表再创建子表。
索引的创建和使用
DEMO:观察代码
SELECT * FROM SCOTT.emp WHERE sal>1000;
以上的查询只能看到数据,而不能看到整个查询中sql语句执行计划过程,如果观察过程则可以现切换到超级管理员下,打开跟踪器即可。
DEMO:开启跟踪器
conn SYS/CHANGE_ON_INSTALL AS SYSDBA;//切换用户 SET AUTOTRACE ON;//打开跟踪器
DEMO:继续观察
SELECT * FROM SCOTT.emp WHERE sal>4000;
TABLE ACCESS FULL 表示在查询数据的时候使用的是全表扫面的模式。
创建索引的基本语法:
CREATE INDEX 索引名 ON 数据表(字段名)
相当于将数据表的指定字段的值保存到索引数节点中。DEMO:创建索引
CREATE INDEX emp_sal_index ON SCOTT.emp(sal);
DEMO:删除索引
DROP INDEX emp_sal_index;
复合索引创建:
复合索引创建就是一个索引在多个字段上创建,就是一个索引作用于多个字段。
DEMO:创建复合索引
CREATE INDEX emp_job_sal_index ON SCOTT.emp(job,sal);
DEMO:查询数据
SELECT * FROM SCOTT.emp WHERE sal>1000;
此时使用的是全表扫面模式
DEMO:继续查询
SELECT * FROM SCOTT.emp WHERE job='SALEMAN';
当使用复合索引的时候如果只要其中一个字段作为判断条件,那么只有使用第一个字段作为判断条件的时候(在创建索引时候的字段顺序)索引才会生效,这叫做索引的最左原则。
DEMO:查询(使用两个字段)
SELECT * FROM SCOTT.emp WHERE job='SALEMAN' AND sal>1000;
SELECT * FROM SCOTT.emp WHERE sal>1000 AND job='SALEMAN';
在oracle中如果使用了两个多个字段,并且是AND连接的条件,那么字段的顺序不影响扫描的方式(都使用索引扫描)
如果是mysql则需要和复合索引的字段的顺序一致。DEMO:在OR逻辑中使用复合索引
SELECT * FROM SCOTT.emp WHERE job='SALEMAN' OR sal>1000;
使用复合索引的时候如果放到了OR查询中则会导致索引失效。可以使用UNION ALL 代替OR查询
DEMO:使用UINON ALL
SELECT * FROM SCOTT.emp WHERE job='SALEMAN' UNION ALL SELECT * FROM SCOTT.emp WHERE sal>1000;
总结:
- 索引不能随便使用,否则就是滥用,如果一张数据表中的数据更新频率太高,因为更新数据之后需要重新创建索引,这一过程是很耗费性能的。
如果一个项目中要求一张数据表按照某个字段查询的速度很高,但是该数据表的数据经常改变,请问:要怎么解决这一问题:
- 1.可以提高硬件性能
- 2.读写分离,暂时可以设计两张数据表:一张用于数据的查询,一张用于数据的更新,等到夜间人少的时候做一次数据的汇总。
-
在SQL Server Management Studio中使用SQL语句创建数据表并添加相关约束
2022-03-17 15:46:54创建数据表之前,需要先创建用户数据库(不推荐在系统数据库中创建表格),再去自己创建的数据库中创建相应的数据表,创建数据库的SQL语句如下(Ctrl+N 新建查询写SQL语句): create database StudentMIS--创建一...SQL Server中使用SQL语句创建数据表并添加约束的基础教程
1. 创建数据库
创建数据表之前,需要先创建用户数据库(不推荐在系统数据库中创建表格),再去自己创建的数据库中创建相应的数据表,创建数据库的SQL语句如下(Ctrl+N 新建查询写SQL语句):create database StudentMIS--创建一个名为StudentMIS的数据库
选中并执行该语句,左侧的对象资源管理器中出现名为StudentMIS的数据库后表示创建成功(如果执行语句没有报错,但并没有出现数据库的,可以在对象资源管理器中刷新一下数据库),如图所示:
2. 创建数据表
有了数据库之后便可以开始写SQL语句创建表格,但在此之前,应调整目前正在操作的数据库,否则创建出来的表格是在系统数据库中(可以在查询界面的底部查看当前正在操作的数据库),如图:
可以使用use+数据库名称进行切换:use StudentMIS
运行该语句后,会变成如下情况:
接下来便是写建表语句:create table StudentInfo( ID int not null identity(1,1),--编号 Number char(10) not null,--学号 Name varchar(20) not null,--姓名 Sex char(2) null,--性别 Age int,--年龄 Birthday date,--出生日期 Address varchar(50),--家庭住址 Class varchar(10)--班级 )
以上语句可以创建出一个如图的表:
其中,identity表示的是标识列,identity(1,1)表示标识列的初值为1,增量为1。并且,只有整数类型的字段才可以设置标识列,否则会设置出错。create table StudentInfo( ID int not null identity(1,1) ,--编号 Number char(10) not null identity(1,1) ,--学号 Name varchar(20) not null,--姓名 Sex char(2) null ,--性别 Age int,--年龄 Birthday date,--出生日期 Address varchar(50),--家庭住址 Class varchar(10)--班级 )
错误如下:
消息 2749,级别 16,状态 2,第 1 行 标识列 'Number' 的数据类型必须是 int、bigint、smallint、tinyint 或 decimal,或者是小数位数为 0 的 numeric 数据类型,并且约束为不可为 Null。
3. 添加约束
表格创建成功后,为了确保数据的完整性,我们还需要为表格添加一系列的约束,比如主键、唯一约束、检查约束、默认值、外键等。现在咱们就一一进行讲解。
主键约束:设置主键约束有两种方式,可以在创建表的同时设置主键,也可以在表格创建完成之后在单独添加。
在建表的同时设置主键(以Number字段举例):create table StudentInfo( ID int not null identity(1,1),--编号 Number char(10) not null primary key,--学号 主键 Name varchar(20) not null,--姓名 Sex char(2) null,--性别 Age int,--年龄 Birthday date,--出生日期 Address varchar(50),--家庭住址 Class varchar(10)--班级 )
表格创建之后单独添加约束:
alter table StudentInfo add constraint PK_StudentInfo_Number primary key (Number)
这两种方式均可。
如果需要添加多个列作为主键列,则可以使用以下语法:alter table 表名 add constraint 约束名称 约束 (字段1,字段2,...) 例如:alter table StudentInfo add constraint PK_StudentInfo_Number primary key (ID,Number,Name)
唯一约束:同主键约束一样,唯一约束也可以有两种添加方式。
在建表的时候设置(以ID字段示例):create table StudentInfo( ID int not null identity(1,1) unique,--编号 唯一键 Number char(10) not null primary key,--学号 主键 Name varchar(20) not null,--姓名 Sex char(2) null,--性别 Age int,--年龄 Birthday date,--出生日期 Address varchar(50),--家庭住址 Class varchar(10)--班级 )
表格创建之后单独添加约束:
alter table StudentInfo add constraint UQ_StudentInfo_ID unique (ID)
默认值约束:
在建表的时候设置(以Sex字段示例):create table StudentInfo( ID int not null identity(1,1) unique,--编号 唯一键 Number char(10) not null primary key,--学号 主键 Name varchar(20) not null,--姓名 Sex char(2) null default '男',--性别 默认为男 Age int,--年龄 Birthday date,--出生日期 Address varchar(50),--家庭住址 Class varchar(10)--班级 )
表格创建之后单独添加约束:
alter table StudentInfo add constraint DF_StudentInfo_Sex default '男' for Sex
check约束(检查约束):
在建表的时候设置(以Sex字段示例):create table StudentInfo( ID int not null identity(1,1) unique,--编号 唯一键 Number char(10) not null primary key,--学号 主键 Name varchar(20) not null,--姓名 Sex char(2) null default '男' check (Sex='男' or Sex='女'),--性别 默认为男,限制为男或女 Age int,--年龄 Birthday date,--出生日期 Address varchar(50),--家庭住址 Class varchar(10)--班级 )
表格创建之后单独添加约束:
alter table StudentInfo add constraint CK_StudentInfo_Sex check (Sex='男' or Sex='女')
外键约束:添加外键约束需要两个表,所以我们使用如下语句再创建一个分数表:
create table Score( Number char(10) not null ,--学号 Subject varchar(20) not null,--科目 Score decimal(4,1)--分数 )
在Score表中创建外键与StudentInfo表建立关系…
在创建表的同时设置外键:create table Score( Number char(10) not null foreign key references StudentInfo(Number) ,--学号 Subject varchar(20) not null,--科目 Score decimal(4,1)--分数 )
表格创建之后单独添加约束:
alter table Score add constraint FK_Score_StudentInfo_Number foreign key (Number) references StudentInfo(Number)
注意:在添加外键约束时,主键表中相应的字段必须为主键或者是唯一键,否则就会出现以下的错误:
消息 1776,级别 16,状态 0,第 1 行 在被引用表 'StudentInfo' 中没有与外键 'FK_Score_StudentInfo_Number' 中的引用列列表匹配的主键 或候选键。 消息 1750,级别 16,状态 0,第 1 行 无法创建约束。请参阅前面的错误消息。
完整代码如下:
create database StudentMIS; use StudentMIS create table StudentInfo( ID int not null identity(1,1) unique,--编号 唯一键 Number char(10) not null primary key,--学号 主键 Name varchar(20) not null,--姓名 Sex char(2) null default '男' check (Sex='男' or Sex='女'),--性别 默认为男,限制为男或女 Age int,--年龄 Birthday date,--出生日期 Address varchar(50),--家庭住址 Class varchar(10)--班级 ) alter table StudentInfo add constraint PK_StudentInfo_Number primary key (Number) alter table StudentInfo add constraint PK_StudentInfo_Number primary key (ID,Number,Name) alter table StudentInfo add constraint UQ_StudentInfo_ID unique (ID) alter table StudentInfo add constraint DF_StudentInfo_Sex default '男' for Sex alter table StudentInfo add constraint CK_StudentInfo_Sex check (Sex='男' or Sex='女') create table Score( Number char(10) not null foreign key references StudentInfo(Number) ,--学号 Subject varchar(20) not null,--科目 Score decimal(4,1)--分数 ) alter table Score add constraint FK_Score_StudentInfo_Number foreign key (Number) references StudentInfo(Number)
-
SQL 基础(二)数据表的创建、约束、修改、查看、删除
2022-03-25 09:32:54数据类型 数据类型 含义 CHARACTER(n) 字符/字符串。固定长度 n。 VARCHAR(n) 或 CHARACTER VARYING(n) 字符/字符串。可变长度。最大长度 n。 BINARY(n) 二进制串。固定长度 n。 BOOLEAN 存储 TRUE 或...文章目录
数据类型
数据类型 含义 CHARACTER(n) 字符/字符串。固定长度 n。 VARCHAR(n) 或 CHARACTER VARYING(n) 字符/字符串。可变长度。最大长度 n。 BINARY(n) 二进制串。固定长度 n。 BOOLEAN 存储 TRUE 或 FALSE 值 VARBINARY(n) 或 BINARY VARYING(n) 二进制串。可变长度。最大长度 n。 INTEGER(p) 整数值(没有小数点)。精度 p。 SMALLINT 整数值(没有小数点)。精度 5。 INTEGER 整数值(没有小数点)。精度 10。 BIGINT 整数值(没有小数点)。精度 19。 DECIMAL(p,s) 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数,小数点后有 2 位数的数字。 NUMERIC(p,s) 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同) FLOAT(p) 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。 REAL 近似数值,尾数精度 7。 FLOAT 近似数值,尾数精度 16。 DOUBLE PRECISION 近似数值,尾数精度 16。 DATE 存储年、月、日的值。 TIME 存储小时、分、秒的值。 TIMESTAMP 存储年、月、日、小时、分、秒的值。 INTERVAL 由一些整数字段组成,代表一段时间,取决于区间的类型。 ARRAY 元素的固定长度的有序集合 MULTISET 元素的可变长度的无序集合 数据表示方式
长度
N
、精度P
、小数位数S
numeric(P,[S])
表示数据精度为 P,小数位数为 S数据精度:能精确到小数点后的位数,小数点右侧位数
数据表创建
Management Studio 建表
建立表格其实就是定义每一列的过程
数据库表节点,新建
定义列属性,完成建表操作
SQL 指令建表
-- SQL指令建立学生表 create table student ( SNo varchar(6), -- 非定长字符型 SN nvarchar(10), -- Unicode 字符型(所能容纳字符数) Sex nchar(1) default '男', Age int, -- 定长 4,精度10,小数位数0(本字段可存放10位无小数点整数,4字节大小) 无需设置精度和小数位数 Dept nvarchar(20) )
数据表约束
数据完整性
保证数据库中数据的正确性、有效性、相容性,完整性机制主要有:
- 约束 Constraint
- 默认 Default
- 规则 Rule
- 触发器 Trigger
- 存储过程 Stotred Procedure
Constrain
NULL / NOT NULL
NULL 值表示“不知道、不确定、没有数据”,仅当某字段值
必须输入
才有效时可设置NOT NULL
(eg:主键),仅用于定义列约束
定义约束名称后(若不定义,系统将自动创建),若数据录入错误,系统将提示报错信息,无
NOT NULL
约束下,系统缺省值为NULL
-- NOT NULL 约束 create table s ( Sno varchar(6) constraint s_cons not null, -- s_cons 定义约束名称 Sn varchar(10), Sex nchar(1), Age int, Dept nvarchar(20) )
UNIQUE
唯一约束,定义某一列或多列组合取值
必须唯一
,被 UNIQUE 定义的列称为唯一键
,最多只能有一个 NULL 值,列约束、表约束均可列约束
-- UNIQUE 列约束 create table s1 ( Sno varchar(6) constraint s_uniq UNIQUE, -- s_uniq 定义约束名称(可省略) Sn varchar(10), Sex nchar(1), Age int, Dept nvarchar(20) )
表约束
-- UNIQUE 表约束 create table s2 ( Sno varchar(6), Sn varchar(10) UNIQUE, Sex nchar(1), Age int, Dept nvarchar(20), constraint s_unique UNIQUE(Sn,Sex) -- 表约束 语法格式 s_unique 定义约束名称(可省略) Sn+Sex 为唯一键 )
PRIMARY KEY
主键约束,其值不能重复,不能为 NULL,既可表约束又可列约束
PRIMARY KEY UNIQUE 区别:
- 基本表中可定义多个 UNIQUE 约束,但仅可有一个 PRIMARY KEY
- UNIQUE 约束的唯一键值可为 NULL ,PRIMARY KEY 约束的一列或多列组合,任意列都不能出现 NULL 值
- 同一列或同一组列,不能同时定义 PRIMARY KEY 和 UNIQUE
列约束
-- PRIMARY KEY 列约束 create table s3 ( Sno varchar(6) constraint s_prim PRIMARY KEY, Sn varchar(10) UNIQUE, Sex nchar(1), Age int, Dept nvarchar(20) )
表约束
-- PRIMARY KEY 表约束 create table s4 ( Sno varchar(6) NOT NULL, Sn varchar(10) NOT NULL, Sex nchar(1), Age int, Dept nvarchar(20), constraint s4_prim PRIMARY KEY(Sno,Sn) )
FOREIGN KEY
外键约束,约束某一列或几列作为外部键,包含外键的表称为从表(或参照表),主键所在表称为主表(或被参照表)。既可表约束又可列约束
为保证参照完整性,系统保证外键的取值为:- 空值
- 主键取值
换言之,外键存在至少需要两张表,在第一张表中作为主键的属性在第二张表(从表,参照表)中做普通属性,则此键称为第一张表(主表,被参照表)的外键
列约束
-- FOREIGN KEY 列约束 create table s5 ( Sno varchar(6) NOT NULL constraint s5_foreign FOREIGN KEY REFERENCES s3(Sno), Sn varchar(10) NOT NULL, Sex nchar(1), Age int, Dept nvarchar(20) )
表约束
-- FOREIGN KEY 表约束 -- 定义数据表 T create table T ( TNo varchar(6) constraint T_Prim PRIMARY KEY, TN nvarchar(10) UNIQUE, Sex nchar(1), Age int, Dept nvarchar(20) ) -- 定义数据表 C create table C ( CNo varchar(6) constraint C_Prim PRIMARY KEY, CN nvarchar(10) UNIQUE, CT int ) -- 建立 TC 表,定义 TNo、CNo 为 TC 外键 create table TC ( TNo varchar(6) NOT NULL constraint T_Fore FOREIGN KEY REFERENCES T(TNo), CNo varchar(6) NOT NULL constraint C_Fore FOREIGN KEY REFERENCES C(CNo), Score NUMERIC(4,1), -- 精度为8,小数位数为1 Dept nvarchar(20) )
CHECK
检查约束,限定某字段只能录入允许范围内的值,既可表约束又可列约束
注意:
- 一个基本表中可定义多个 CHECK
- 一个字段仅能定义一个 CHECK
- 多个字段定义的 CHECK 必须为表约束
列约束
-- CHECK 列约束 create table limit ( sno varchar(6), cno varchar(10), score numeric(4,1) constraint score_check CHECK(score >=0 AND score <=100) )
表约束
-- CHECK 列约束 create table persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), Country varchar(255), CONSTRAINT chk_Person CHECK (P_Id>0 AND Country='China') )
数据表修改
Management Studio 修改表
SQL 指令修改表
ADD
ADD 方式为新加列自动填充 NULL 值,不可指定 NOT NULL
-- ADD ALTER TABLE S ADD --增加两项 Class_No varchar(6), Address nvarchar(20) ALTER TABLE TC ADD CONSTRAINT Score_chk CHECK(Score BETWEEN 0 AND 100)
ALTER
注意:
- 列名不可变
- 含 NULL 值得列不可指定为 NOT NULL
- 存在于列中的数据不可改变数据类型、减少列宽
- 仅能修改 NOT NULL 、NULL 约束,其他约束需要通过“删除后重新添加“的方式完成修改
-- ALTER ALTER TABLE S ALTER COLUMN SN nvarchar(12)
DROP
仅用于删除完整性约束定义
-- DROP ALTER TABLE s3 DROP CONSTRAINT s_prim
数据表查看
右键 表 ,属性
查看表信息
数据表删除
Management Studio 删除表
表存在依赖对象时,不可删除
SQL 指令删除表
仅可删除匹配用户建立的表,用户权限要对应
-- 删除基本表 DROP TABLE s
-
MySQL创建表和约束条件(四)
2019-11-15 14:09:16古语有云: 万恶淫为首,百善孝为先。 我们后辈当自勉。 上一章简单介绍了 MySQL的数据类型(三),如果没有看过,请观看上一章 ...在创建表时,一定要在 database 里面进行创建, 既先使用 use 数据库名来选择... -
数据库的创建表时,字段的数据类型和约束条件
2019-03-08 10:46:34文章目录数值类型:整数类型:浮点型:日期类型:字符串类型:枚举类型与集合类型: 数值类型: 整数类型: ... 创建表整形类型不指定宽度。指定宽度对存储宽度没用,只是更改显示宽度。显示宽度是指... -
MySQL数据库中数据表的约束条件
2022-03-31 19:19:30MySQL数据库中数据表的约束条件 -
创建数据表并为已创建的表添加约束
2018-06-16 18:22:21/*初始化两张表,测试添加约束语句*/use E_Marketgo--创建部门表if exists(select * from sysobjects where name = 'department')drop table departmentcreate table department --部门表( DepartmentId char(5) not... -
SQL server数据表的创建操作及约束
2019-02-21 18:36:19创建数据表 1、通过界面方式操作数据表 (1)启动SQL Server Management Studio,并连接到SQL Server 2012中的数据库。 (2)鼠标右键单击“表”选项,在弹出的快捷菜单中选择“新建表”命令 (3)然后进行列名... -
MySQL基础之如何创建、修改、约束数据表
2021-01-18 19:56:30整型类型在了解整型的几种形式之前,整型有符号和无符号的区分;其中有符号区分正负,无符号不区分(unsigned)。整型按照存储范围分为以下几种:1、tinyint :范围略有符号:无符号:2、smallint:3、mediumint:4、int :5、... -
SQL数据库语言基础之SqlServer数据表的六大约束(主键、外键、检查、非空、唯一性、默认值约束)的创建
2021-10-09 14:40:57文章目录一、主键约束(primary key)二、外键约束(foreign key)三、检查约束(check)四、非空约束(not null)五、唯一性约束(unique)六、默认值约束(default) 一、主键约束(primary key) 1、主键说明 (1... -
MySQL数据库-笔记02【创建数据库与数据表、数据类型、约束概念与举例】
2020-06-11 18:29:02MySQL数据库-笔记02【创建数据库与数据表、数据类型与类型选择、增删改查、6种约束概念与举例(主键约束、自增约束、唯一约束、非空约束、默认约束、外键约束)】 -
SQL数据库创建表约束(Constraints)
2019-04-14 22:41:27SQL 约束(Constraints) ...约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。 SQL CREATE TABLE + CONSTRAINT 语法 CREATE TABLEtable_name (column_name... -
mysql创建表时设置外键约束的方法
2021-01-18 19:18:26mysql创建表时设置外键约束的方法发布时间:2020-06-17 15:54:11来源:亿速云阅读:312作者:元一MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就... -
数据库表的创建、管理和数据操作(实验一),数据库创建
2021-02-11 03:21:09数据库表的创建、管理和数据操作(实验一),数据库创建今天我们就以实验的形式对表的创建、管理和数据操作进行学习,上课吧。【实验目的】:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识。【实验... -
使用MySQL数据库创建表时添加外键约束
2022-01-11 17:16:12使用MySQL数据库创建表时添加外键约束,mysql基础 -
SQL篇-创建数据表
2021-05-05 16:06:28SQL篇-创建数据表 SQL简单点说,就是访问和处理关系性数据库的一种计算机语言,而要操作数据库中的表,第一步就是要创建数据表 1、创建数据表 建表 -- 创建演员表 CREATE TABLE IF NOT EXISTS `actor` ( `... -
SQL Server 数据库之数据约束
2022-03-31 20:29:24数据约束1. 概述2. 主键约束防止无效数据2.1 给数据表设置主键约束 1. 概述 在设计一张数据表的时候不仅要对表中所用字段...在 SQL Server 数据库中,常用约束来对数据表进行完整性设置,主要的约束方式有5种:主键约束 -
MySQL数据表的基本操作一:创建表与表约束
2014-09-23 01:14:55MySQL数据表的基本操作,字段的添加、删除、重命名、类型更改、表的各种约束 -
Oracle创建表和约束、修改表
2018-10-17 14:22:44创建表 第一种方式,语法如下: --column_name:列名 --type:数据类型 --注意:多个列名之间用逗号分隔,最后一列不要加逗号 create table table_name( column_name type, column_name type ) 第二种方式,语法... -
MySQL创建表时的约束(Constraint)
2020-05-28 17:43:01在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性,有效性,完整性。 常见的约束有那些? 非空约束(not null):约束的字段不能为null 唯一约束(unique):约束的字段不... -
数据库-创建数据库-创建数据表
2022-03-20 17:22:53一.创建数据库 -
MySQL——在创建数据表时创建索引
2018-05-15 18:53:58在建立数据表时创建索引 在创建数据表时创建索引的基本语法结构: CREATE TABLE table_name( 属性名 数据类型[约束条件], …… 属性名 数据类型 [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY ... -
数据库,表的创建、主键,外键,check约束
2019-11-21 19:17:53二,表的创建 例如: 图书(书号,书名,价格,出版社) 读者(卡号,姓名,年龄,所属单位) 借阅(书号,卡号,借阅日期) 1,先给出具体的例子 --建立表 use shu create table tushu --创建表 ( -... -
MySQL创建表和主键约束
2021-01-18 20:48:571.创建表在操作数据表之前,应该使用"USE 数据库名"指定操作是在哪个数据库中进行主键约束(唯一标识)****非空*******唯一*******被引用****(学习外键时)约束是添加在列上的,用来约束列的!主键约束,用于唯一标识... -
数据库表的创建、管理和数据操作(实验一)
2021-01-18 19:20:34今天我们就以实验的形式对表的创建、管理和数据操作进行学习,上课吧。【实验目的】:了解SQL语言的使用,进一步理解... 利用数据定义语句在实验一创建的stu_DB库中建立学生管理系统的三个表:Student、Course、SC。... -
mysql 创建唯一约束表
2019-08-28 11:15:46说明: UNIQUE 约束唯一标识数据库表中的每条记录。 UNIQUE 和 PRIMARY KEY ...请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 1、创建一个测试表: create table test(... -
给数据表中的字段添加约束
2021-03-12 19:49:24唯一约束(Unique Constraint)要求该列唯一,允许为空,但是只能有一个空值。唯一约束可以确保一列或者几列不出现重复值。 定义部门表的部门名称唯一,SQL语句如下:关键词 UNIQUE。 CREATE TABLE t_dept( id INT ... -
Mysql创建外键约束的两种方式
2021-02-04 16:31:04通过给mysql的表字段添加外键约束,可以有效的保持数据的一致性和完整性,数据就不会很容易出问题。1、创建表时直接创建外键约束create table books(bookid number(10) not null primary key,bookName varchar2(20) ... -
SQL Server中创建表,设置完整性约束
2020-09-23 18:48:50单属性主键也可以在列Sno后方直接定义,如: CREATE TABLE S( Sno INT PRIMARY KEY, Sname VARCHAR(100) UNIQUE, Status VARCHAR(100), City VARCHAR(100) ) 联合主键:在表SP中,属性Sno和Pno共同构成联合主键。...