精华内容
下载资源
问答
  • mysql五种外键约束的含义

    千次阅读 2016-01-30 10:28:45
    子表为含有引用其他表字段的表父表上进行update/delete以更新或删除子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:定义子表的外键时指定的on update/on delete子句, InnoDB支持5方式, 分列...

    本文中父表为被引用表, 子表为含有引用其他表字段的表

    在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句, InnoDB支持5种方式, 分列如下

    cascade方式

    在父表上update/delete记录时,同步update/delete掉子表的匹配记录
    On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用

    set null方式

    在父表上update/delete记录时,将子表上匹配记录的列设为null
    要注意子表的外键列不能为not null
    On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用

    No action方式

    如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
    这个是ANSI SQL-92标准,从mysql4.0.8开始支持

    Restrict方式

    同no action, 都是立即检查外键约束

    Set default方式

    解析器认识这个action,但Innodb不能识别,不知道是什么意思...

    注意:trigger不会受外键cascade行为的影响,即不会解发trigger

    展开全文
  • 在mysql中有五种约束: 主键 为了快速查找表中的某条信息,可以通过设置主键来实现。主键约束是通过PRIMATY KEY 定义的,它可以唯一标识表中的记录 在 mysql中,主键约束分为两种 注意:每个数据表中最多只能有一个...
  • 数据库五种约束及其添加方法

    千次阅读 2016-07-13 16:19:17
    不知道在mysql中支不支持检查性约束???? 数据库中的五种约束及其添加方法 五大约束 1.----主键约束(Primay Key Coustraint) 唯一性,非空性 2.----唯一约束 (Unique Counstraint)唯一性,可以空,但...

    不知道在mysql中支不支持检查性约束????

    数据库中的五种约束及其添加方法

    五大约束
    1.----主键约束(Primay Key Coustraint) 唯一性,非空性
    2.----唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
    3.----检查约束 (Check Counstraint) 对该列数据的范围、格式的限制
    (如:年龄、性别等)
    4.----默认约束 (Default Counstraint) 该数据的默认值
    5.----外键约束 (Foreign Key Counstraint) 需要建立两表间的关系
    并引用主表的列
    五大约束的语法示例
    1.----添加主键约束(将stuNo作为主键)

    alter table stuInfo
    add constraint PK_stuNo primary key (stuNo)
    2.----添加唯一约束(身份证号唯一,因为每个人的都不一样)

    alter table stuInfo
    add constraint UQ_stuID unique(stuID)
    3.----添加默认约束(如果地址不填 默认为“地址不详”)

    alter table stuInfo
    add constraint DF_stuAddress default ('地址不详') for stuAddress
    4.----添加检查约束 (对年龄加以限定 15-40岁之间)

    alter table stuInfo
    add constraint CK_stuAge check (stuAge between 15 and 40)

    alter table stuInfo
    add constraint CK_stuSex check (stuSex='男' or stuSex='女')

    5.----添加外键约束 (主表stuInfo和从表stuMarks建立关系,关联字段stuNo)

    alter table stuInfo
    add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)

    约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。

    1 主关键字约束
    主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。
    定义主关键字约束的语法如下:
    CONSTRAINT constraint_name
    PRIMARY KEY [CLUSTERED | NONCLUSTERED]
    (column_name1[, column_name2,…,column_name16])
    各参数说明如下:


    constraint_name
    指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。 
    CLUSTERED | NONCLUSTERED
    指定索引类别,CLUSTERED 为缺省值。其具体信息请参见下一章。 
    column_name
    指定组成主关键字的列名。主关键字最多由16 个列组成。

    例7-3: 创建一个产品信息表,以产品编号和名称为主关键字
    create table products (
    p_id char(8) not null,
    p_name char(10) not null ,
    price money default 0.01 ,
    quantity smallint null ,
    constraint pk_p_id primary key (p_id, p_name)
    ) on [primary] 

    2 外关键字约束
    外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定义为 TEXT 或IMAGE 数据类型的列创建外关键字。外关键字最多由16 个列组成。
    定义外关键字约束的语法如下:
    CONSTRAINT constraint_name
    FOREIGN KEY (column_name1[, column_name2,…,column_name16])
    REFERENCES ref_table [ (ref_column1[,ref_column2,…, ref_column16] )]
    [ ON DELETE { CASCADE | NO ACTION } ]
    [ ON UPDATE { CASCADE | NO ACTION } ] ]
    [ NOT FOR REPLICATION ]
    各参数说明如下: 

    REFERENCES
    指定要建立关联的表的信息。 
    ref_table
    指定要建立关联的表的名称。 
    ref_column
    指定要建立关联的表中的相关列的名称。 
    ON DELETE {CASCADE | NO ACTION}
    指定在删除表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在删除父表数据行时会将子表中对应的数据行删除;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的删除操作回滚。NO ACTION 是缺省值。 
    ON UPDATE {CASCADE | NO ACTION}
    指定在更新表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在更新父表数据行时会将子表中对应的数据行更新;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的更新操作回滚。NO ACTION 是缺省值。 
    NOT FOR REPLICATION
    指定列的外关键字约束在把从其它表中复制的数据插入到表中时不发生作用。
    例7-4:创建一个订货表,与前面创建的产品表相关联
    create table   orders(
    order_id char(8),
    p_id char(8),
    p_name char(10) ,
    constraint pk_order_id primary key (order_id) ,
    foreign key(p_id, p_name) references products(p_id, p_name)
    ) on [primary]
    注意:临时表不能指定外关键字约束。


    惟一性约束
    惟一性约束指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的值。惟一性约束指定的列可以有NULL 属性。由于主关键字值是具有惟一性的,因此主关键字列不能再设定惟一性约束。惟一性约束最多由16 个列组成。
    定义惟一性约束的语法如下:
    CONSTRAINT constraint_name
    UNIQUE [CLUSTERED | NONCLUSTERED]
    (column_name1[, column_name2,…,column_name16])

    例7-5:定义一个员工信息表,其中员工的身份证号具有惟一性。 
    create table employees (
    emp_id char(8),
    emp_name char(10) ,
    emp_cardid char(18),
    constraint pk_emp_id primary key (emp_id),
    constraint uk_emp_cardid unique (emp_cardid)
    ) on [primary]

    7.2.4 检查约束
    检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。可以对每个列设置符合检查。
    定义检查约束的语法如下:
    CONSTRAINT constraint_name
    CHECK [NOT FOR REPLICATION]
    (logical_expression)
    各参数说明如下:
    NOT FOR REPLICATION
    指定检查约束在把从其它表中复制的数据插入到表中时不发生作用。
    logical_expression
    指定逻辑条件表达式返回值为TRUE 或FALSE。
    例7-6: 创建一个订货表其中定货量必须不小于10。
    create table   orders(
    order_id char(8),
    p_id char(8),
    p_name char(10) ,
    quantity smallint,
    constraint pk_order_id primary key (order_id),
    constraint chk_quantity check (quantity>=10) ,
    ) on [primary]
    注意:对计算列不能作除检查约束外的任何约束。

    7.2.5 缺省约束
    缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。SQL Server 推荐使用缺省约束,而不使用定义缺省值的方式来指定列的缺省值。有关绑定缺省约束的方法请参见“数据完整性”章节。
    定义缺省约束的语法如下:
    CONSTRAINT constraint_name
    DEFAULT constant_expression [FOR column_name]
    例7-7:
    constraint de_order_quantity default 100 for   order_quantity
    注意:不能在创建表时定义缺省约束,只能向已经创建好的表中添加缺省约束。


    7.2.6 列约束和表约束
    对于数据库来说,约束又分为列约束(Column Constraint)和表约束(Table Constraint)。
    列约束作为列定义的一部分只作用于此列本身。表约束作为表定义的一部分,可以作用于
    多个列。
    下面举例说明列约束与表约束的区别。
    例7-8:
    create table products (
    p_id char(8) ,
    p_name char(10) ,
    price money default 0.01 ,
    quantity smallint check (quantity>=10) , /* 列约束 */
    constraint pk_p_id primary key (p_id, p_name) /* 表约束 */
    展开全文
  • 一、约束 约束是表中定义的用于维护数据库完整性的一些规则。通过为表中的列定义约束...数据库中有五种约束来保证数据的有效性和可靠性 主键约束(PK) 唯一约束(UQ) 默认约束(DF) 外键约束(FK) 检查约束(CK)(...

    一、约束

    约束在表中定义的用于维护数据库完整性的一些规则通过为表中的列定义约束可以防止将错误的数据插入表中,也可以保持表之间数据的一致性。若某个约束条件只作用于单独的列,可以将其定义为列约束也可定义为表约束;若某个约束条件作用域多个列,则必须定义为表约束。在数据库中有五种约束来保证数据的有效性可靠性

    1. 主键约束(PK)
    2. 唯一约束(UQ)
    3. 默认约束(DF)
    4. 外键约束(FK)
    5. 检查约束(CK)(mysql中无效

    1、主键约束(PK)

    表中经常有一个列或多列的组合,其值能唯一标识表中的每一行,这样的一列或多列称为表的主键,也称作主键约束。主键约束最显著的特征是主键列中的不允许重复的,通过主键约束可强制表的实体唯一性
    主键约束语法结构:

    ALTER TABLE tab_name ADD CONSTRAINT pk_name PRIMARY KEY (col_name); 
    
    • 注意:
    1. 主键约束的列不允许有重复的值
    2. 主键约束的列不允许有NULL值
    ALTER TABLE dept ADD CONSTRAINT pk_dept_deptno PRIMARY KEY (deptno);
    
    • 自增长列
      并不是所有的表在设计完成后都能找到适合作为主键的列,为此数据库提供了自增长列,自增长列是int类型的,其值是由数据库自动维护的,是永远都不会重复的,因此自增长列是最适合作为主键列的。在创建表时,通过auto_increment关键字来标识自增长列,在MySQL数据库中自增长列必须是主键列
    CREATE TABLE emp (
    	empNo INT PRIMARY KEY AUTO_INCREMENT,
    	ename VARCHAR (10),
    	job VARCHAR (10),
    	mgr INT,
    	hirdate DATETIME,
    	sal DOUBLE,
    	comm DOUBLE,
    	deptno INT
    );
    

    2、唯一约束(UQ)

    主键约束实现了主键列中的具有唯一性。如果对非主键列中的值也要求具有唯一性时,就需要使用唯一约束(UNIQUE)。例如:学生表中学号设置为主键,那么学生的身份证号就需要设置为唯一约束

    • 唯一约束语法结构:
     ALTER TABLE tab_name ADD CONSTRAINT UNIQUE(col_name);
    
    • 注意:
      1.唯一约束的列不允许有重复的值
      2.唯一约束的列允许有一个NULL值
    ATABLE dept ADD CONSTRAINT UNIQUE (dname);  
    
    • 建表时也可以指定唯一约束
    CREATE TABLE dept (
    	deptno INT,
    	dname VARCHAR (14) UNIQUE,
    	loc VARCHAR (13)
    );
    

    3、默认约束(DF)

    默认约束DEFAULT)是为列中的值设置默认值,当使用INSERT语句添加记录时,如果列没有指定值,那么该列就使用默认值,如果列已经指定了值,那么默认值就无效了。

    • 默认值语法结构:
    ALTER TABLE tab_name CHANGE COLUMN old_col_name new_col_name new_datatype DEFAULT value;
    

    实例:

    ALTER TABLE emp CHANGE COLUMN comm comm DOUBLE DEFAULT 500;
    

    4、外键约束(FK)

    在关系型数据库中,表与表之间存在三种关系,分别是1对1(1:1)1对多(1:M)多对多(M:N)

    1. 1对1是指第一张表的一条记录仅与第二张表的一条记录应,例如丈夫和妻子是1对1的关系。
    2. 1对多是指第一张表的一条记录与第二张表的多条记录相对应,例如一个班级有多个学生。
    3. 多对多是指第一张表的多条记录与第二张表的多条记录相对应,例如超市有多种商品,有多个顾客,商品与顾客之间是多对多的关系。
    • 公司数据库中录入的部门信息和员工信息存在如下关系:公司的一个部门中可能存在多个员工,公司的一个员工只能属于一个部门。也就是说公司的部门和员工是一对多的关系(一个部门有多个员工),这样的关系在数据的表中怎么体现?
      我们通过给员工表增加一个部门编号字段,来说明某个员工属于某个部门。
      emp表中的deptno列的值来自于dept表的deptno列,可以看出宋江是人事部的员工。
      表中的列也称作,我们将表中列的值来自于另外一张表的主键或唯一键的列称为外键foreign key 简称FK),将被引用值的表称为主表父表,将引用值的表称为从表子表。但是这样的关系只是开发人员自己定义的业务规则,数据库并不知道emp表的deptno列与dept表的deptno列是主外键关系。为了让数据库知道emp表与dept表的主外键关系,就必须在子表emp上创建外键约束,通过外键约束告诉数据库emp表与dept表具有主外键关系
    • 外键约束的语法规则:
    ALTER TABLE tab_name ADD CONSTRAINT FOREIGN KEY fk_name (col_name) REFERENCE re_tab_name(re_col_name);
    

    实例:

    ALTER TABLE emp ADD CONSTRAINT FOREIGN KEY fk_dept_emp_deptno (deptno) REFERENCES dept (deptno);
    

    设置了外键约束后,对emp表添加数据时,外键约束会验证 emp表新增记录的deptno列的值在dept表的deptno列中是否存在,若存在可以添加emp表记录,否则不允许添加emp表记录。设置了外键约束后,在删除dept表中的记录时,外键约束会验证 emp表中是否有deptno列的值与dept表中被删除行的deptno列的值相同,如果有,说明主表被删除的数据正在被子表引用,因此不允许删除。

    • 在关系表中需要注意
    1. 添加记录时,先添主表记录,再添加子表记录。
    2. 删除记录时,先删除子表记录,再删除主表记录。
    3. 主表被子表引用的键必须是主键唯一键

    5、检查约束(CK)(mysql中无效)

    检查约束CHECK)用于检查列中的值是否符号要求。例如考试成绩的值介于0-100之间,性别的值只能是男或女等等。

    • 检查约束的语法规则:
    ALTER TABLE tab_name 	ADD CONSTRAINT ck_name CHECK (col_name-condition);
    
    • 实例:
    ALTER TABLE emp ADD CONSTRAINT ck_sal CHECK (sal >= 0);
    

    二、高级查询

    1、查询所有列

    • 语法结构:
    SELECT * FROM tab_name;
    
    • 实例:
    SELECT
    	*
    FROM
    	dept;
    

    2、查询指定列

    • 语法结构:
    SELECT col_name1 , col_name2, ... FROM tab_name;
    
    • 实例:
    SELECT
    	ename,
    	sal,
    	comm
    FROM
    	emp;
    

    3、去掉重复值

    • 语法结构:
    SELECT DISTINCT col_name FROM tab_name;
    
    • 实例:
    SELECT DISTINCT
    	sal
    FROM
    	emp;
    

    4、查询语句中使用算数表达式

    SELECT
    	ename,
    	comm + 500
    FROM
    	emp;
    

    5、查询语句中使用列的别名

    • 语法结构:
    SELECT col_name AS alias_name, col_name2 alias_name2... FROM tab_name;
    
    • 实例:
      SELECT
    ename AS '姓名',
    	comm + 500 '预期奖金'
    FROM
    	emp;
    

    6、条件查询where子句

    6.1、比较运算符

    • Where子句中可以使用的比较运算符包括 >>=<<=<>
    SELECT
    	*
    FROM
    	emp
    WHERE
    	sal < 3000;
    

    6.2、逻辑运算符

    • 逻辑运算包含 andornot三种运算。
    SELECT
    	*
    FROM
    	emp
    WHERE
    	sal > 4000
    AND comm > 4000;
    

    7、BETWEEN…AND

    • Between and表示在两者之间,例如between 60 and 100相当于 >=60 and <=100
    • 实例:
    SELECT
    	*
    FROM
    	emp
    WHERE
    	comm BETWEEN 1000
    AND 5000;
    

    8、in查询

    • in 用于没有规律的范围查询。相当于多个or的组合。例如 id in(1,4,7)相当于id=1 or id=4 or id=7
    SELECT
    	*
    FROM
    	emp
    WHERE
    	job IN (
    		'项目经理',
    		'项目组长'
    	);
    

    9、模糊查询like

    • 模糊查询使用通配符%_实现,%表示任个任意字符,_表示任意一个字符。
    SELECT
    	*
    FROM
    	emp
    WHERE
    	ename LIKE '卢_';
    
    SELECT
    	*
    FROM
    	emp
    WHERE
    	ename LIKE '卢%';
    

    10、NULL值查询

    • NULL在数据库中表示没有数据,应使用is来判断列中是否存在NULL
    SELECT
    	*
    FROM
    	emp
    WHERE
    	mgr IS NULL;		//判断是否为空
    
    SELECT
    	*
    FROM
    	emp
    WHERE
    	mgr IS NOT NULL;	//判断不为空
    

    11、排序order by子句

    • Order by 子句用于排序,升序需指定ASC,降序需指定DESC,默认是ASC
    SELECT
    	*
    FROM
    	emp
    ORDER BY
    	sal DESC,
    	comm ASC;
    

    12、聚合函数查询

    • 聚合就是将多个数据聚合成一个数据,聚合是通过聚合函数实现的,聚合函数有summaxminavgcount共五个。
    SELECT
    	MAX(sal) 最高工资,
    	MIN(sal) 最低工资,
    	AVG(sal) 平均工资,
    	SUM(sal) 总工资,
    	COUNT(*) 公司总人数
    FROM
    	emp;
    

    13、分组查询group by子句

    • 分组是按照指定的列,将列中相同的值分为一组,一组用一条记录来表示。分组后,可以对每组中的数据进行聚合查询
    SELECT
    	deptno 部门编号,
    	COUNT(*) 人数
    FROM
    	emp
    GROUP BY
    	deptno;
    

    14、分组后筛选having子句

    • Having子句是对分组后,每组中的数据进行筛选。相对于where子句是在分组前进行的筛选having子句是在分组后进行的筛选
    • 实例:
    SELECT
    	deptno 部门编号,
    	COUNT(*) 人数
    FROM
    	emp
    GROUP BY
    	deptno
    HAVING
    	人数 > 3;
    
    展开全文
  • 含义:一限制,用于限制表中的数据,为了保证表中...5.CHECK:检查约束MySQL中不支持】 FOREIGN KEY: 外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,从表添加外键约束,用于引用.

    含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性
    分类:六大约束

    1. NOT NULL:非空约束,用于保证该字段的值不能为空
    2. DEFAULT:默认约束,用于保证该字段有默认值
    3. PRIMARY KEY:主键约束,用于保证该字段的值具有唯一性,并且非空
    4. UNIQUE:唯一约束,用于保证该字段的值具有唯一性,可以为空(如果是null,则可以为多个)
    5. CHECK:检查约束【MySQL中不支持】
    6. FOREIGN KEY: 外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值

    添加约束的时机:

    1. 创建表时
    2. 修改表时

    约束的添加分类

    1. 列级约束:六大约束语法上都支持,但外键约束没有效果
    2. 表级约束:除了非空、默认,其他的都支持
    位置 支持的约束类型 是否可以起约束名
    列级约束 列的后面 六大约束语法上都支持,但外键约束没有效果 不可以
    表级约束 所有列的下面 除了非空、默认,其他的都支持 可以但对主键没有效果(constraint)

    主键和唯一对比

    保证唯一性 是否允许为空 一个表中可以由多少个 是否允许组合
    主键 至多1个 是(组合主键)
    唯一 可以由多个

    外键的特点:

    1. 要求在从表设置外键关系
    2. 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无所谓
    3. 主表的关联列必须是一个key(一般是主键或唯一)
    4. 插入数据时,先插入主表,在插入从表
    5. 删除数据时,先删除从表的,在删除主表的

    一、创建表时添加列级约束

    语法:
    直接在字段名和类型后面添加约束类型即可(可以添加多个约束类型,用空格隔开即可)

    例子:创建一个表
    CREATE TABLE stuinfo(
    	id INT PRIMARY KEY,#主键
    	stuName VARCHAR(20) NOT NULL,#非空
    	gender CHAR(1) CHECK(gender = '男' OR gender = '女'),#检查
    	seat INT UNIQUE,#唯一
    	age INT DEFAULT 18,#默认
    	majorId INT FOREIGN KEY REFERENCES major(id)#外键
    );
    
    CREATE TABLE major(
    	id INT PRIMARY KEY,
    	majorName VARCHAR(20)
    )

    二、创建表时添加表级约束

    语法:
    在各个字段的最下面
    constraint 约束名 约束类型(字段名)

    CREATE TABLE stuinfo2(
    	id INT,
    	stuName VARCHAR(20),
    	gender CHAR(1),
    	seat INT,
    	age INT,
    	majorId INT,
    	CONSTRAINT pk PRIMARY KEY(id),#主键
    	CONSTRAINT uq UNIQUE(seat),#唯一
    	CONSTRAINT ck CHECK(gender = '男' OR gender = '女'),#检查
    	CONSTRAINT fk_stuuinfo2_major FOREIGN KEY(majorId) REFERENCES major(id)#外键
    );
    
    不起约束名
    CREATE TABLE stuinfo3(
    	id INT,
    	stuName VARCHAR(20),
    	gender CHAR(1),
    	seat INT,
    	age INT,
    	majorId INT,
    	PRIMARY KEY(id),#主键
    	UNIQUE(seat),#唯一
    	CHECK(gender = '男' OR gender = '女'),#检查
    	FOREIGN KEY(majorId) REFERENCES major(id)#外键
    );
    
    

    三、什么时候使用列级约束或表级约束

    通用的写法:外键约束使用表级约束,其他五大约束使用列级约束
    CREATE TABLE stuinfo4(
    	id INT PRIMARY KEY,
    	stuName VARCHAR(20) NOT NULL,
    	gender CHAR(1) CHECK(gender = '男' OR gender = '女'),
    	seat INT UNIQUE,
    	age INT DEFAULT 18,
    	majorId INT,
    	CONSTRAINT fk_stuuinfo4_major FOREIGN KEY(majorId) REFERENCES major(id)#外键
    );
    联合主键
    CREATE TABLE stuinfo4(
    	id INT ,
    	stuName VARCHAR(20) NOT NULL,
    	gender CHAR(1) CHECK(gender = '男' OR gender = '女'),
    	seat INT UNIQUE,
    	age INT DEFAULT 18,
    	majorId INT,
    	CONSTRAINT fk_stuuinfo4_major FOREIGN KEY(majorId) REFERENCES major(id)#外键
    	PRIMARY KEY(id,stuName)#这里id和sutName两个字段构成一个主键
    );
    

    四、修改表时添加或删除约束

    语法:
    
    1. 添加约束
    ① 添加列级约束
    ALTER TABLE 表名 MODIFY COLUMN 列名 数值类型 新约束;
    ② 添加表级约束
    ALTER TABLE 表名 ADDCONSTRAINT 约束名】 约束类型(字段名)【外键的引用】
    
    2.删除约束 
    ALTER TABLE 表名 MODIFY COLUMN 列名 数值类型;
    ALTER TABLE 表名 MODIFY COLUMN 列名 数值类型 NULLALTER TABLE 表名 DROP 约束类型 字段名(主键的字段名可不写)
    注意:删除主键得使用drop
    

    注意,
    添加主键约束有两种方式

    1. ALTER TABLE 表名 MODIFY COLUMN 列名 数值类型 PRIMARY KEY;
    2. ALTER TABLE 表名 ADD PRIMARY KEY(列名)

    添加唯一约束也有两种方式

    1. ALTER TABLE 表名 MODIFY COLUMN 列名 数值类型 UNIQUE;
    2. ALTER TABLE 表名 ADD UNIQUE(列名)

    添加外键约束

    1. ALTER TABLE 从表 ADD FOREIGN KEY(列名) REFERENCES 主表(列名)

    五、标识列(自增长列)

    • 标识列又称为自增长列
    • 关键字:AUTO_INCREMNET
    • 含义:可以不用手动的插入值,系统提供默认的序列值,从1开始,每次插入自增长1
    • 特点:
    1. 标识列必须和key搭配
    2. 一个表中只能有一个标识列
    3. 标识列的类型只能是数值型
    4. 可以在修改表时设置标识列,跟前面在修改表时设置或添加约束一样的语法
    5. 可以在修改表时删除标识列,跟前面在修改表时删除约束一样的语法
    例子:
    CREATE TABLE tab_identity(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	name VARCHAR(20)
    )
    

    使用 SHOW VARIABLES LIKE '%AUTO_INCREMENT%' 可以查看到与自增长类相关的两个属性
    在这里插入图片描述
    可以使用SET auto_increment_increment = 数值来改变自增列的增长值,
    也可以使用SET auto_increment_offset = 数值来改变自增列的起始值,但是由于MySQL不支持修改 auto_increment_offset,所以修改之后并不会起作用,但是有一个小技巧可以修改起始值,即在第一次插入数据时插入你想要的起始值

    六、外键的级联操作

    1. 外键的级联删除

    外键的级联删除:在删除主表中做为外键的字段的数据时,从表中引用主表的该字段的这个数据做为外键的那些数据也会被删除

    要使用级联删除首先在设置外键时要多添加一个条件 ON DELETE CASCADE,添加后,在删除主表中作为外键的字段的数据就是级联删除了

    
    ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 主表名(列名) ON DELETE CASCADE
    
    

    2.外键的级联置空

    外键的级联置空:在删除主表中做为外键的字段的数据时,从表中引用主表的该字段的这个数据做为外键的那些数据中对应的字段的值会被置为null

    要使用级联删除首先在设置外键时要多添加一个条件 ON DELETE SET NULL,添加后,在删除主表中作为外键的字段的数据就是级联置空了

    
    ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 主表名(列名) ON DELETE SET NULL
    
    
    展开全文
  • 约束的简介 数据的完整性是指数据的正确性和一致性,可以通过定义表时定义完整性约束,也可以通过规则,索引,触发器等。约束分为两类:行级和表级,...有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认
  • 精度不一样,float表示的精度大概是7位,decimal在MySQL中是按照字符串形式存储的 表的约束: 空属性:两个值null和not null;默认为null;但是在实际开发中尽可能保证字段不为空,因为数据为空没办法参与运算。 ...
  • 语法概念错误、言语不够严谨处,请多多指教,小白这里感激不尽。...三、常见的五种约束 1.not null:非空约束,指定某列不能为空; create table student( sno int primary key, sname ch...
  • MySQL数据库(二)

    2019-05-26 20:20:00
    常见的表约束有五种,分别为主键约束、非空约束、默认约束、唯一约束和外键约束MySQL 提供了两种定义约束的方式:列约束和表约束。列约束定义一个列上,只能对该列起约束作用,表约束一般定义一个表的多个列...
  • MySQL事务与锁

    2020-05-17 23:34:54
    只有十五中所有SQL语句都执行成功,才算整个事务成功,事务才会被提交。如果事务任何一句SQL执行失败,整个事务都应该被回滚。 1.2、一致性,是指数据库将一一致性状态转换为另一一致性状态。不允许数据的...
  • MySQL中约束保存information_schema数据库的table_constraints中,可以通过该表查询约束信息; 约束主要完成对数据的检验,保证数据库数据的完整性;如果相互依赖数据,保证该数据不被删除。 常用约束: ...
  • 2.4 Red Hat Enterprise Linux 4系统上安装MySQL和相关软件 29 2.4.1 安装Apache 2 29 2.4.2 安装MySQL 5 30 2.4.3 编译PHP 5 30 2.4.4 安装Perl 5.8 33 2.5 编译MySQL软件的开发者版本(Linux) 33 2.5.1 ...
  • 数据库同样也它的规范,按照规范来设计维护数据库是程序员必备的素质, 目前关系数据库范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和 第范式(5NF...
  • 前言: 课程:《三大主流数据库快速上手》(点击跳转官方课程,b站资源,可自搜) ...不需要添加任何限制条件,可以创建任何数据类型,由字段本身的完整性约束决定。 2、唯一索引 使用 unique 参数
  • 查询数据是指从数据库中的数据表或视图中获取所需要的数据,在mysql中,可以使用SELECT语句来查询数据。根据查询条件的不同,数据库系统会找到不同的数据。 SELECT语句的基本语法格式如下: [sql] view plain copy ...
  • 章 数据库完整性

    2021-02-22 15:28:33
    断言是数据库中一更具一般性的约束机制,任何对断言中有涉及的关系进行操作都会触发断言的检查,如果断言结果不为真,则该操作会被拒绝执行。 举一个生活中的例子:小A是一家之主,月初他定下了一个小目标“这个月...
  • 程序员的SQL金典.rar

    2009-03-29 02:23:23
     本书特色:主要介绍SQL的语法规则及在实际开发的应用,并且对SQL在MySQL、MS SQL Server、Oracle和DB2的差异进行了分析;详细讲解数据库对增、删、改、查等SQL的支持并给出了相应的SQL应用案例;透彻分析函数...
  • 程序员的SQL金典1-8

    2011-05-20 18:09:38
     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...
  • 程序员的SQL金典7-8

    2011-05-20 18:30:04
     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...
  • 程序员的SQL金典6-8

    2011-05-20 18:29:34
     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...
  • 程序员的SQL金典5-8

    2011-05-20 18:13:41
     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...
  • 程序员的SQL金典4-8

    2011-05-20 18:12:51
     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...
  • 程序员的SQL金典3-8

    2011-05-20 18:11:59
     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...
  • 程序员的SQL金典2-8

    2011-05-20 18:11:12
     10.4.1 MySQL中的自动增长字段  10.4.2 MS SQL Server中的自动增长字段  10.4.3 Oracle中的自动增长字段  10.4.4 DB2中的自动增长字段  10.5 业务主键与逻辑主键  10.6 NULL的学问  10.6.1 NULL与比较运算符...
  • 2009达内SQL学习笔记

    2010-02-10 19:46:58
    通配符搜索模式任意位置使用,并且可以使用多个通配符。 通配符%表示任何字符出现任意次数;还能代表搜索模式给定位置的0个或多个字符。下划线匹配单个任意字符。 如:select table_name from user_tables ...
  • Mysql 甲骨文 是个开源的数据库server,可运行多种平台, 特点是响应速度特别快,主要面向小企业 小型企业 PostgreSQL 号称“世界上最先进的开源数据库“,可以运行多种平台下,是tb级数据库,而且性能也很...
  • 8.2 SQL定义约束 162 8.2.1 指定属性约束和属性默认值 162 8.2.2 指定码和参照完整性约束 163 8.2.3 为约束命名 164 8.2.4 使用CHECK指定元组约束 164 8.3 SQL的模式更改语句 165 ...
  • asp.net知识库

    2015-06-18 08:45:45
    ASP.Net利用CSS实现多界面的方法 如何客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值...

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

在mysql中有五种约束

mysql 订阅