mysql不支持的约束类型为,mysql不支持的约束类型为什么
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(列名称)? ※可以有多个列名称,用逗号隔开。