mysql不支持的约束类型为,mysql不支持的约束类型为什么

http://www.itjxue.com  2023-01-22 14:39  来源:未知  点击次数: 

mysql基础数据类型118-124

#常见的数据类型

/*

数值型:

? ? 整形

? ? 小数:

? ? ? ? 定点数

? ? ? ? 浮点数

字符型:

? ? 较短的文本:char、varchar

? ? 较长的文本:text、blob(较长的二进制数据)

日期型:

*/

#一、整形

/*

分类:

tinyint、smallint、mediumint、int/integer、bigint

1 ? ? ? ? ? ?2 ? ? ? ? ? ? ? ?3 ? ? ? ? ? ? ? ? ? ? ? ?4 ? ? ? ? ? ? ? ?8

特点:

? ? -如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字

? ? -如果插入的数值超出了整形的范围,会报out of range异常,并且插入临界值

? ? -如果不设置长度,会有默认的长度

? ? -长度代表了显示的最大宽度,如果不够会用0在左边填充,但是必须搭配zerofill使用

*/

#1.如何设置无符号和有符号

CREATE TABLE tab_int(

? ? t1 INT

? ? t2 INT ZEROFILL ?【无符号】

);

#二、小数

/*

浮点型

? ? float(M, D)

????double(M, D)

定点型

? ? dec(M, D)

? ? decimal(M, D)

特点:

-M:整数部位+小数部位

-D:小数部位

-M和D都可以省略

如果是decimal,则M默认为10,D默认为0

如果是float和double,则会根据插入的数值的精度来决定精度

定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用

*/

CREATE TABLE tab_float (

? ? f1 FLOAT(5, 2)

? ? f2 DOUBLE (5, 2)

? ? f3 DECIMAL(5, 2)

)

#原则:

/*

所选择的类型越简单越好,能保存数值的类型越小越好

*/

#三、字符型

/*

较短的文本:

char

varchar

较长的文本:

text

blob(较大的二进制)

特点:

? ? ? ? ? ? ? ? ? ? 写法 ? ? ? ? ? ? ? ?M的意思 ? ? ? ? ? ? ????????????????????????????特点 ? ? ? ? ? ? ? ? ? ????空间的耗费 ? ? ? ? ? ? ? ? ? ?效率????????

char ? ? ? ? ? ?char(M) ? ? ? 最大的字符数,可以省略 ? ? ? ? 固定长度的字符 ? ?????????比较耗费 ? ? ? ? ? ? ? ? ? ? ? ?高

varchar ? ? ?carchar(M) ? ?最大的字符数,不可以省略 ? ?可变长度的字符 ? ? ? ? ? ?比较节省 ? ? ? ? ? ? ? ? ? ? ? ?低

*/

CREATE TABLE tab_char(

? ? c1 ENUM('a','b','c')

)

CREATE TABLE tab_set(

? ? s1 ? ?SET ('a','b','c','d')

)

#四、日期型

特点:

????????????????? ? ? ? ? ? ? ? ? ? ?字节? ? ? ? ? ? ? ? ? ? ? ? 范围? ? ? ? ? ? ? ? ? ? 时区等的影响

datetime? ? ? ? ? ? ? ? ? ? ? ? ? 8? ? ? ? ? ? ? ? ? ? ? ? ? ? 10000-9999? ? ? ? ? ? 不受

timestamp? ? ? ? ? ? ? ? ? ? ? ? 4? ? ? ? ? ? ? ? ? ? ? ? 1970-2038? ? ? ? ? ? ? ? ? ? 受

CREATE TABLE tab_date(

? ? t1? ? DATETIME,

? ? t2? ? TIMESTAMP

)

#常见约束

/*

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

分类:六大约束

? ? NOT NULL:非空,用于保证该字段的值不能为空,比如姓名、学号等

? ? default:默认,用于保证该字段有默认值,比如性别

? ? primary key:主键,用于保证该字段的值具有唯一性,并且非空,比如学号等

? ? unique:唯一,用于保证该字段的值具有唯一性,可以为空,比如座位号

? ? check:检查约束【mysql中不支持】,比如年龄、性别

? ? foreign key:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值,比如员工表的部门编号,员工表的工种编号

添加约束的时机:

? ? 1.创建表时

? ? 2.修改表时

约束的添加分类:

? ? 列级约束:

? ? ? ? 六大约束语法上都支持,但外键约束没有效果

? ? 表级约束:

? ? ? ? 除了非空、默认,其他的都支持

*/

CREATE TABLE 表名(

? ? 字段名? ? 字段类型? ? 列级约束,

? ? 表级约束

)

#一、创建表时添加约束

/*

语法:

直接在字段名和类型后面追加 约束类型即可

只支持:

*/

#1.添加列级约束

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)

)

desc stuinfo? ?#查看表结构

show index from stuinfo? #查看stuinfo表中所有的索引,包括主键、外键、唯一

#2、添加表级约束

create table stuinfo (

?????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_stuinfo_major foreign key(majorid) references major(id)? #外键

)

mysql备注说明只能是1到8?

1. 给字段添加注释

-- alter table? sc modify column 字段名? int not null comment? '只能是1-8';

2.MySQL 所有的存储引擎都不支持 CHECK 约束,MySQL中可以写 CHECK 约束,但会忽略它的作用,因此 CHECK 并不起作用,因此实现对数据约束有两种方法:

在 MySQL 种约束,如使用?ENUM 类型?或者?触发器?。

CREATE TABLE person(

id tinyint(4) NOT NULL AUTO_INCREMENT,

? name varchar(16) NOT NULL,

? sex enum('男','女') NOT NULL

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在应用程序里面对数据进行检查再插入。

mysql 外键 mysql 怎么用

1、只有InnoDB类型的表才可以使用外键。mysql默认是MyISAM,这种类型不支持外键约束

2、外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作。

3、外键的作用:

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值。

4、建立外键的前提:

两个表必须是InnoDB表类型。

使用在外键关系的域必须为索引型(Index)。

使用在外键关系的域必须与数据类型相似。

5、创建的步骤

指定主键关键字: foreign key(列名)。

引用外键关键字: references 外键表名(外键列名)。

6、事件触发限制:on delete和on update , 可设参数cascade(跟随外键改动)。

restrict(限制外表中的外键改动),set

Null(设空值),set Default(设默认值)。

[默认]no action

7、举例

outTable表 主键 id 类型 int

创建含有外键的表:

代码如下:

create table temp(

id int,

name

char(20),

foreign key(id) references outTable(id) on delete cascade on update

cascade);

说明:把id列 设为外键 参照外表outTable的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。

代码如下:

create table temp( id int, name char(20),

foreign key(id) references outTable(id) on delete cascade on update

cascade);

请列举mysql中常见的约束类型

一、Mysql支持以下约束:

※? 主键约束 :primary key

※? 唯一性约束:unique key

※? 外键约束:foreign key

※? 非空约束:not null

※? 默认值约束:default

二、主键约束:

一个表只能有一个主键,当建表时忘记设置主键约束时.设置为主键的列查询速度会非常快,所以一般会用聚集索引,这个我们后面会讲到。

添加主键约束:设置myself表的age为主键

语法:alter? table 表名 add primary key;(列名)※? 可以有多个列名。

三、外键约束:

何为外键,当建表时需要用到另外一个表的主键作为本表的的主键时,需要设置外键。设置外间后,若想在删除本表数据时会级联删除或者默认删除其他方式。

添加外键约束:设置本表的cno为外键

语法:alter table 表名称 add foreign key (列名称)? references? 关联表名称(列名称);

四、非空约束:

当插入新数据时对应的列为不能空。非空约束是相对于默认值约束而说的。

添加非空约束:

语法:alter table 表名 modify 列名 列类型 not null;?

五、默认值约束:default:

当插入时没有插入值时,会自动插入默认值。默认值约束相对于非空约束而说。

添加默认值约束:

语法:alter table 表名 add 列名 列类型 not null default '默认值';

六、唯一性约束:

本列的内容只能唯一不能重复。

添加唯一约束:

?语法:alter table 列名 add unique(列名称)? ※可以有多个列名称,用逗号隔开。

(责任编辑:IT教学网)

更多

推荐HTML/Xhtml文章