mysql数据库数据类型money_MySQL常用数据类型

1.常用数据类型:

(1)tinyint(小整型值): 1个字节,有符号的范围是(-128~127),无符号(unisigned)的范围是(0~255)

(2)int (大整型值):4个字节,有符号的范围是(-21亿~21亿左右),无符号的范围是(0~42亿左右)

(3) 浮点型:

float(255,30): 单精度,总长度是255,小数位是30

double(255,30): 双精度,总长度是255,小数位是30

decimal(65,30):金钱类型,总长度是65,小数位是30

可以设置总长度和小数位:create table t3(f1 float(5,2) , f2 double(5,2) , f3 decimal(5,2));

默认状态下,float默认保留5位小数,double默认保留16位小数,decimal默认保留四舍五入后的整数位。

create table t5(f1 float,f2 double,t3 decimal);

(4)字符串:

char(10) : 固定长度,最大长度为255,固定开辟10个字符长度的空间(手机号,身份证号),char开辟空间的速度更快

varchar(11):不固定长度,最大长度为21845,最多创建字符长度为11位的空间(小评论),开辟空间速度较慢,但是节约内存

text:文本类型(文章,小说)

create table t9(a char(11) , b varchar(20) , c text);

insert into t9 values("111","小评论","评论多多");

(5) 枚举enum:从列出来的数据当中选一个,如性别

(6) 集合set:从列出来的数据中选多个(注意去重性)

create table t12(

-> id int,

-> name char(10) ,

-> money float(6,2) ,

-> sex enum("man","women") ,

-> hobby set("reading","run","walk")

-> );

insert into t12 (id,name,money,sex,hobby) values(1,"bob",10.9,"man","run,run,walk");

mysql> select * from t12;

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

| id | name | money | sex | hobby |

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

| 1 | bob | 10.90 | man | run,walk |

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

(7)时间类型:

date: YYYY-MM-DD

time: HH:MM:SS

year: YYYY

datetime:YYYY-MM-DD HH:MM:SS

create table t1(f1 date,f2 time,f3 year,f4 datetime); (创建表格)

insert into t1 values("2018-07-05","12:38:40","2018","2018-07-05 12:38:40"); (添加数据)

insert into t1 values(now(),now(),now(),now()); (也可以使用MySQL自带的now()函数添加系统当前时间,MySQL会自动根据时间类型切断截取)

mysql> select * from t1;

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

| f1 | f2 | f3 | f4 |

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

| 2018-07-05 | 12:38:40 | 2018 | 2018-07-05 12:38:40 |

| 2020-06-17 | 14:42:08 | 2020 | 2020-06-17 14:42:08 |

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

timestamp YYYYMMDDHHMMSS(自动更新时间)

create table t2(dt datetime,ts timestamp);

insert into t2 values(null,null);

mysql> select * from t2;

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

| dt | ts |

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

| NULL | 2020-06-17 14:51:14 |

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

insert into t2 values(20180705123840,20200617092430);

mysql> select * from t2;

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

| dt | ts |

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

| NULL | 2020-06-17 14:51:14 |

| 2018-07-05 12:38:40 | 2020-06-17 09:24:30 |

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

insert into t2(dt) values(now());

mysql> select * from t2;

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

| dt | ts |

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

| NULL | 2020-06-17 14:51:14 |

| 2018-07-05 12:38:40 | 2020-06-17 09:24:30 |

| 2020-06-17 14:53:03 | 2020-06-17 14:53:03 |

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

约束:对要编辑的数据类型进行类型约束,不符合条件的直接报错

(1) unsigned:无符号

create table t3(id int unsigned);

insert into t3 values(66);

insert into t3 values(-55); # error

(2) not null: 设置不为空

create table t4(id int not null,name char(4));

insert into t4 values(1,"bob");

insert into t4(name) values("jack"); # ERROR 1364 (HY000): Field 'id' doesn't have a default value

(3) default: 设置默认值

create table t5(id int,name char(4) default "bob");

insert into t5(id) values(1);

insert into t5 values(2,"jack");

mysql> select * from t5;

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

| id | name |

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

| 1 | bob |

| 2 | jack |

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

(4) unique: 唯一约束,限定数据不能重复,UNI表示唯一索引 , 但是允许塞null空值

create table t6(id int unique,xuehao int(8));

insert into t6 values(1,111);

insert into t6 values(2,111);

insert into t6 values(null,111);

insert into t6 values(null,222);

insert into t6 values(1,222); # ERROR 1062 (23000): Duplicate entry '1' for key 'id'

(5) primary key: 主键(PRI),标记数据的唯一特征,唯一且不为空

create table t7(id int primary key,xuehao int(8));

insert into t7 values(1,111);

insert into t7 values(1,222); # ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

insert into t7 values(null,333); # ERROR 1048 (23000): Column 'id' cannot be null

mysql> desc t7;

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

| Field | Type | Null | Key | Default | Extra |

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

| id | int(11) | NO | PRI | NULL | |

| xuehao | int(8) | YES | | NULL | |

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

# 如果primary key和unique not null两个约束同时存在,以primary key为主键,unique not null为UNI

create table t8(id int primary key,xuehao int unique not null);

mysql> desc t8;

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

| Field | Type | Null | Key | Default | Extra |

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

| id | int(11) | NO | PRI | NULL | |

| xuehao | int(11) | NO | UNI | NULL | |

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

# 一个表里面只能有一个主键

create table t9(id int primary key,xuehao int primary key);

# ERROR 1068 (42000): Multiple primary key defined

(6) auto_increment: 自增加1,一般配合主键使用,或者unique

create table t10(id int primary key auto_increment,xuehao int default 111);

insert into t10 values();

insert into t10 values();

mysql> select * from t10;

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

| id | xuehao |

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

| 1 | 111 |

| 2 | 111 |

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

delect:只是删除数据,增加的数据ID号还是从上一个接着增加

delete from t10;

insert into t10 values();

mysql> select * from t10;

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

| id | xuehao |

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

| 3 | 111 |

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

truncate: 是重置表,增加的数据ID从1开始

truncate t10;

insert into t10 values();

mysql> select * from t10;

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

| id | xuehao |

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

| 1 | 111 |

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

# 可设置自增的其实位置

create table t1(

id int primary key auto_increment,

name varchar(255)

)engine = myisam auto_increment=3 charset=utf8;

(7) zerofill: 0填充,配合int使用,可设置位数,位数不够的,用0填充

create table t11(id int(8) zerofill);

insert into t11 values(222);

insert into t11 values(123456789);

mysql> select * from t11;

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

| id |

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

| 00000222 |

| 123456789 |

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

(1) 联合唯一约束:unique(字段1,字段2,字段3..),把多个字段拼在一起表达唯一的数据,多个字段结合在一起作为主键

# 都不为空

create table t14(id int(4) not null,xuehao int(8) not null, unique(id,xuehao));

insert into t12 values(1,111);

insert into t12 values(1,222);

insert into t12 values(1,111); # ERROR 1062 (23000): Duplicate entry '1-111' for key 'id'

mysql> desc t12;

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

| Field | Type | Null | Key | Default | Extra |

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

| id | int(4) | NO | PRI | NULL | |

| name | char(4) | NO | PRI | NULL | |

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

# 有字段为空,显示为MUL普通索引

create table t16(class char(4),id int(4),xuehao int(8), unique(id,xuehao) );

insert into t16 values(2,1,111);

insert into t16 values(1,null,111);

insert into t16 values(1,null,null);

mysql> select * from t16;

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

| class | id | xuehao |

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

| 2 | 1 | 111 |

| 1 | NULL | 111 |

| 1 | NULL | NULL |

| 1 | NULL | NULL |

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

mysql> desc t16;

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

| Field | Type | Null | Key | Default | Extra |

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

| class | char(4) | YES | | NULL | |

| id | int(4) | YES | MUL | NULL | |

| xuehao | int(8) | YES | | NULL | |

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

# 若primary key和联合唯一约束同时出现,以primary key 为主键

主键不能再增加值,联合唯一约束可以再增加

create table t17(id int primary key,xuehao int not null,class int not null,unique(xuehao,class));

mysql> desc t17;

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

| Field | Type | Null | Key | Default | Extra |

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

| id | int(11) | NO | PRI | NULL | |

| xuehao | int(11) | NO | MUL | NULL | |

| class | int(11) | NO | | NULL | |

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

(2) foreign key:外键,把多张表通过一个关键字段联合起来,外键要求,关联的字段必须具有唯一性(unique/primary key)

create table class1(id int unique , classname varchar(255));

insert into class1 values(1,"py");

insert into class1 values(2,"li");

create table students1(

id int primary key auto_increment,

name char(5) not null,

age int,

classid int,

foreign key(classid) references class1(id)

);

insert into students1 values(123,"bob",18,1);

insert into students1 values(234,"jack",19,2);

insert into students1 values(345,"eric",20,1);

insert into students1 values(456,"rose",21,2);

delete from class1 where id = 1; # 因有外键关联,所以删除失败

# ERROR 1451 (23000): Cannot delete or update a parent row:

# a foreign key constraint fails (`db0617`.`students1`, CONSTRAINT `students1_ibfk_1`

# FOREIGN KEY (`classid`) REFERENCES `class1` (`id`))

delete from students1 where classid = 1; # 先删除关联数据

delete from class1 where id = 1;

mysql> select * from class1;

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

| id | classname |

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

| 2 | li |

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

1 row in set (0.00 sec)

mysql> select * from students1;

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

| id | name | age | classid |

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

| 234 | jack | 19 | 2 |

| 456 | rose | 21 | 2 |

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

联级删除,联级更新(谨慎操作)

create table class2(id int unique , classname varchar(255));

insert into class2 values(1,"py");

insert into class2 values(2,"li");

create table students2(

id int primary key auto_increment,

name char(5) not null,

age int,

classid int,

foreign key(classid) references class2(id) on delete cascade on update cascade

);

insert into students2 values(123,"bob",18,1);

insert into students2 values(234,"jack",19,2);

insert into students2 values(345,"eric",20,1);

insert into students2 values(456,"rose",21,2);

# 联级删除

delete from students2 where classid = 1;

# 联级更新

update class2 set id = 3 where classname = "li";

mysql> select * from class2;

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

| id | classname |

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

| 1 | py |

| 3 | li |

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

2 rows in set (0.00 sec)

mysql> select * from students2;

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

| id | name | age | classid |

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

| 234 | jack | 19 | 3 |

| 456 | rose | 21 | 3 |

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

关于约束的添加和删除

(1)  添加/删除 约束 not null

alter table 表名 modify 字段名 类型

alter table t1 modify id int not null

alter table t1 modify id int

(2) 添加/删除 unique 唯一索引

alter table 表名 add unique(id)

alter table t1 add unique(id)

alter table t1 drop index id

(3)  添加/删除 primary key

alter table 表名 add primary key(id);

alter table t1 add primary key(id);

alter table t1 drop primary key;

(4) 添加/删除 foreign key 外键 (先通过desc 表 找到外键名字,然后再删)

alter table student1 drop foreign key student1_ibfk_1;  #删除

alter table student1 add foreign key(classid) references class1(id)  #添加

存储引擎 : 存储数据的结构方式

show engines; 查看存储引擎

# 概念理解:

表级锁 : 如果有人修改了当前这个表,会直接上表锁,其他人无法修改,在编辑数据时候,速度慢,不能高并发(MyISAM)

行级锁 : 如果有人修改了当前这个表中的一条记录,当前这个数据记录会上锁,其他数据仍然可以正常修改,速度快,允许更高的并发(InnoDB)

支持事务处理 : 如果执行sql语句,在全部成功之后,在选择提交数据,有一条失败,立刻回滚,恢复成原来状态.

begin : 开始事务

commit : 提交数据

rollback: 回滚数据

InnoDB : 5.6版本后的默认存储引擎,支持事务处理,行级锁,外键

MyISAM : 5.6版本前的默认存储引擎,支持表级锁

MEMORY : 把数据放在内存中,用做缓存

BLACKHOLE : 黑洞,用来同步主从数据库中的数据.场景发生在服务器并发集群,用在主从数据库当中[主数据库:增删改,从数据库:查询]

D:\MySQL5.7\mysql-5.7.25-winx64\data\db0617

create table myisam1(id int,name char(10)) engine = myisam;

myisam1.frm 表结构

myisam1.MYD 表数据

myisam1.MYI 表索引

create table innodb1(id int,name char(10)) engine = innodb;

innodb1.frm 表结构

innodb1.ibd 表数据+表索引

create table memory1(id int,name char(10)) engine = memory;

memory1.frm 表结构

没有表数据文件,因为把数据存放在内存中了.

create table blackhole1(id int,name char(10)) engine = blackhole;

blackhole1.frm 表结构

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值