Mysql的ENUM和SET约束

ENUM和SET列提供了定义仅能包含给定值集合的列的有效方式。但是,从MySQL 5.0.2起,ENUM和SET不是实际约束。其原因与不重视NOT NULL的原因一样。

ENUM列总有1个默认值。如果未指定默认值,对于包含NULL的列,默认值为NULL;否则,第1个枚举值将被当作默认值。

如果在ENUM列中插入了不正确的值,或者,如果使用IGNORE将值强制插入了ENUM列,会将其设置为保留的枚举值0,对于字符串情形,将显示为空字符串。

如果在SET列中插入了不正确值,该值将被忽略。例如,如果列能包含值“a”、“b”和“c”,并赋值“a,x,b,y”,结果为“a,b”。

从5.0.2开始,可以对服务器进行配置,以使用严格的SQL模式。

启用严格模式后,ENUM或SET列的定义可作为对输入至列的值的约束。如果值不满足下述条件,将出现错误:

· ENUM值必须是在列定义中给出的值之一,或内部的数字等同物。该值不能是错误值(即,0或空字符串)。对于定义为ENUM('a','b','c')的列,诸如''、'd'和'ax'等,均是非法的,并将被拒。

· SET值必须是空字符串,或由1个或多个在列定义中给出的且用逗号隔开的值组成。 对于定义为SET('a','b','c')的列,诸如'd'和'a,b,c,d'等,均是非法的,并将被拒。

如果使用了INSERT IGNORE或UPDATE IGNORE,在严格模式下,可抑制无效值导致的错误。在这种情况下,将生成警告而不是错误。对于ENUM,值将作为错误成员(0)插入。对于SET,会将给定值插入,但无效的子字符串将被删除。例如,'a,x,b,y'的结果是'a,b',就像前面介绍的那样。

时间: 2024-11-02 16:44:22

Mysql的ENUM和SET约束的相关文章

mysql中关于外键约束的小问题

问题描述 mysql中关于外键约束的小问题 我想问,主表被references后不允许先删除记录,又说从表指定on delete cascade后删除主表记录时从表记录随之删除,你说这不矛盾吗?到底让不让删除? 例如下面这张图,student_table参考teacher_table,我却删不掉主表teacher_table 解决方案 嗯,这个问题已经解决啦,是我测试代码写错了,删除记录用del 我那个写成drop了 解决方案二: 你需要先解除外键约束 再删除表 解决方案三: MySQL外键约束

MySQL导出所有Index和约束的方法_Mysql

本文汇总了MySQL导出所有Index 和 约束的方法,提供给大家以方便大家查询使用.具体如下: 1. 导出创建自增字段语句: SELECT CONCAT( 'ALTER TABLE `', TABLE_NAME, '` ', 'MODIFY COLUMN `', COLUMN_NAME, '` ', IF(UPPER(DATA_TYPE) = 'INT', REPLACE( SUBSTRING_INDEX( UPPER(COLUMN_TYPE), ')', 1 ), 'INT', 'INTEG

如何取得MYSQL中ENUM列的全部可能值

这里其实并不需要其它的什么函数来支持,只需要使用MYSQL提供的一些SQL语句就可以了. 这里为了简单起见,以MYSQL的系统表USER为例,取出SELECT_PRIV这一列的所有可能值. 方法:SHOW COLUMNS FROM table_name LIKE enum_column_name 小写的部分需要根据你的情况改变. 程序: //By SonyMusic(sonymusic@163.com) //HomePage(phpcode.yeah.net) $connect_hostname

小技巧:取得MYSQL中ENUM(枚举)列的全部可能值

这里其实并不需要其它的什么函数来支持,只需要使用MYSQL提供的一些SQL语句就可以了.这里为了简单起见,以MYSQL的系统表USER为例,取出SELECT_PRIV这一列的所有可能值.方法:SHOW COLUMNS FROM table_name LIKE enum_column_name 小写的部分需要根据你的情况改变.程序:<?php//By SonyMusic(sonymusic@163.com)//HomePage(phpcode.yeah.net)    $connect_hostn

详解MySQL中的外键约束问题_Mysql

使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器端脚本语言,就足以应付对MySQL表所需的各种操作了,尤其是当您使用了快速MyISAM数据库引擎的时候.但是,即使在最简单的情况下,事情也要比我们想象的要复杂得多.下面我们用一个典型的例子进行说明.假设您正在运行一个博客网站,您几乎天天更新,并且该站点允许访问者评论您的帖子. MySQL外键约束条件

Mysql中unique与primary约束的区别分析

定义了UNIQUE约束的字段中不能包含重复值,可以为一个或多个字段定义UNIQUE约束,因此,UNIQUE即可以在字段级也可以在表级定义,在UNIQUE约束的字段上可以包含空值. ORACLE自动会为具有PRIMARY KEY约束的字段(主码字段)建立一个唯一索引和一个NOT NULL约束,定义PRIMARY KEY约束时可以为它的索引: UNIQUED 可空,可以在一个表里的一个或多个字段定义:   PRIMARY KEY不可空不可重复,在一个表里可以定义联合主键:简单的说, primary

mysql sql enum数据类型插入,更新,删除操作

mysql教程 sql enum数据类型插入,更新,删除操作 enum列总有1个默认值.如果未指定默认值,对于包含null的列,默认值为null:否则,第1个枚举值将被当作默认值. 如果在enum列中插入了不正确的值,或者,如果使用ignore将值强制插入了enum列,会将其设置为保留的枚举值0,对于字符串情形,将显示为空字符串. 如果在set列中插入了不正确值,该值将被忽略.例如,如果列能包含值"a"."b"和"c",并赋值"a,x,

【赠书】从商用到开源:15个维度,全面剖析DB2与MySQL数据库的差异

云和恩墨为某证券公司进行了从DB2到MySQL数据库系统的迁移论证.验证,对两类数据库展开全方位多角度的对比分析,并根据用户的业务现状进行了相关架构.性能.备份恢复及高可用验证.本系列将带领大家全面学习DB2迁移至MySQL的实践. 前文回顾: 从商用到开源:DB2迁移至MySQL的最佳实践 今天一起来学习DB2与MySQL数据库的特征对比.快上车! 一.隔离级别 标准的隔离级别共四个,分别是: 未授权读取 也称为读未提交(ReadUncommitted):允许脏读取,但不允许更新丢失.如果一个

Mysql中增加与取消外键约束语句

语法 [CONSTRAINT [symbol]] FOREIGN KEY     [index_name] (index_col_name, ...)     REFERENCES tbl_name (index_col_name,...)     [ON DELETE reference_option]     [ON UPDATE reference_option] reference_option:     RESTRICT | CASCADE | SET NULL | NO ACTION