数据库中怎么设置成绩字段的大于等于0、小于等于100检查约束

数据库中怎么设置成绩字段的大于等于0、小于等于100检查约束,第1张

create

table

tableName(u_id

int

not

null,u_age

int

check(u_age=>0

and

u_age<=100);)数据库就这样啊,

明白了吗,采纳我的答案啊

现在要说的是在列这一层次过滤的基于表定义之前就规范好的 CHECK 约束。(MySQL 版本 >= 8016)

mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0));

Query OK, 0 rows affected (003 sec)

mysql> create table f2 (r1 int constraint tb_f2_r1_chk1 check (mod(r1,3)=0) not enforced);

Query OK, 0 rows affected (002 sec)

这里 CHECK 约束的相关限制如下:

1 constraint 名字在每个数据库中唯一。

也就是说单个数据库里不存在相同的两个 constraint,如果不定义,系统自动生成一个唯一的约束名字。

2 check 约束针对语句 insert/update/replace/load data/load xml 生效;针对对应的 ignore 语句失效。

3 并非每个函数都可以使用,比如函数结果不确定的:NOW(),CONNECTION_ID(),CURRENT_USER()。

4 不适用于存储过程和存储函数。

5 系统变量不适用。

6 子查询不适用。

7 外键动作(比如 ON UPDATE, ON DELETE) 不适用。

8 enforced 默认启用,如果单独加上 not enforced ,check 约束失效。

这些都是建表是的一些 *** 作。其中的关系是指这张表和其他表的联系是什么,比如表a和表b之间:表a的主键在表b中为外键。这就需要在建表b的时候将外键列参照到表a的主键列。索引是为了给经常进行检索的列设置索引项,提高数据库检索性能。约束就更好理解了,比如给某一列添加什么什么的约束,就是用check约束了。比如:性别一列,值域只能是(男,女) 就是check(sex in (男,女))。大差不多,只要用的多了,自然而然的就知道这些东西了。

CHECK(成绩>=0 AND 成绩<=100)

1、列1使用T-SQL语句可以方便地删除一个或多个约束,其语法格式为:

2、例2删除学生表中外键fk_bjdm,ck和检查约束ck_csrq

3、例3删除学生表中的主键约束p-k。代码如下:

4、例4在“学生成绩管理系统”数据库中,为班级表中的班级名称字段删除唯一约束,代码如下:

5、例5删除教师表中的默认约束df-mz、代码如下:

6、可以使用下面的语法使所有的约束或者指定的约束无效:

约束,主要为了维护数据库的完整性而定义的一些规则,列约束作为列定义的一部分只作用于此列本身。表约束作为表定义的一部分,可以作用于多个列。在这里举几个例子。

1主键约束

主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。

多列组成的主键叫联合主键,联合主键就是表级约束,单列主键就是列级约束。

2唯一性约束

某一列的值,在这个表中,只能出现一个,比如身份z号码等

3外键约束

外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联

等等,不一一列举了。

主键约束

SELECT

tabname AS [表名],

idxname AS [主键名称],

colname AS [主键列名]

FROM

sysindexes idx

JOIN sysindex_columns idxCol

ON (idxobject_id = idxColobject_id

AND idxindex_id = idxColindex_id

AND idxis_primary_key = 1)

JOIN systables tab

ON (idxobject_id = tabobject_id)

JOIN syscolumns col

ON (idxobject_id = colobject_id

AND idxColcolumn_id = colcolumn_id);

唯一约束

SELECT

tabname AS [表名],

idxname AS [约束名称],

colname AS [约束列名]

FROM

sysindexes idx

JOIN sysindex_columns idxCol

ON (idxobject_id = idxColobject_id

AND idxindex_id = idxColindex_id

AND idxis_unique_constraint = 1)

JOIN systables tab

ON (idxobject_id = tabobject_id)

JOIN syscolumns col

ON (idxobject_id = colobject_id

AND idxColcolumn_id = colcolumn_id);

外键约束

select

oSubname AS [子表名称],

fkname AS [外键名称],

SubColname AS [子表列名],

oMainname AS [主表名称],

MainColname AS [主表列名]

from

sysforeign_keys fk

JOIN sysall_objects oSub

ON (fkparent_object_id = oSubobject_id)

JOIN sysall_objects oMain

ON (fkreferenced_object_id = oMainobject_id)

JOIN sysforeign_key_columns fkCols

ON (fkobject_id = fkColsconstraint_object_id)

JOIN syscolumns SubCol

ON (oSubobject_id = SubColobject_id

AND fkColsparent_column_id = SubColcolumn_id)

JOIN syscolumns MainCol

ON (oMainobject_id = MainColobject_id

AND fkColsreferenced_column_id = MainColcolumn_id)

Check约束

SELECT

tabname AS [表名],

chkname AS [Check约束名],

colname AS [列名],

chkdefinition

FROM

syscheck_constraints chk

JOIN systables tab

ON (chkparent_object_id = tabobject_id)

JOIN syscolumns col

ON (chkparent_object_id = colobject_id

AND chkparent_column_id = colcolumn_id)

创建多列约束不用在每个列上都创建约束,相反,可以在多个列上同时创建一个约束来检查这些列的值,例如,如果我想创建单个约束来检查Salary和SalaryType,那我可能使用如下的代码:ALTERTABLEdboPayrollWITHNOCHECKADDCONSTRAINTCK_Payroll_Salary_N_SalaryTypeCHECK(SalaryTypein('Hourly','Monthly','Annual')andSalary1000andSalary<15000000);这个约束和前面的两个约束完成的事情是一样的,但你要记住,这样做有一个不好的后果,那就是最终在理解究竟是SalaryType列,还是Salary列,或者这两列违反了你的检查约束时可能比较困难。这样做之后还有一个让人烦恼的是不止使用一列来判断某个特定列的值是否有效,例如,假设我想要确保在输入HourlySalaryType时,我想要Salary小于100,或者在输入MonthlySalaryType时,Salary小于10000,当输入AnnualSalaryType时,Salary合计是准确的。为了实现这个约束条件,我使用下面的ADDCONSTRAINT子句:ALTERTABLEdboPayrollWITHNOCHECKADDCONSTRAINTCK_Payroll_SalaryType_Based_On_SalaryCHECK((SalaryType='Hourly'andSalary<10000)or(SalaryType='Monthly'andSalary<1000000)or(SalaryType='Annual'));在这里我将多列条件集中在一起了,又用or条件将它们进行分离,这样我的检查约束就可以验证每个不同的SalaryType的Salary值了。ALTERTABLEdboPayrollWITHNOCHECKADDCONSTRAINTCK_Payroll_SalaryTypeCHECK(SalaryTypein('Hourly','Monthly','Annual'));现在,如果你执行下面的INSERT语句:INSERTINTOdboPayrollvalues(1,1,'Hourly',2500);INSERTINTOdboPayrollvalues(2,2,NULL,2500);INSERTINTOdboPayrollvalues(3,3,'Horly',2500);你认为将会发生什么只有第一条INSERT语句会起作用吗第二条和第三条INSERT将会怎么样它们都会违反CK_Payroll_SalaryType吗结果是只有第三条INSERT语句会失败,它之所以失败是因为SalaryType被打乱了,不再仅仅是“Hourly”,“Monthly”或“Annual”了,那为什么第二个INSERT语句没有返回FALSE呢很明显,NULL(空值)也不是有效的SalaryType,第二条INSERT语句能够工作的原因是它运行时CK_Payroll_SalaryType约束没有返回FALSE值,所以数据库引擎就插入了第二条记录。ALTERTABLEdboPayrollWITHNOCHECKADDCONSTRAINTCK_Payroll_SalaryTypeCHECK((SalaryTypein('Hourly','Monthly','Annual'))andSalaryTypeisnotNULL);另一个选择是将SalaryType列设置为一个NOTNULL字段,这样之后就不用再创建一个检查约束了,但你会获得一个不能向表中插入NULL值的错误消息。通过检查约束进行数据验证使用检查约束后,可以确保你的数据库只包括通过了检查的数据,这样允许你让数据库引擎控制你的数据有效性,这样做之后,你的应用程序就不用再进行数据验证了,否则程序代码中到处都穿插有数据校验的脚本,通过这种方法使数据验证工作更轻松,更简洁。

以上就是关于数据库中怎么设置成绩字段的大于等于0、小于等于100检查约束全部的内容,包括:数据库中怎么设置成绩字段的大于等于0、小于等于100检查约束、怎么用sql命令语句写check约束、sql server 数据库同时查出约束和索引等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9825180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存