MySQL常用类型与约束
常见类型
整型:
Tinyint 1Byte
Smallint 2B
Mediumint 3B
Int、integer 4B
Bigint 8B
* 加上unsigned会表示无符号
* 超过会报out of range value,但是会插入边界值
不设置长度,那会有默认的长度,表示显示宽度,加上ZEROFILL约束后,自动变成unsigned,显示时不够长用0补充
小数:
浮点型
float(M,D) 4B
double(M,D) 8B
定点型,下面两者是一样的
DEC(M,D) M+2
DECIMAL(M,D) M+2
* D表示小数点位数,M表示小数+整数一共多少位,但是都可以省略不写,DECIMAL(10,0)默认,float和double会根据精度决定
* 精度要求高的用DEC
字符型:
较短
char(M) 0~255 比varchara效率高
varchar(M) 0~65535 会根据实际给内存
binary 类似上面的,保存二进制
varbinary
较长
text
blob(较长的二进制数据)
ENUM v的值只能是a或者b,不然为空
CREATE TABLE T (
v ENUM('a','b')
);
SET v的值由set内容组成,不分大小写,多个用逗号分开a,B
CREATE TABLE T (
v SET('a','b','c')
);
* M表示字符数,中文也只算个,char可以省略,为1,varchar不可以
日期型:
data 4 只有日期
datatime 8 有日期和时间
timestamp 4 时刻 受时区影响
time 3 只有时间
year 1 只有年
Blob类型:
常见约束
一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
CREATE TABLE 表名(
字段名 字段类型 约束
)
NOT NULL 非空,用于保证该字段的值不能为空
DEFAULT 默认,用于保证该字段有默认值
UNIQUE 唯一,值具有唯一性,可以为空
CHECK 检查约束【mysql中不支持,但是不报错】
PRIMARY KEY 主键,值具有唯一性且非空
FOREIGN KEY 外键,用于限制两个表的关系,保证该字段的值必须来自于主表的关联列的值。就是该值能在别的表中找到。在从表添加外键约束,用于引用主表中某列的值。(数据在主表中,从表只有个编号)
如 员工表的部门编号,学生表的专业编号
主键和唯一:
都有唯一性
唯一只可以有一个null,主键不可以有;一个表只能有一个主键
**可使用多个值共同作为主键**,唯一也可以由多个值组成
外键
在从表中设置外键关系
从表的外键列的类型和主表的关联列类型一致或兼容
主表的关联列必须唯一性(主键或者唯一)
插入数据时,先插入主表,再插入从表,删除则相反
约束的类型:
CREATE TABLE 表名(
名 类型 列级约束,
表级约束
)
列级约束
六大约束语法上都支持,但外键约束没有效果
CREATE TABLE 表名(
id int primary key,
stuname varchar(20) not null,
gender char(1) check(gender='b' or gender='g'),
seat int unique,
age int default 18,
majorid int references major(id) //无效
)
CREATE TABLE major(
id int primary key,
majorname varchar(20)
)
表级约束
除了非空、默认,其它都支持
[CONSTRAINT name] 这是可选的
CREATE TABLE 表名(
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='b' or gender='g'),
CONSTRAINT fk_表名_major foreign key(majorid) references major(id)
)
添加约束的时机:
创建表时
修改表时
ALTER TABLE T MODIFY COLUMN 字段名 字段类型 新约束
只要支持列级约束
ALTER TABLE T ADD COLUMN [constraint 约束名] 约束
只要支持表级约束
ALTER TABLE T DROP PRIMARY KEY
ALTER TABLE T DROP INDEX 唯一键名
ALTER TABLE T DROP FOREIGN KEY 外键名
标识列
又称自增长列,可以不用手动的插入值,系统提供默认的序列值
创建表时
CREATE TABLE T(
id int primary key auto_increment,
name varchar(20)
)
插入时,id这一位传入null就行,或者直接省略
必须配合唯一性的键使用
一个表只能有一个标识列,一个auto_increment关键字
标识列只能是数字型
auto_increment_increment 步行 这是系统的值 用SET ...=n 修改
auto_increment_offset 起始
也可以插入一行,修改offset当前值
修改表时
ALTER TABLE T MODIFY COLUMN 字段名 字段类型 约束 auto_increment;
本文标题:MySQL常用类型与约束
文章作者:whppmy
发布时间:2023-03-04
最后更新:2022-08-30
原始链接:http://bugnull.com/数据库/mysql常用类型与约束/
版权声明:个人记录,没有获取同意时,禁止转载!!