精华内容
下载资源
问答
  • 数据库约束

    千次阅读 2018-07-26 23:14:37
    约束 对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。 约束种类: PRIMARY KEY : 主键 UNIQUE : 唯一 NOT NULL : 非空 DEFAULT : 默认 FOREIGN KEY : 外键 主键 作用 用来唯一...

    约束

        对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。 
    

    约束种类:

    PRIMARY KEY : 主键
    UNIQUE : 唯一
    NOT NULL : 非空
    DEFAULT : 默认
    FOREIGN KEY : 外键

    主键

    作用

    用来唯一标识一条记录,每个表都应该有一个主键,并且每个表只能有一个主键。
    有些记录的 name,age,score 字段的值都一样时,那么就没法区分这些数据,造成数据库的记录不唯一,这样就不方便管理数据
    通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。
    主键 是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。

    创建主键

    主键: PRIMARY KEY
    主键的特点:
    主键必须包含唯一的值
    主键列不能包含NULL值

    创建主键方式:

    1. 在创建表的时候给字段添加主键 字段名 字段类型
      PRIMARY KEY
    2. 在已有表中添加主键
      ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
      3.创建表时,在constraint区域添加约束 –> 最后一个字段
      [constraint 约束名] primary key(列名)

    联合主键

    alter table 表名 add primary key(字段名1,字段名2);
    –> 此时表中也只用一个主键
    –> 多个列共同组成一个主键
    –> 联合主键必须所有列必须完全相同

    具体操作:

    创建表学生表st5, 包含字段(id, name, age)将id做为主键

    CREATE TABLE st5 (
    id INT PRIMARY KEY, ‐‐ id是主键
    NAME VARCHAR(20),
    age INT );

    添加数据

    INSERT INTO st5 (
    id, NAME) VALUES (1, ‘唐伯虎’);
    INSERT INTO st5 (
    id, NAME) VALUES (2, ‘周文宾’);
    INSERT INTO st5 (
    id, NAME) VALUES (3, ‘祝枝山’);
    INSERT INTO st5 (
    id, NAME) VALUES (4, ‘文征明’);

    插入重复的主键值

    ‐‐ 主键是唯一的不能重复:Duplicate entry ‘1’ for key ‘PRIMARY’
    INSERT INTO st5 (id, NAME) VALUES (1, ‘文征明2’);

    插入NULL的主键值

    ‐‐ 主键是不能为空的:Column ‘id’ cannot be null
    INSERT INTO st5 (id, NAME) VALUES (NULL, ‘文征明3’);

    删除主键

    ALTER TABLE 表名 DROP PRIMARY KEY;

    具体操作:

    删除st5表的主键
    ALTER TABLE st5 DROP PRIMARY KEY;

    外键约束

    什么是外键约束

    一张表中的某个字段引用另一个表的主键
    主表: 约束别人
    副表/从表: 使用别人的数据,被别人约束

    创建外键

    1. 新建表时增加外键:

    [CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)

    关键字解释:

    CONSTRAINT – 约束关键字
    FOREIGN KEY(外键字段名) –- 某个字段作为外键
    REFERENCES – 主表名(主键字段名) 表示参照主表中的某个字段

    2. 已有表增加外键:

    ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段 名);

    注意:

    若从表添加的外键数据没有主表主键,则添加失败
    若从表添加外键数据是null,可以添加

    作用:

    保证数据的完整性

    物理外键:

    手动添加的foreign key
    好处:保证数据的完整性
    缺点:限制性强,不灵活

    逻辑外键

    不需手动添加foreign key ,只需让两个表的字段产生逻辑上的关联关系
    好处:灵活
    缺点:在数据库中不能保证数据的完整性

    删除外键(了解)

    ALTER TABLE 从表 drop foreign key 外键名称;
    注意
    若主表数据的主键被从表使用,则无法删除

    具体操作:
    删除employee表的emp_depid_ref_dep_id_fk外键
    ALTER TABLE employee DROP FOREIGN KEY emp_depid_ref_dep_id_fk;
    在employee表情存在况下添加外键
    ALTER TABLE employee ADD CONSTRAINT emp_depid_ref_dep_id_fk FOREIGN KEY(dep_id) REFERENCES department(id);

    其他约束

    自增

    AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

    具体操作:

    创建学生表st6, 包含字段(id, name, age)将id做为主键并自动增长

    CREATE TABLE st6 (
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20),
    age INT);

    插入数据

    ‐‐ 主键默认从1开始自动增长
    INSERT INTO st6 (NAME, age) VALUES (‘唐僧’, 22);
    INSERT INTO st6 (NAME, age) VALUES (‘孙悟空’, 26);
    INSERT INTO st6 (NAME, age) VALUES (‘猪八戒’, 25);
    INSERT INTO st6 (NAME, age) VALUES (‘沙僧’, 20);

    扩展

    默认地AUTO_INCREMENT 的开始值是1
    若期间指定主键的值,其后未指定的话,在新指定的主键基础上自增
    如果希望修改起始值,请使用下列

    SQL语法

    ALTER TABLE 表名 AUTO_INCREMENT=起始值;

    DELETE和TRUNCATE的区别
    DELETE 删除表中的数据,但不重置AUTO_INCREMENT的值。
    TRUNCATE 摧毁表,重建表,AUTO_INCREMENT重置为1

    唯一

    在这张表中这个字段的值不能重复

    唯一约束的基本格式

    1.创建表时

    字段名 字段类型 UNIQUE;
    –> 保证某一列的值唯一,不能重复

    2.创建表时在constraint区域添加

    [constraint 约束名] QNIQUE(列名);

    3.创建表之后

    alter table 表名 add [constraint 约束名] unique (列名)
    删除约束
    alter table 表名 drop index 约束名

    实现唯一约束

    具体步骤:

    创建学生表st7, 包含字段(id, name),name这一列设置唯一约束,不能出现同名的学生
    CREATE TABLE st7 ( id INT, NAME VARCHAR(20) UNIQUE );
    添加一个学生
    INSERT INTO st7 VALUES (1, ‘貂蝉’);
    INSERT INTO st7 VALUES (2, ‘西施’);
    INSERT INTO st7 VALUES (3, ‘王昭君’);
    INSERT INTO st7 VALUES (4, ‘杨玉环’);
    ‐‐ 插入相同的名字出现name重复: Duplicate entry ‘貂蝉’ for key ‘name’
    INSERT INTO st7 VALUES (5, ‘貂蝉’);
    ‐‐ 出现多个null的时候会怎样?因为null是没有值,所以不存在重复的问题
    INSERT INTO st3 VALUES (5, NULL);
    INSERT INTO st3 VALUES (6, NULL);

    唯一和主键的区别

    1.唯一约束可以是null,但主键不能
    2.一个表中可以有多个唯一约束,但主键只能有一个

    非空

    这个字段必须设置值,不能是NULL,但可以是”;

    非空约束的基本语法格式

    1.字段名 字段类型 NOT NULL –> 创建表时
    2.alter table 表名 modify 字段名 数据类型(长度) NOT NULL –> 创建表后

    删除非空约束语法格式

    alter table 表名 modify 字段名 数据类型(长度)
    具体操作:
    创建表学生表st8, 包含字段(id,name,gender)其中name不能为NULL
    CREATE TABLE st8 ( id INT, NAME VARCHAR(20) NOT NULL, gender CHAR(2) );
    添加一条完整的记录
    INSERT INTO st8 VALUES (1, ‘郭富城’, ‘男’);
    INSERT INTO st8 VALUES (2, ‘黎明’, ‘男’);
    INSERT INTO st8 VALUES (3, ‘张学友’, ‘男’);
    INSERT INTO st8 VALUES (4, ‘刘德华’, ‘男’);
    ‐‐ 姓名不赋值出现姓名不能为null: Column ‘name’ cannot be null
    INSERT INTO st8 VALUES (5, NULL, ‘男’);

    默认值

    往表中添加数据时,如果不指定这个字段的数据,就使用默认值

    默认值格式

    字段名 字段类型 DEFAULT 默认值

    具体步骤:

    创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州
    CREATE TABLE st9 ( id INT, NAME VARCHAR(20), address VARCHAR(50) DEFAULT ‘广州’ );
    添加一条记录,使用默认地址
    INSERT INTO st9 (id, NAME) VALUES (1, ‘刘德华’);
    添加一条记录,不使用默认地址
    INSERT INTO st9 VALUES (2, ‘张学友’, ‘香港’);

    疑问:如果一个字段设置了非空与唯一约束,该字段与主键的区别

    一张表中只有一个字段可以设置为主键
    一张表中可以多个字段非空与唯一约束
    主键可以自动增长,非空与唯一约束的字段不能自动增长

    展开全文
  • 数据库约束六大约束语句

    千次阅读 2020-03-21 20:03:15
    数据库约束六大约束语句 1、非空约束 ① 就是给列赋值的时候值不允许为空 name VARCHAR(20) NOT NULL,--创建name列为非空-- 2、主键约束 2.primary key约束 : ①约束唯一标识数据库表中的每条记录 ②主键必须...

    数据库约束六大约束语句

    1、非空约束
    ① 就是给列赋值的时候值不允许为空

    
    name VARCHAR(20) NOT NULL,--创建name列为非空--
    

    2、主键约束

    2.primary key约束 :
    ①约束唯一标识数据库表中的每条记录
    ②主键必须包含唯一的值
    ③主键列不能为空
    ④每个表都应该有个主键,但只能有一个主键

    StudentID int not null primary key        --创建学生编号为主键--
    primary key(Students)                     --创建学生编号为主键--
    primary key(StudentID,Email)              --创建学生ID和Email为联合主键--
    	--为已存在的列创建主键--
    alter table table_name add primary key(column_name)
    	--删除主键约束--
    alter table table_name drop primary key
    	--删除主键约束--
    alter table table_name drop constraint --主键约束名 主键约束名可以使用sp_help查询--
    

    3、唯一值约束

    3.unique 唯一性约束:
    ①约束唯一标识数据库表中的每条记录
    ②unique和primary key都为数据提供了唯一性约束
    ③primary key 拥有自动定义的Unique约束
    ④注意:每个表中只能有一个primary key约束,但是可以有多个Unique约束

    name int unique
    unique(column_name)
    CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)    --添加多个约束--
    alter table table_name add unique(column_name)   --增加表中的约束--
    ALTER TABLE table_name DROP CONSTRAINT 主键名    --删除约束-- 
    

    4、外键约束

    4.foreign key约束:
    ①一个表中的foreign key 指向另一个表的primary key
    ②foreign key约束用于预防破坏表之间连接的动作
    ③foreign key约束也能防止非法数据插入外键列,因为它必须是指向的那个表的值之一

    foreign key (column_name) references 主表名(主键列名)     --创建column_name为主表名的外键--
    column_name int foreign key references 主表名(主键列名)   --创建column_name为主表名的外键--
    alter table table_name 
    	add foreign key (列名) references 主表名(主键列名)         --为已存在的列创建外键--
    alter table table_name drop constraint 外键约束名          --删除外键约束(SQL Server oracle--
    

    5、检查约束
    5.CHECK 约束:
    ①.检查||限制列中输入的值

    sex char(2) CHECK(Ssex='男' or Ssex='女'),					--非男即女--
    StudentID int not null check (StudentID>0) 					--大于0约束--
    Email varchar(50) CHECK(Email LIKE'%@%'),					--必须含有@--
    PID nvarchar(18)  check (len(PID) =15 or len(PID) =18 ),	--身份证号 检查约束 check(len(id)=15 or len(id)=18)--
    alter table table_name 
    	add check(列名>0)         							    --向已有的列加入check约束--
    alter table table_name drop constraint check约束名  			--删除约束--
    

    6、默认值约束
    6.default约束:
    ①.在没有输入值得单元格里插入默认值

    Address varchar(100) default '不详',		-- 地址默认值为不详--
    outtime date default getdate() 				--默认值为当前时间--
    alter table table_name 						--向已有列名中插入默认值-- 
    	add 列名 set default '数值'    
    alter table table_name drop constraint 约束名          --删除默认约束--
    
    展开全文
  • 五大约束  —-主键约束 (Primay Key Constraint) 性,非空性  —-约束 (Unique Constraint) 性,可以空,但只能有一个  —-检查约束 (Check Constraint)) 对该列数据的范围、格式的限制(如:年龄、性别等) ...
  • 数据库约束基本概念

    千次阅读 2020-07-03 12:21:40
    主键是一种特殊的约束,用来保证一列(或一组列)中的值是唯一的,而且永不改动。表中的一列(或多个列)的值唯一标识表中的每一行。 特性 任意两行的主键值都不相同。 每行都具有一个主键值(即列中不允许NULL 值...

    主键

    概念

    主键是一种特殊的约束,用来保证一列(或一组列)中的值是唯一的,而且永不改动。表中的一列(或多个列)的值唯一标识表中的每一行。

    特性

    1. 任意两行的主键值都不相同。
    2. 每行都具有一个主键值(即列中不允许NULL 值)。
    3. 包含主键值的列从不修改或更新。
    4. 主键值不能重用。如果从表中删除某一行,其主键值不分配给新行。

    定义主键

    1. CREATE TABLE user(
      uid INT PRIMARY KEY,
      uname VARCHAR(10),
      address VARCHAR(20)
      )
      给表的vend_id 列定义添加关键字PRIMARY KEY,使其成为主键。
    2. CREATE TABLE user(
      uid INT,
      uname VARCHAR(10),
      address VARCHAR(20),
      PRIMARY KEY(uid)
      )
    3. CREATE TABLE user(
      uid INT,
      uname VARCHAR(10),
      address VARCHAR(20)
      )
      ALTER TABLE user ADD PRIMARY KEY(uid);

    外键

    概念

    外键是表中的一列,其值必须列在另一表的主键中。
    例如:在Orders 的顾客ID 列上定义了一个外键,因此该列只能接受Customers 表的主键值。

    作用

    1. 外键是保证引用完整性的极其重要部分。
    2. 利用外键可以防止意外删除数据。例如,不能删除关联订单的顾客。删除该顾客的唯一方法是首先删除相关的订单(这表示还要删除相关的订单项)。由于需要一系列的删除,所以可防止意外删除数据。

    创建

    1. FOREIGN KEY (vend_id) REFERENCES Vendors (vend_id)
      创建表时直接在大括号中写
    2. ALTER TABLE Orders
      ADD CONSTRAINT
      FOREIGN KEY (cust_id) REFERENCES Customers (cust_id)
    展开全文
  • 数据库约束(5种)

    千次阅读 2018-10-30 22:29:32
    所有的关系数据库都支持对数据表使用约束, 通过约束可以更好地保证数据表里数据的完整性。 约束是表上强制执行的校验规则, 除此之外,当表中数据存在相互依赖性时, 可以保护相关数据不被删除。 约束通常无法修改...

    所有的关系数据库都支持对数据表使用约束,
    通过约束可以更好地保证数据表里数据的完整性。
    约束是表上强制执行的校验规则,
    除此之外,当表中数据存在相互依赖性时,
    可以保护相关数据不被删除。
    约束通常无法修改。

    5种完整性约束:
              1)NOT NULL:       指定某列不能为空
              2)UNIQUE:           指定某列或某几列不能重复
              3)PRIMARY KEY: 指定该列的值可以唯一地标识该条记录
              4)FOREIGN KEY: 指定该行记录从属于主表中的一条记录,主要用于保证参照完整性
              5)CHECK:             指定一个布尔表达式,用于指定对应列的值必须满足该表达式
                                          【mysql不支持check】

    2类约束:
              1)单列约束:
              2)多列约束:

    指定约束的时机:
              1)建表的同时为相应的数据列指定约束
              2)建表后创建,以修改表的方式来增加约束(用alter来修改)

    【大部分约束都可以采用列级约束语法或者表级约束语法】
     


    *NOT NULL约束:

            它只能作为列级约束使用,只能使用列级约束语法定义。                                                                                                                                  SQL中null:                                                                                                                                                                                                                 1)所有数据类型的值都可以是null值,包括 int、float、boolean等                                                                                                   2)与 java 类似,空字符串不等于 null ,0 也不等于 null 

    ----建表时为指定列指定非空约束:

    create table hehe(
        # 建立了非空约束
        hehe_id int not null,
        # Mysql的非空约束不能指定名字
        hehe_name varchar(255) default 'xyz' not null,
        # 下面列可以为空,默认就是可以为空
        hehe_gender varchar(2) null
    );
    

    ----使用alter table 修改表时 增加 / 删除 非空约束:

    # 增加非空约束
    alter table hehe 
    modify hehe_gender varchar(2) not null;
    # 取消非空约束
    alter table hehe
    modify hehe_name varchar(2) null;
    # 取消非空约束,并指定默认值
    alter table hehe
    modify hehe_name varchar(255) default 'abc' null;

     

    *UNIQUE约束:

            唯一约束用于保证指定列或指定列组合不允许出现重复值。                                                                                                               但可以出现多个null值(数据库中null值不等于null值)                                                                                                                       当建立唯一约束时,Mysql在唯一约束所在列或者列组合上建立对应的唯一索引。

    ----列级约束语法建立唯一约束:

    create table unique_test(
        # 建立非空约束,test_id不可以为null
        test_id int not null,
        # unique 就是唯一约束,使用列级语法建立唯一约束
        test_name varchar(255) unique
    );

    ----如果需要为多列组合建立唯一约束,或者想自行制定约束名,则需要使用表级约束语法,                                                                                  [ constraint  约束名 ]  约束定义                                                                                                                                                                                   它既可以放在create table 语句中与列定义并列,                                                                                                                               也可以放在alter table 语句中使用 add 关键字来添加约束

    create table unique_test2(
        test_id int not null,
        test_name varchar(255),
        test_pass varchar(255),
        # 使用表级约束语法建立唯一约束
        unique (test_name),
        constraint test2_uk unique(test_pass)
    );

    ----除此之外,还可以为两列组合建立唯一的约束:

    create table unique_test3(
        test_id int not null,
        test_name varchar(255),
        test_pass varchar(255),
        # 使用表级约束语法建立唯一约束,指定两列组合不允许重复
        constraint test3_uk unique(test_name,test_pass)
    );

    ----修改表结构时使用 add 关键字来增加唯一约束:

    # 增加唯一约束
    alter table unique_test3
    add unique(test_name,test_pass);

    ----修改表时使用 modify 关键字,为单列采用列级约束语法来增加唯一约束:

    # 为unique_test3表中的test_name 列增加唯一约束
    alter table unique_test3
    modify test_name varchar(255) unique;

    ----对于大部分数据库而言,删除约束都是在alter table 语句后使用 “drop constraint 约束名”语法来完成的,                                        但是Mysql并不使用这种方式,                                                                                                                                                          而是使用“drop index 约束名 ” 的方式来删除约束

    # 删除unique_test3 表上的test3_uk 这个唯一约束
    alter table unique_test3
    drop index test3_uk;

     

    *PRIMARY KEY约束:
            主键约束相当于非空约束和唯一约束,即主键约束的列既不允许出现重复值,也不允许出现null值;                                               如果对多列组合建立主键约束,则多列里包含的每一列都不能为空,但只要求这些列组合不能重复(只能使用表级约束语             法);                                                                                                                                                                                                使用表级约束语法建立约束时,可以为该约束指定约束名,                                                                                                                但不管用户是否为该主键约束指定约束名,MySQL总是将所有的 主键约束 命名为PRIMARY ;                                                        主键列的值可用于唯一地标识表中的一条记录;                                                                                                                                   每一个表中最多允许有一个主键 ;                                                                                                                                                        当创建主键约束时,MySQL在主键约束所在列或列组合上建立对应的唯一索引;                                                                            与建立唯一约束不同的是,建立主键约束使用 primary key

    ----建表时创建主键约束,列级语法        

    create table primary_test(
        # 建立了主键约束
        test_id int primary key,
        test_name varchar(255)
    );

    ----建表时创建主键约束,表级语法:

    create table primary_test2(
        test_id int not null,
        test_name varchar(255),
        test_pass varchar(255),
        # 指定主键约束名为test2_pk,对大部分数据库有效,但对Mysql无效
        # Mysql数据库中该主键约束名仍为 PRIMARY
        constraint test2_pk primary key(test_id)
    );

    ----建表时创建主键约束,以多列建立组合主键,只能使用表级约束语法:

    create table primary_test3(
        test_name varchar(255),
        test_pass varchar(255),
        # 建立多列组合的主键约束
        primary key(test_name, test_pass)
    );

    ----删除指定表的主键约束:

    # 删除主键约束
    alter table primary_test3
    drop primary key;

    ----为指定表增加主键约束(2种):

    # 通过 modify 修改列定义,采用列级约束语法
    alter table primary_test3
    modify test_name varchar(255) primary key;
    
    # 通过 add 来增加主键约束,采用表级约束语法
    alter table primary_test3
    add primary key(test_name, test_pass);

    ----很多数据库对主键列都支持一种“ 自增长 ”的特性——(如果某个主键列的类型是整型,则可指定该列具有自增长功能)                              指定自增长功能用于设置逻辑主键列——该列的值没有任何物理意义,仅用来表示每行记录,                                                        MySQL使用auto_increment 来设置自增长 ,                                                                                                                                        一旦指定了某列具有自增长特性,则向该表插入记录时可不为该列指定值,该列的值由数据库系统自动生成                                            

    create table primary_test4(
        # 建立主键约束,使用自增长
        test_id int auto_increment primary key,
        test_name varchar(255),
        test_pass varchar(255)
    );

     

    *FOREIGN KEY约束:

            外键约束主要用于保证一个或两个数据表之间的参照完整性,                                                                                                           外键时构建于一个表的两个字段或者两个表的两个字段之间的关系。                                                                                               外键确保了相关的两个字段的参照关系:字表外键列的值必须在主表被参照的值范围之内 ,                                                           或者为空(也可以通过非空约束来约束外键列不允许为空);                                                                                                             当主表的记录被从表记录参照时,主表记录不允许被删除,                                                                                                               必须先把从表里参照记录的所有记录全部删除后,才可以删除主表的该记录,                                                                                   ——另一种方式,删除主表记录时级联删除从表中所有参照该记录的从表记录;                                                                             从表外键参照的只能是主表的主键列或者唯一键列(可保证从表记录可以准确定位到被参照的主标记录);                                   同一表内可以有多个外键;                                                                                                                                                                 建立外键约束时,MySQL也会为该列建立索引

    ----采用列级约束语法建立外键约束直接使用 references 关键字,references 指定该列参照哪个主表,以及参照主表的哪一列:            但这种列级语法建立的外键约束不会生效,MySQL提供这种列级语法仅仅是为了和标准SQL保持良好的兼容性

    # 为了保证从表参照的主表存在,通常应该先建立主表
    create table teacher_table(
        teacher_id int auto_increment,
        teacher_name varchar(255),
        primary key(teacher_id)
    );
    
    create table student_table(
        # 为本表建立主键约束
        student_id int auto_increment primary key,
        student_name varchar(255),
        # 指定 fk 参照到 teacher_table 的 teacher_id 列
        fk int references teacher_table(teacher_id)
    );

    ----因此,要使MySQL中的外键约束生效,应使用表级约束语法,                                                                                                                          需要使用foreign key 来指定本表的外键列

    # 为了保证从表参照的主表存在,通常应该先建主表
    create table teacher_table1(
        # auto_increment: 代表数据库的自动编号策略,通常用作数据表的逻辑主键
        teacher_id int auto_increment,
        teacher_name varchar(255),
        primary key(teacher_id)
    );
    
    create table student_table1(
        # 为本表建立主键约束
        student_id int auto_increment primary key,
        student_name varchar(255),
        # 指定 java_teacher 参照到 teacher_table1 的 teacher_id列
        java_teacher int,
        foreign key(java_teacher) references teacher_table1(teacher_id)
    );

    ----为外键约束指定约束名:                                                                                                                                                                                     如果创建外键约束时没有指定约束名,则MySQL会为该外键约束命名为 从表表名_ibfk_n , (n是从1开始的整数)                         如果需要显式指定外键约束的名字,用 constraint 关键字                                                                                                                              

    create table teacher_table2(
        teacher_id int auto_increment,
        teacher_name varchar(255),
        primary key(teacher_id)
    );
    
    create table student_table2(
        student_id int auto_increment primary key,
        student_name varchar(255),
        java_teacher int,
        # 使用表级约束语法建立外键约束,指定外键约束的约束名为student_teacher_fk
        constraint student_teacher_fk foreign key(java_teacher) references
        teacher_table2(teacher_id);
    );

    ----建立多列组合的外键约束,则必须使用表级约束语法:

    create table teacher_table3(
        teacher_name varchar(255),
        teacher_pass varchar(255),
        # 以两列建立组合主键
        primary key(teacher_name,teacher_pass)
    );
    
    create table student_table3(
        # 为本表建立主键约束
        student_id int auto_increment primary key,
        student_name varchar(255),
        java_teacher_name varchar(255),
        java_teacher_pass varchar(255),
        # 使用表级约束语法建立外键约束,指定两列的联合外键
        foreign key(java_teacher_name,java_teacher_pass) references
        teacher_table3(teacher_name,teacher_pass)
    );

    ----增加外键约束通常使用add foreign key 命令:

    # 修改 student_table3 的数据表,增加外键约束
    alter table student_table3
    add foreign key(java_teacher_name,java_teacher_pass)
    references teacher_table3(teacher_name,teacher_pass);

    ----删除外键约束,在 alter table 后增加 “drop foreign key 约束名” 即可:                                                  

    # 删除 student_table3 表上名为 student_table3_ibfk_1 的外键约束
    alter table student_table3
    drop foreign key student_table3_ibfk_1;

    ----外键约束不仅可以参照其他表,而且可以参照自身,这种情况称为 “ 自连接 ”:

    # 使用表级约束语法建立外键约束,且直接参照自身
    create table foreign_self(
        foreign_id int auto_increment primary key,
        foreign_name varchar(255),
        # 使用该表的 refer_id 参照到本表的 foreign_id 列
        foreign key(refer_id) references foreign_self(foreign_id)
    );

    ----如果想定义删除主表记录时,从表记录也会随之删除:                                                                                                                                  1)需要在建立外键约束后添加 on delete cascade (删除主表记录时,把参照主表记录的从表记录全部级联删除)                      2)余姚在建立外键约束后添加 on delete set null   (删除主表记录时,把参照该主表记录的外键设为 null )

    # 为了保证从表参照的主表存在,先建立主表
    create table teacher_table4(
        teacher_id int auto_increment,
        teacher_name varchar(255),
        primary key(teacher_id)
    );
    
    create table student_table4(
        student_id int auto_increment primary key,
        student_name varchar(255),
        java_teacher int,
        # 使用表级约束语法建立外键约束,定义级联删除
        foreign key(java_teacher) references teacher_table4(teacher_id)
        on delete cascade # 第二种:on delete set null
    );

     

    *CHECK约束:

           enum(条件)    --- gender enum('f','m')


           check(条件)    --- check(gender in('f','m'))--mysql的check约束                                                                                                                                        当前版本的MySQL支持建表时指定CHECK约束,但这个CHECK约束不会有任何作用;                                                                  建立CHECK约束的语法:只要在建表的列定义后增加check(逻辑表达式)即可

    create table check_test(
        emp_id int auto_increment,
        emp_name varchar(255),
        emp_salary decimal,
        primary key(emp_id),
        # 建立 CHECK 约束
        check(emp_salary > 0)
    );

     

    展开全文
  • MYSQL--数据库约束

    千次阅读 2021-04-05 19:14:50
    数据库约束1.1约束类型1.2 null约束1.3 unique:唯一约束条件1.5 primary key 1.数据库约束 1.1约束类型 not null: 指示某列不能存储null值; unique: 保证某列的每行必须有唯一的值; default: 1.2 null约束 创建...
  • rein, 使ActiveRecord易于使用的数据库约束 数据完整性问题是一件好事。 在数据库级别,而不是应用程序级别,约束应用程序允许的值,是确保数据保持正常的一种更加可靠的方法。然而,ActiveRecord不鼓励( 甚至允许) ...
  • 数据库约束的介绍, 写的很清楚。。。。。。。。。。。。。内部资料
  • Rein: 让ActiveRecord支持数据库约束
  • SQLite数据库约束详解

    千次阅读 2016-01-06 16:54:53
    在SQLite数据库中存储数据的时候,有一些数据有明显的约束条件。 比如一所学校关于教师的数据表,其中的字段列可能有如下约束: 年龄 - 至少大于20岁。如果你想录入一个小于20岁的教师,系统会报错. 国籍 - ...
  • oracle 数据库约束笔记

    2013-08-12 12:49:45
    oracle 数据库约束笔记oracle 数据库约束笔记
  • 数据库表的约束条件

    千次阅读 2020-08-16 20:54:35
    1.主键约束 主键约束可以用两种方式定义:列级主键约束和表级主键约束 列级主键约束演示: create table dept_htlwk( deptno varchar(20) primary key, --列级约束条件 dname varchar(20), location varchar(40) );...
  • [亲测]Oracle数据库约束

    千次阅读 2019-01-08 20:25:34
    一、Oracle数据库约束 (一)约束的概念作用 约束是可以更好的保证数据库数据的完整性和一致性的一套机制。 约束可以限制加入表的数据的类型。 如果存在依赖关系,约束可以防止错误的删除数据,也可以级联删除数据...
  • 数据库中的五种约束

    万次阅读 多人点赞 2018-11-14 09:51:38
    数据库中的五种约束 #五大约束  1、主键约束(Primay Key Coustraint) 唯一性,非空性  2、唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个  3、检查约束 (Check Counstraint)对该列数据的范围...
  • 1.主键约束:要对一个列加主键约束的话,这列就必须要满足的条件就是分空因为主键约束:就是对一个列进行了约束约束为(非空、不重复)以下是代码 要对一个列加主键,列名为id,表名为emp 格式为:alter table ...
  • SQL的六种约束——数据库约束

    千次阅读 2018-12-26 19:51:54
    /*数据库约束*/ /*1.not null 非空约束  ①强制列不接受空值  ②例:创建表时,name varchar(6) not null,2.unique 唯一性约束  ①约束唯一标识数据库表中的每条记录  ②unique和primary key都为数据提供了...
  • 数据库中默认约束的作用

    千次阅读 2021-01-19 13:31:40
    匿名用户1级2016-04-29 回答数据库约束是为了保证数据的完整性而实现的一套机制,它具体的根据各个不同的数据库的实现而有不同的工具。一般来说有以下几种实现方式:1、检查约束:通过在定义数据库表里,在字段级...
  • 数据库约束

    2020-12-14 09:15:18
    ##你还看不懂数据库约束吗? 数据库约束 1.主键约束–primary key 声明了主键约束的列上不允许插入重复的值(一个表中只能有一个主键约束) 一般将主键约束设置给编号,特点:主键约束会自动由小到大自动排序 #...
  • 达梦数据库约束操作

    千次阅读 2020-08-21 23:48:03
    达梦数据库约束常用的有主键约束、外键约束、唯一约束,还有些不常用的检查约束、非空约束等等。 1、创建主键约束 我们先来用test1用户创建一个tab1表来测试,同时创建id create table tab1 (id int primary key, ...
  • 数据库中的常见约束类型

    千次阅读 2020-06-17 22:45:20
    一般分为五大约束: 主键约束(Primary Key ...默认约束(Default constraint):某列的默认值,如在数据库里有一项数据很多重复,可以设为默认值。 外键约束(Foreign Key constraint):用于在两个表之间建立关系,需
  • 关于oracleserver ,数据库约束和视图的演示,附截图演示
  • 数据库里面,为了保证数据的有效和一致,通常都会在不同的表之间建立外键约束。这样虽然达到保证一致性的要求,但是如果需要清理数据或者初始化数据就会遇到麻烦,不根据表的外键约束得出表的主从关系当然不能随便...
  • 约束 * 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。 * 分类: 1. 主键约束:primary key 2. 非空约束:not null 3. 唯一约束:unique 4. 外键约束:foreign key * 非空约束:not ...
  • oracle电子文档:数据库约束.rar
  • 数据库五种约束以及添加方法

    万次阅读 多人点赞 2017-11-16 09:45:23
    五大约束 1. 主键约束primay key Constraint:唯一性 非空性 2. 唯一约束Unique Constraint:唯一性 可以空 但只能有一个 3. 检查约束 Check Constraint:对该列数据的范围、格式的限制 4. 默认约束 Default ...
  • MySQL数据库约束

    万次阅读 多人点赞 2018-01-16 14:48:27
    为了防止往数据表中插入错误的数据,在MySQL中,定义了一些维护数据库完整性的规则,即表的约束。 常见的表的约束:    上表中列举的约束条件都是针对表中字段进行限制, 从而保证数据表中数据的正确性和...
  • 数据库常见六大约束详解

    千次阅读 2021-01-18 21:52:26
    数据库中的约束,顾名思义即是对插入数据库中的数据进行限定,这么做的目的是为了保证数据的有效性和完整性。这样就大幅度地提高了数据库中数据的质量,节省了数据库的空间和调用数据的时间。数据库常见六大约束如下...
  • 本文主要向大家介绍了MySQL数据库通过sql语句添加约束和查看约束,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。一:添加约束1.添加唯一约束:altertablestudentaddconstraintuk_nameunique(name)...
  • 数据库如何添加约束

    千次阅读 2020-06-15 20:04:11
    --主键约束 外键约束 unique约束(唯一约束) check约束 default约束 create table DemoTable--创建表 ( Id int identity(1,1) primary key not null,--设置主键约束 DemoNo varchar(50) unique not null,--设置...
  • 数据库中的约束条件

    千次阅读 2019-01-14 16:36:46
    数据库约束 数据库约束是为了保证数据的完整性而实现的一套机制,根据不同数据库的实现而有不同的工具。 1、检查约束: 在定义数据表的时候,在字段级或者表级加入检查约束,使其满足特定的要求。 CRATE TABLE ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 339,084
精华内容 135,633
关键字:

数据库约束

友情链接: comtool.zip