mysql char 约束_MySql-常用数据类型与约束

数据类型

数字类型

1.tinyint: 1个字节,有符号:-128~127,无符号:0~255

2.smallint: 2个字节

3.mediumint: 3个字节

4.int: 4个字节

5.bigint: 8个字节

6.float:最大总位数m 255,小数位d 30

7.double:最大总位数m 255,小数位d 30

8.decimal:最大总位数m 65,小数位d 30。精确度最高

# int(n):n并不代表能够存储的最大长度,只有在定义zerofill时有用,不满足长度就在前面补零

create table t(num int(5) zerofill unsigned not null);

insert into t values(123456),(123);

+--------+

| num |

+--------+

| 123456 |

| 00123 |

+--------+

字符类型

1.char(n):n表示能够存储的字符长度,不加长度时默认为1,最大可存255个字符

2.varchar(n):n表示能够存储的字符长度,必须要加长度,能存的长度<21845个字符

3. text:可以用来存在大数量的字符

4.enum('man','woman','other') 枚举,多选一

5.set('man','woman','other') 集合,可以选多个

create table char_test(name char(3));

insert into char_test values('123'),('12'),('1234'),('你是谁'),('你是谁呀'),('你'); # 在严格模式下会提示Data too long 错误,

insert into char_test values('123'),('12'),('你是谁'),('你'); # 插入值验证是字节长度还是字符长度。可以插入3个中文字符。所以是指存储的字符长度

+-----------+

| name |

+-----------+

| 123 |

| 12 |

| 你是谁 |

| 你 |

+-----------+

select length(name) from char_test; # 查看字节长度

select char_length(name) from char_test; # 查看字符长度

create table varchar_test(name varchar(5));

insert into varchar_test value("你是谁的谁");

char存取速度快,varchar会用1字节来存数据的长度,超过255就用2个字节来存长度,再存数据。所以varchar存取速度慢

char存的时候会存定长字符长度,但是取得时候会很不要脸的把末尾的空格去掉。可以使用sql_mode=PAD_CHAR_TO_FILL_LENGTH让它现出原形长度,在查询的时候用='李杰'可以查到,但是like '李杰'查询不到,通常不这么做

日期时间类型

日期类型

1.year:年

2.date:日期

3.time:时间

4.datetime:占8字节

5.timestamp:占4字节

show variables like 'sql_mode';

set sql_mode = strict_trans_tables; #设置严格模式

set sql_mode = ansi; # 设置非严格模式

约束

not null: 非空

---------------------------------------------------------------------------

default:默认值

---------------------------------------------------------------------------

unique key:唯一约束

* id int unique 或者unique(id): 单一唯一

* unique(name,age): 联合唯一,只有两字段都相同时为重复

---------------------------------------------------------------------------

primary key: 主键约束,对于innodb存储引擎来说,一张表内必须有一个主键

* id int primary key或者primary key(id): 单列主键

* primary key(name,age): 复合主键,只有两字段都相同时为重复

auto_increment: 自动增长:可以自定义增长,与primary key搭配使用

* show variables like 'auto_incr%';

+--------------------------+-------+

| auto_increment_increment | 1 | # 步长

| auto_increment_offset | 1 | # 起始偏移量位置,必须小于等于步长

+--------------------------+-------+

set global auto_increment_increment = 5; # 全局改

set session auto_increment_increment = 3; # 会话层改,下次回到默认值

---------------------------------------------------------------------------

foreign key(id) references biao(id) # 外键约束,建立表之间的关系

on delete cascade # 级联删除,删除主表时,从表跟着删除

on update cascade # 级联更新,更新主表时,从表跟着更新

# 建立表

* 先建被关联的表,并且保证被关联的字段唯一

* 再建关联的表:从表

# 插入数据

* 先往被关联的表插入记录

* 再往关联表插入记录

# 删除、更新数据

* 先删除、更新先操作关联表

* 再操作被关联的表

* 用了on delete|update cascade就可以先操作被关联的主表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值