精华内容
下载资源
问答
  • 用户自定义约束
    2022-05-09 10:07:46

    1.添加check约束

    第一种:关键词or,约束值少的情况下用。

    --新增列时添加check约束:or
    alter table Stu add varchar SD check (SD='通信' or SD='计算机'or SD='机械'or SD='网络')

    第二种:关键词in,约束值多的情况下用。

    --新增列时添加check约束:in
    alter table Stu add varchar SD check (SD in ('通信','计算机','机械','网络'))

    第三种:关键词constraint,现有列中添加约束。

    --在现有列中添加check约束
    alter table Stu add constraint SD check (SD in ('通信','计算机','机械','网络'))

    2.查看check约束

    --查询表Stu的所有约束
    exec sp_helpconstraint @objname=Stu

     

    更多相关内容
  • 数据库技术与应用 用户自定义约束-D习题与作业.doc 学习资料 复习资料 教学资源
  • 数据库技术与应用 用户自定义约束-A学习任务书.doc 学习资料 复习资料 教学资源
  • 电子信息工程技术专业教学资源库 电子信息工程技术专业教学资源库 Electronic information teaching resource ...实践任务2-2使用SSMS设置简单的数据约束 知识点2-2-3用户自定义约束 学习目标 二学习内容 三提
  • – 创建用户自定义约束(指定图书表中价格必须为正值) -- ALTER TABLE book -- add constraint ck_book check (price>0); – 2、对各表进行字段调整操作 – 添加新字段 – 在图书表中添加“是否热门...

    撰写人——软工二班——陈喜平
    – 实验内容:

    – 一、创建表

    – 创建图书馆管理系统所涉及的表

    – 创建产品销售系统所涉及的表

    – 图书表book(bid,bname,price,qty)

    – 书库表lib(lid,lname,address)

    – 读者表reader(rid,rname,dept)

    – 借阅表loan(bid,rid,loanDate)

    -- set pagesize 50;
    
    -- set linesize 300;
    
    
    
    -- DROP TABLE if exists book;
    
    -- DROP TABLE if exists lib;
    
    -- DROP TABLE if exists reader;
    
    -- DROP TABLE if exists loan;
    
    
    
    -- CREATE TABLE book(
    
    -- 	bid char(10),
    
    -- 	bname varchar(30),
    
    -- 	price number(8,2)
    
    -- );
    
    
    
    -- CREATE TABLE lib(
    
    -- 	lid char(10),
    
    -- 	lname varchar(30),
    
    -- 	address varchar(100)
    
    -- );
    
    
    
    
    
    -- CREATE TABLE reader(
    
    -- 	rid char(10),
    
    -- 	rname varchar(30),
    
    -- 	dept varchar(20)
    
    -- );
    
    
    
    -- CREATE TABLE loan(
    
    -- 	nid char(10),
    
    -- 	bid char(10),
    
    -- 	rid char(10),
    
    -- 	loanDate char(50)
    
    -- );
    
    
    
    
    
    
    

    在这里插入图片描述

    -- insert into book(bid, bname, price)
    
    -- values(
    
    -- 	'book001',
    
    -- 	'ComputerBook',
    
    -- 	500
    
    -- );
    
    
    
    -- insert into book(bid, bname, price)
    
    -- values(
    
    -- 	'book002',
    
    -- 	'AB360',
    
    -- 	360
    
    -- );
    
    
    
    -- insert into book(bid, bname, price)
    
    -- values(
    
    -- 	'book003',
    
    -- 	'CBook',
    
    -- 	25
    
    -- );
    
    
    
    -- insert into lib(lid, lname, address)
    
    -- values(
    
    -- 	'lib001',
    
    -- 	'History',
    
    -- 	'HuNanLouDi001'
    
    -- );
    
    
    
    -- insert into lib(lid, lname, address)
    
    -- values(
    
    -- 	'lib002',
    
    -- 	'Math',
    
    -- 	'HuNanLouDi002'
    
    -- );
    
    
    
    -- prompt finish demo data for book;
    
    

    在这里插入图片描述

    -- DROP TABLE book;
    
    -- DROP TABLE lib;
    
    -- DROP TABLE reader;
    
    -- DROP TABLE loan;
    
    
    
    -- drop table book cascade constraints;
    

    – 二、修改表

    – 1、为各表创建约束

    – DBMS自动实现数据的完整性—借助于约束的作用:保证数据库中永久数据的正确性(主键唯一,不能引用不存在的对象,满足用户定义的条件)

    – 创建主键约束(为图书表、读者表、借阅表创建主键)

    -- ALTER TABLE book
    
    -- add constraint pk_book primary key(bid);
    
    
    -- ALTER TABLE reader
    
    -- add constraint pk_reader primary key(rid);
    
    
    -- ALTER TABLE loan
    
    -- add constraint pk_loan primary key(nid);
    
    -- select * from book;
    
    -- select * from lib;
    
    -- select * from reader;
    
    -- select * from loan;
    

    – 主键:唯一标识,该字段的值必须与别的实体必须是不一样的

    – 由dbms保证数据的正确性

    – 创建外键约束(为借阅表创建外键)

    -- ALTER TABLE loan
    
    -- add constraint fk1_loan foreign key(bid) REFERENCES book(bid);
    
    -- ALTER TABLE loan
    
    -- add constraint fk2_loan foreign key(rid) REFERENCES reader(rid);
    

    – 创建用户自定义约束(指定图书表中价格必须为正值)

    -- ALTER TABLE book
    
    -- add constraint ck_book check (price>0);
    

    – 2、对各表进行字段调整操作

    – 添加新字段

    – 在图书表中添加“是否热门”字段

    -- alter table book
    
    -- add (popular varchar2(30) default '是否热门' not null);
    

    – 修改字段类型

    -- alter table book
    
    -- modify (popular varchar2(20) default 'IsPopular');
    

    – 修改图书表中书名字段为变长字符串

    -- alter table book 
    
    -- modify (bname varchar2(30)); 
    
    
    
    -- alter table book 
    
    -- modify (bid char(10)); 
    
    
    
    -- alter table book 
    
    -- modify (bname varchar2(15)); 
    
    
    
    -- alter table lib 
    
    -- modify (lid varchar(10)); 
    
    
    
    -- alter table lib 
    
    -- modify (lname varchar(15)); 
    
    
    
    -- alter table lib 
    
    -- modify (address varchar(16)); 
    
    
    
    -- alter table lib 
    
    -- modify (address varchar(20)); 
    
    
    
    
    
    

    – 删除不用的字段

    – 删除图书表中“是否热门”字段

    在这里插入图片描述

    在这里插入图片描述

    -- alter table book
    
    -- drop column popular;
    
    

    – 三、删除表

    – 删除无关联表

    -- DROP TABLE lib;
    
    

    – 删除包含外键引用的表

    -- DROP TABLE book cascade constraints;
    
    -- DROP TABLE reader cascade constraints;
    
    

    – 四、创建查询表

    – 创建所有昂贵书籍表

    -- CREATE TABLE expensivebook as 
    
    -- select * 
    
    -- from book 
    
    -- where price>300;
    
    
    
    

    在这里插入图片描述
    – 五、对借阅情况表进行截断操作

    -- delete * from loan
    
    

    – dml 日志多

    – ddl 日志少

    -- truncate loan;
    
    -- select * from book where bid in(
    
    -- 	select bid
    
    -- 	from book
    
    -- 	group by bid
    
    -- 	having count(bid)>1);
    
    展开全文
  • 文章目录定义约束1 定义约束原则2 定义NOT NULL约束2.1 创建表时定义NOT NULL约束2.2 修改表时定义NOT NULL约束3 定义UNIQUE约束3.1 创建表时创建unique约束3.2 修改表时创建unique约束4 定义PRIMARY KEY约束4.1 在...


    备注:本文中使用到的sql为HR用户提供的数据和表。HR用户介绍查看以下链接。
    https://blog.csdn.net/weixin_45842494/article/details/122528264

    定义约束

    • 非空约束(NOT NULL)
    • 唯一性约束(UNIQUE)
    • 主键约束(PRIMARY KEY)
    • 外键约束(FOREIGN KEY)
    • 用户自定义约束(CHECK)

    在这里插入图片描述

    1 定义约束原则

    创建一个约束:在创建表的同时,或者在创建表之后都可以定义约束。可以给约束起名字,但是约束名不能相同,必须是唯一的。如果没有为约束起名字,Oracle 服务器将用默认格式SYS_Cn产生一个名字,这里n是一个唯一的整数,所以约束名是唯一的。

    2 定义NOT NULL约束

    在这里插入图片描述

    2.1 创建表时定义NOT NULL约束

    示例:

    创建一个dept80表。

    create table dept80(id number,name varchar2(20) not null,salary number constraint dept80_not not null);
    

    说明:name的非空约束由系统自动起名,salary的非空约束被用户起名为dept80_not,注意使用了constraint关键字。

    desc dept80;
    Name   Type         Nullable Default Comments 
    ------ ------------ -------- ------- -------- 
    ID     NUMBER       Y                         
    NAME   VARCHAR2(20)                           
    SALARY NUMBER 
    

    2.2 修改表时定义NOT NULL约束

    示例:

    给dept表中的location_id列添加非空约束。

    alter table dept80 modify location_id not null;
    

    说明:想给定约束名称的话使用constraint关键字。

    3 定义UNIQUE约束

    在这里插入图片描述

    3.1 创建表时创建unique约束

    示例;

    create table dept90 (id number constraint dept90_uk unique,name varchar2(20));
    

    在这里插入图片描述

    3.2 修改表时创建unique约束

    示例:

    alter table dept90 modify(name unique);
    

    在这里插入图片描述

    4 定义PRIMARY KEY约束

    在这里插入图片描述

    4.1 在创建表时定义PRIMARY KEY约束

    create table dept70(id number constraint dept70_pk primary key);
    

    在这里插入图片描述

    4.2 在修改表时定义PRIMARY KEY约束

    示例:

    alter table dept60 modify(id constraint dept60_pk primary key);
    

    在这里插入图片描述

    4.3 创建联合主键

    create table dept50(id number,name varchar2(20), constraint dept50_pk primary key(id,name));
    

    在这里插入图片描述

    5 定义FOREIGN KEY约束

    在这里插入图片描述

    注意:添加外键约束时被引用的表必须先存在。而且外键约束不能直接跟在列的后面创建。

    5.1 创建表时定义FOREIGN KEY约束

    示例:

    create table dept40 (id number,d_id number,constraint dept40_fk foreign key(d_id) references dept60(id));
    

    在这里插入图片描述

    说明:创建了一个dept40表,表中的字段d_id参照于dept60表中id列。

    5.2 修改表时定义FOREIGN KEY约束

    示例:

    alter table dept50 add constraint dept50_fk foreign key(d_id) references dept60(id);
    

    在这里插入图片描述

    说明:以上所有的修改是这个表和这个字段已经存在,仅是修改。

    6 定义CHECK约束

    在这里插入图片描述

    6.1 创建表时定义CHECK约束

    示例:

    create table dept30 (id number,salary number(8,2) constraint dept30_ck check(salary>1000));
    

    在这里插入图片描述

    6.2 修改表时定义CHECK约束

    alter table dept50 add constraint dept50_ck check(salary>1000);
    

    在这里插入图片描述

    7 禁用与启用约束

    7.1 查看约束

    在这里插入图片描述

    表的约束被存放在user_constraints表中。

    select constraint_name,constraint_type,search_condition from user_constraints where table_name = 'DEPT50';
    CONSTRAINT_NAME                CONSTRAINT_TYPE SEARCH_CONDITION
    ------------------------------ --------------- --------------------------
    DEPT50_PK                      P               
    DEPT50_FK                      R               
    DEPT50_CK                      C               salary>1000
    

    说明:表明在Oracle数据库中都是大写,所以条件那里表明为大写。search_condition为检查约束的具体条件。

    P:主键约束。R:外键约束。C:检查约束。

    7.2 禁用约束

    在这里插入图片描述

    说明:如果要禁用的主键被其他表的外键所参照,就不能禁用,存在相关性。加上CASCADE(级联禁用)后会把和他关联的外键也禁用掉,这样就可以成功禁用。

    alter table dept60 disable constraint dept60_pk;
    

    在这里插入图片描述

    alter table dept60 disable constraint dept60_pk cascade;
    

    在这里插入图片描述

    7.3 启用约束

    在这里插入图片描述

    示例:

    alter table dept60 enable constraint dept60_pk;
    

    说明:disable禁用约束。cascade:级联禁用约束。enable:启用约束。

    展开全文
  • MySQL常见建表选项及约束

    千次阅读 2021-01-21 17:55:27
    阅读目录---MySQL常见的建表选项及约束:2、指定表选项:engine、auto_increment、comment2、unique:唯一约束5、check:检查---enum、set一、CREATE TABLE 选项1、在定义列的时候,指定列选项1)DEFAULT :定义列的...

    阅读目录---MySQL常见的建表选项及约束:

    2、指定表选项:engine、auto_increment、comment

    2、unique:唯一约束

    5、check:检查---enum、set

    一、CREATE TABLE 选项

    1、在定义列的时候,指定列选项

    1)DEFAULT :定义列的默认值

    当插入一个新行到表中并且没有给该列明确赋值时,如果定义了列的默认值,将自动得到默认值 ;如果没有,则为null。

    mysql>create table people->(->   id int not nullprimary key,->   name varchar(20) not null,->   sex char(1) default 'm'

    ->);

    mysql> insert into people(id,name) values(1,'张三');

    mysql> insert into people values(2,'李四','f');

    mysql> select * frompeople;+----+--------+------+

    | id | name | sex |

    +----+--------+------+

    | 1 | 张三 | m |

    | 2 | 李四 | f |

    +----+--------+------+

    当然,也可以在INSERT和UPDATE语句中使用DEFAULT关键字显式地给列赋默认值:

    mysql> insert into people values(3,'王五',default);

    mysql> update people set sex=default where id=2;

    mysql> select * frompeople;+----+--------+------+

    | id | name | sex |

    +----+--------+------+

    | 1 | 张三 | m |

    | 2 | 李四 | m |

    | 3 | 王五 | m |

    +----+--------+------+

    函数default(column)可以得到一个列的默认值:

    mysql> select default(sex) frompeople;+--------------+

    | default(sex) |

    +--------------+

    | m |

    | m |

    | m |

    +--------------+

    2)comment:用来给列添加注释,最多255个字符,注释会保存到数据字典中。

    创建带有列注释的表stu_comment

    mysql>create table stu_comment->(-> id int not nullprimary key-> comment '学号',-> name varchar(20) not null

    -> comment '姓名'

    -> );

    从数据字典查询注释信息

    mysql> selectcolumn_name,column_comment-> frominformation_schema.columns-> where table_name='stu_comment';+-------------+----------------+

    | column_name | column_comment |

    +-------------+----------------+

    | id | 学号 |

    | name | 姓名 |

    +-------------+----------------+

    2、在CREATE TABLE语句中的表选项

    1)engine:指定表使用的存储引擎

    存储引擎:决定了数据如何存储以及如何访问,还有事务如何处理

    MySQL允许对每个表使用不同的存储引擎,如果在create table语句中没有指定存储引擎,则使用默认的存储引擎。

    mysql> show engines;    #查询所有支持的存储引擎

    mysql> CREATE TABLE sexes(sex char(1) NOT NULL) ENGINE = INNODB;

    注意:存储引擎是个重点,后面我们详细讲解。

    2)auto_increment:决定当向表中插入第一行时,自增列得到的第一个值是多少

    3)comment:给表添加注释

    mysql> create table mycomm(num int) comment '测试表';

    mysql> selecttable_name,table_comment-> frominformation_schema.tables-> where table_name='mycomm';+------------+---------------+

    | table_name | table_comment |

    +------------+---------------+

    | mycomm | 测试表 |

    +------------+---------------+

    二、CREATE TABLE 约束

    作用:可以为列定义约束(constraint)

    约束主要是防止非法数据进入到表中,确保数据的正确性和一致性(统称数据完整性);

    约束也可以防止一个表被删除 。

    225f7d9da946503f44cbe7a325072c41.png

    注意:

    1)MySQL中约束保存在information_schema.table_constraints中,可以通过该表查询约束信息;

    2)进行约束定义的时间:使用create table语句、使用alter table语句。

    常用的约束的类型:5种

    ①not null:非空约束,指定某列不为空

    ②unique:唯一约束,指定某列和几列组合的数据不能重复

    ③primary key:主键约束,指定某列的数据不能重复、唯一

    ④foreign key:外键,指定该列记录属于主表中的一条记录,参照另一条数据

    ⑤check:检查,指定一个表达式,用于检验指定数据

    约束定义的语法:

    列级别:

    CREATE TABLE table_name(column_name data_type

    [ [NOT NULL]| [UNIQUE [KEY]| PRIMARY KEY]  |CHECK(expr)],…)

    表级别:

    CREATE TABLE table_name(

    column_name data_type [NOT NULL],

    column_name data_type [notnull],…,

    [CONSTRAINT constraint_name] PRIMARY KEY (col_name,...)|[CONSTRAINT constraint_name] unique (col_name,...)|[CONSTRAINT constraint_name] foreign KEY (col_name) REFERENCES tbl_name (index_col_name)|check(expr)

    注意:

    1)NOT NULL约束只能在列级别定义,作用在多个列上的约束只能定义在表级别,例如复合主键约束;

    2)列级别上不能定义外键约束,并且不能给约束起名字,由MySQL自动命名(NOT NULL除外);

    3)表级别上定义的约束可以给约束起名字(CHECK约束除外)

    1、、not null非空约束

    作用:用于确保当前列的值不为空。

    mysql> create table temp_nn(id int not null);

    约束直接对DML操作带来影响

    mysql> insert into temp_nn values(1);

    Query OK,1 row affected (0.00sec)

    mysql> insert into temp_nn values(null);

    ERROR1048 (23000): Column 'id' cannot be null具有非空约束的列不允许有null值

    注意:非空约束只能出现在表对象的列上。

    2、unique唯一约束

    1.唯一约束是指定table的列或列组合不能重复,保证数据的唯一性,约束的列不允许有重复值;

    2.唯一约束不允许出现重复的值,但是可以为多个null;

    3.同一个表可以有多个唯一约束,多个列组合的约束

    mysql>create table temp_uk(-> id int not nullunique,-> name varchar(20) unique);

    mysql> insert into temp_uk values(1,'a');

    mysql> insert into temp_uk values(2,'a');

    ERROR1062 (23000): Duplicate entry 'a' for key 'name'mysql> insert into temp_uk values(2,null);

    mysql> insert into temp_uk values(3,null);

    mysql> select * fromtemp_uk;+----+------+

    | id | name |

    +----+------+

    | 2 | NULL |

    | 3 | NULL |

    | 1 | a |

    +----+------+

    可见,唯一性约束的列可以有多个null值,因为null <> null

    4.在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同;

    5.唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。

    mysql>create table test(-> id int not null,-> name varchar(20),-> password varchar(16),---使用表级约束语法 ->constraint uk_name_pwd unique(name,password)->); #表示用户名和密码组合不能重复

    Query OK,0 rows affected (0.08sec)

    查询数据字典,查看唯一键约束的信息

    mysql> select * frominformation_schema.table_constraints-> where table_name='test';

    3、primary key主键约束

    primary key = not null + unique

    主键:用来唯一的标示表中的每一行(类型一般为整型或者字符串)

    具有主键约束的列不允许有null值,并且不允许有重复值;

    每个表最多只允许一个主键(可定义联合主键),主键名总是PRIMARY。

    mysql>create table temp_pk(-> id intprimary key);

    mysql> insert into temp_pk values(1),(2);

    mysql> insert into temp_pk values(1);

    ERROR1062 (23000): Duplicate entry '1' for key 'PRIMARY'mysql> update temp_pk set id=1 where id=2;

    ERROR1062 (23000): Duplicate entry '1' for key 'PRIMARY'mysql> insert into temp_pk values(null);

    ERROR1048 (23000): Column 'id' cannot be null

    !!给主键一个新的名字,但在数据字典中,主键名还是显示primary

    联合主键(用几个列进行唯一标识一行)

    mysql>create table temp_pk(-> id int,-> name varchar(20),->constraint pk_id_name primary key(id,name)->);

    Query OK,0 rows affected (0.06sec)

    mysql>desc temp_pk;+-------+-------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id | int(11) | NO | PRI | NULL | |

    | name | varchar(20) | NO | PRI | NULL | |

    +-------+-------------+------+-----+---------+-------+

    2 rows in set (0.00sec)

    mysql> insert into temp_pk values(1,'张三');

    Query OK,1 row affected (0.00sec)

    mysql> insert into temp_pk values(2,'李四');

    Query OK,1 row affected (0.01sec)

    mysql> insert into temp_pk values(1,'王五');

    Query OK,1 row affected (0.00sec)

    mysql> insert into temp_pk values(1,'张三');

    ERROR1062 (23000): Duplicate entry '1-张三' for key 'PRIMARY'mysql> select * fromtemp_pk;+----+--------+

    | id | name |

    +----+--------+

    | 1 | 张三 |

    | 1 | 王五 |

    | 2 | 李四 |

    +----+--------+

    3 rows in set (0.00 sec)

    4、foreign key外键约束

    外键约束:

    参照完整性约束,保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。

    注意:

    1)具有外键约束的列的值不能随便给,必须满足外键所引用的主键的取值;

    2)一张表中可以定义多个外键;

    3)外键列默认可以给null值。

    按照定义,外键必须引用一个主键或者唯一键,引用的主键一般在另外一张表中,也可以是本表的主键(后者称为“自引用”)。

    父子表:

    外键所在的表叫做子表、从表

    外键所引用的主键所在的表叫做父表、主表

    注意:父子表是相对而言的,表a可以是表b的子表,但同时也可以是表c的父表

    示例:创建外键约束

    //创建父表mysql>create table dept(-> deptid int,-> dname varchar(20),->constraint dept_deptid_pk primary key(deptid) ->);

    mysql> insert into dept(deptid,dname) values(10,'市场部');

    mysql> insert into dept(deptid,dname) values(20,'销售部');//创建子表(表级别创建外键约束)

    mysql>create table emp(-> id int,-> name varchar(20),-> deptid int,->constraint emp_id_pk primary key(id),->constraint emp_deptid_fk foreign key(deptid)->references dept(deptid)-> );

    查询数据字典,查看外键约束的信息:

    上面创建子表的时候给外键约束命名emp_deptid_fk;

    如果不给外键约束命名,那么默认的名字是表名_ibfk_n, n是整数,从1开始;

    859584c56ca9d82192b62482dd539002.png

    此时,emp表中deptid列(外键约束)受dept主表限制

    mysql> insert into emp(id,name,deptid) values(1,'张三',10);

    Query OK,1 row affected (0.00sec)

    mysql> insert into emp(id,name,deptid) values(2,'李四',10);

    Query OK,1 row affected (0.00sec)

    mysql> insert into emp(id,name,deptid) values(3,'王五',50);  #insert主表deptid列没有的数据

    ERROR1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`emp`, CONSTRAINT `emp_deptid_fk` FOREIGN KEY (`deptid`) REFERENCES `dept` (`deptid`))

    mysql> update emp set deptid=30 where id=1;  #update主表deptid列没有的数据

    ERROR1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`emp`, CONSTRAINT `emp_deptid_fk` FOREIGN KEY (`deptid`) REFERENCES `dept` (`deptid`))

    外键的update更新操作规则如下删除规则……

    mysql> delete from dept where deptid=10;  #delete父表中的行(子表中有引用的数据行)

    ERROR1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`emp`, CONSTRAINT `emp_deptid_fk` FOREIGN KEY (`deptid`) REFERENCES `dept` (`deptid`))

    外键的默认删除规则:

    当删除父表中的行时,如果子表中有依赖于被删除父行的子行存在,那么就不允许删除,并抛出异常(默认对外键使用on delete restrict 或on delete no action选项)

    外键引用定义:

    reference_definition:

    REFERENCES tbl_name (index_col_name,...)

    [MATCH FULL| MATCH PARTIAL |MATCH SIMPLE]

    [ON DELETE reference_option]

    [ON UPDATE reference_option]

    reference_option:

    RESTRICT| CASCADE | SET NULL | NO ACTION

    在定义外键约束时,通过使用on delete cascade或者on delete set null选项,可以改变外键的默认删除规则:

    ①ON DELETE CASCADE:级联删除。当删除父表中的行时,如果子表中有依赖于被删除父行的子行存在,那么连同子行一起删除(很危险!!!)

    ②ON DELETE SET NULL:当删除父表中的行时,如果子表中有依赖于被删除父行的子行存在,那么不删除,而是将子行的外键列设置为null

    ……

    mysql>create table emp(-> id int,-> name varchar(20),-> deptid int,->constraint emp_id_pk primary key(id),->constraint emp_deptid_fk foreign key(deptid)->references dept(deptid) ->on delete cascade->);

    ……

    5、check约束

    MySQL可以使用check约束,但check约束对数据验证没有任何作用。

    Oracle中可以使用check约束,是有相应的作用的。

    mysql>create table test_ck(-> id int check(id>0)->);

    mysql> insert into test_ck values(-100);

    mysql> select * fromtest_ck;+------+

    | id |

    +------+

    | -100 |

    +------+

    The CHECK clause is parsed but ignored by all storage engines。

    定义数据库列时,可以使用ENUM(enumeration,枚举)和SET(集合)类型:变通的实现CHECK约束

    两者的区别是:

    使用ENUM,只能选一个值;

    使用SET,可以选多个值;

    ENUM和SET中的值都必须是字符串类型。

    1、enum枚举类型

    545e8f5d340a5a30421bb3067dd20544.png

    注意:

    在内部存储ENUM值时,MYSQL给ENUM中的每个值一个顺序号码:第一个值的顺序号码是1,第二个值的顺序号码是2,以此类推。当排序或比较ENUM的时候,使用这些顺序号码进行。

    mysql> select * fromstudent order by sex;+----+--------+------+

    | id | name | sex |

    +----+--------+------+

    | 5 | 王五 | NULL |

    | 1 | 张三 | M |

    | 2 | 李四 | F |

    +----+--------+------+

    2、set类型:因为可以列举多个值,所以在建表列约束中常被使用到。

    mysql>create table team(-> teamno int not null,-> division set('north','south','east','west')->);

    mysql> insert into team values(1,'west');

    mysql> insert into team values(2,'west,south');

    mysql> insert into team values(4,null);

    mysql> insert into team values(3,'east,asia');

    ERROR1265 (01000): Data truncated for column 'division' at row 1mysql> select * fromteam;+--------+------------+

    | teamno | division |

    +--------+------------+

    | 1 | west |

    | 2 | south,west |

    | 4 | NULL |

    +--------+------------+

    展开全文
  • “检查约束”是关系型数据库中用户自定义完整性的一种,mysql可以通过enum来约束列的取值范围,如下: 创建了一个数据库test,要在test数据库里创建表ttt: use test; create table ttt( id int auto_increment ...
  • 用户定义完整性约束

    千次阅读 2020-03-31 22:40:15
    用户定义的完整性规则,包括非空约束、自增约束、默认值约束等、check约束以及触发器约束,本次主要学习非空约束、自增约束、默认值约束,check约束以及触发器约束在这里暂时不做介绍。 非空约束(not null): 非空...
  • 用户自定义完整性

    2022-05-12 11:34:48
    用户自定义完整性是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。. 主要包括非空约束、唯一约束、检查约束、主键约束、外键约束。 -- 用户自定义完整性 -- unique -- --...
  • 扩展:mysql中的完整性约束实现,书上讲了三种,实体、参照、用户自定义完整性,其实还有个用户自定的域完整性。 实现方式: 实体完整性 在关系数据库中,一条记录代表一个实体。而实体是可以相互区分、识别的,也...
  • XML之自定义DTD约束

    千次阅读 2018-05-03 23:17:35
    XML之自定义DTD约束1.什么是DTD 文档类型定义(DocumentType Definition,简称DTD)。2.DTD有什么用1)DTD定义了XML文档内容的结构,保证XML以一致的格式存储数据。2)XML允许用户创建自己的DTD约束。3)通过DTD约束...
  • 1.熟悉和掌握数据库的创建和表的方法 2.熟悉和掌握创建三类数据完整性(实体完整性、参照完整性和用户自定义约束 掌握用命令方式管理数据的基本操作
  • 7.5MySQL的约束控制

    2022-04-01 16:28:44
    文章目录数据库的完整性约束(1)实体完整性(2)参照完整性(引用完整性)(3)用户自定义完整性MySQL中常用约束1.主键约束(PRIMARY KEY)(1)单个主键(2)多个主键(3)给已有表添加主键约束(4)删除已有主键约束2.外键约束...
  • navicat表约束怎么弄

    千次阅读 2021-04-19 05:37:14
    数据库中约束分为一下几种●主键约束(Primary Key constraint):要求主键列数据唯一,并且不允许为空。●唯一约束(Unique constraint):要求该列唯一,允许为空,但只能出现一个空值。●检查约束(Check constraint)...
  • MySQL数据库的完整性约束

    千次阅读 2016-12-21 18:01:02
    1.完整性约束1.1 主键(primary key)主键约束相当于not null 和 唯一性约束。创建表时添加主键约束的多种方式 1. create table tmp( num int primary key, name varchar(20), sex char(2));2. create table tmp( ...
  • SQL 用户自定义类型

    2020-07-01 20:52:22
    什么是用户自定义类型呢? 用户定义数据类型并不是真正的数据类型,它只是提供了一-种提高数据库内部元素 和基本数据类 型之间-致性的机制。 语法 drop type 自定义类型名 as table (<列定义>[表约束][,...]...
  • } 打印校验失败的消息: age 不能为null: null childList[0].age 必须是正数: -11 child.age 必须是正数: -1 childList[1].age 必须是正数: -12 约束失败消息message自定义 每个约束定义中都包含有一个用于提示验证...
  • SQL语句(九)用户自定义完整性

    万次阅读 多人点赞 2018-07-20 13:11:42
    1.用户自定义完整性 SQL Server支持的用户自定义完整性主要有NOT NULL(不为空)、UNIQUE(唯一)、NULL(空)、CHECK(检查是否在某一范围之内)。 2.实例 1.定义NULL/NOT NULL约束 CREATE TABLE nation2(/*...
  • SQL之用户自定义函数FUNCTION

    千次阅读 2021-03-27 21:11:09
    用户自定义函数的类型: 1、标量值函数(返回一个标量值) 2、表格值函数(内联表格值函数、多语句表值函数,返回一个结果集即返回多个值) 三种自定函数的异同点 1、同点: 创建定义相同: CREATE FUNCTION F_NAME...
  • 一、用户自定义数据类型 二、使用规则 规则和CHECK约束的比较: 三、解除和删除规则 一、用户自定义数据类型 用户自己设计并实现的数据类型就是用户自定义数据类型。举例:当几个表中要存同种数据类型时,并且...
  • Oracle用户自定义异常

    2020-07-20 12:50:32
    注意:普通的查询语句不会出现异常,只有使用into对变量进行赋值的时候才会发生异常 ...2 --,先自定义一个异常:no_result exception 3 -- if sql%nofund then 4 --excetpion 5 --when no_result th
  • 数据库实验:用户自定义的完整性

    千次阅读 2020-06-21 15:49:00
    掌握用户自定义完整性的定义和维护方法。 2. 实验内容 针对具体应用语义,选择NULL/NOT NULL、DEFAULT、UNIQUE、CHECK等,定义属性上的约束条件。 3. 实验重点和难点 实验重点:NULL/NOT NULL,DEFAULT。 实验...
  • 下面介绍使用T-SQL语句,创建用户自定义数据类型,即使用CREATE TYPE 语句: CREATE TYPE <自定义数据类型名称> FROM <所依据的系统数据类型> NULL/NOT NULL 2、DROP TYPE 语句 删除用户自定义数据...
  • 主要介绍了SQL Function 自定义函数详解,需要的朋友可以参考下
  • 自定义函数,实现约束条件

    千次阅读 2007-02-07 22:05:00
     请大虾帮忙怎样写这个约束语句。   --创建环境 Create Table STUDENT (  学号 varchar(10),  姓名 varchar(10),  年龄 int,  班号 int ) go Create Table CLASS (  班号 int,  专业名 varchar(10)...
  • 所有用户自定义异常也应当派生自此类。 那么就可以通过直接或间接的继承Exception就可以自定义一个异常类,当然也可以间接的继承python内置的异常类。 通常的做法是,先为自己的模块创建一个基类,然后再从此基类...
  • SQL语言之定义约束

    千次阅读 2020-11-11 01:40:07
    用户自定义约束(check) 定义约束的原则 1.在创建表的同时,或者在创建表之后都可以定义约束。 2.可以给约束其名字,但约束名不能相同,必须是唯一的。如果没有为约束起名 字,Oracle服务器将用默认格式SYS_...
  • 4.用户自定义完整性  保证自定义规则 9、实体完整性--主键约束: PRIMARY KEY 主键列不能为空也不能重复,通常加在表的id列中。 CREATE TABLE t_student( student_id INT PRIMARY KEY, student_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,203
精华内容 38,881
关键字:

用户自定义约束