MySQL 数据类型

mysql表操作

1数据类型

建表的时候,字段都有对应的数据类型

1.整形

2.浮点型

3.字符类型(char(1)与vachar)char后面的数字时用来限制存储长的 默认为1

4.日期类型

5.枚举与集合

2.约束条件

primary key 主键

unique key 唯一

not null 不得为空

unsigned 无正负符号(用于数字类型)

zerofill 0填充多余的位数(用于数字类型)

 

3.创建表的完整语法

create table 表名(

字段名1 类型 (宽度 约束条件),

字段名2 类型 (宽度 约束条件),

字段名3 类型 (宽度 约束条件));

注意:

1.在同一张表中,字段名不能相同

2.款段和约束条件可选,字段名和类型是必须填写的

3.最后一个字段不能加逗号!

4.宽度指的是对储存的数据的限制

create table 表名 (name char);

insert into 表名 values('jason');

1.没有安全模式的数据库版本,能够存放数据但是只会存进去一个j(char默认存储是1,)这个需要你在创建表格的时候根据存储的内容设置

2.最新数据库版本直接报错提示无法存储:Data too long for column 'name' at row 1

5.约束条件>>>null 与 nut null

create table 表名 (id int,name char not null);

insert into 表名 valies(1,'j');正常储存

insert into 表名 values(1,null);报错

总结 类型与 约束条件区别

类型 :限制字段必须是以什么样的数据类型存储

约束条件:约束条件是在类型之外添加了一种额外的限制

4,严格模式

当你储存数据的时候发现 char 默认的时存储长度是1 但是 在存储的时候超过了这个限制 mysql 也不会报错 这个只是mysql 帮我们自动截取了最大长度,但在实际情况下我们应该尽量减少数据库的操作,缓解数据库的压力,让他仅仅只是管理数据即可,这样的情况下就需要设置安全模式,把这些错误的语法直接报错

1模糊匹配,当我们不能直接确定一个文件或者数据库中配置的参数时可以使用

 

show variables like '%mode%'; #查看数据库配置变量名中包含mode 的配置参数
#修改安全模式
set session #只在当前操作界面有效 就是说修改一个模式只在这次有效下一次还需要继续设置
set global #全局有效,永久有效
set global sql_mode = 'STRICT_TRANS_TABLES'
#修改完之后退出当前客户端重新的登陆即可

 

 

5.基本数据类型

1,整形

整型后面的数字不是用来限制存储数据的长度 而是用来控制展示的数据的位数

不用书写默认显示参数

分类:TINYINT 默认(4)

SMALLINT 默认(6)

MEDIUMINT 默认(9)

INT 默认(11)

BIGINT 默认(20)

作用:储存年龄,等级,id,电话号码等等

类型存储范围:参考图片

e340dcf3b82d287ed54535a53a6f7e7

TINYINT 默认是有符号的 默认是带有符号的(-128,-1277)

在存储的过程中 超出限制 只会 存最大值或者最小值

如果存无符号范围需要在 参数后面加上约束条件unsigned

create table 表名 (x tinyint unsigned)

上述整形均是如此 默认的都是有符号的,在存储的过程中 只能存储最大或最小

2.浮点型

 

#存储限制
float(255,30)总共255位小数位占30位
   double(255,30)总共255位小数站30
   decimal(65,30)总共65位小数站30

create table t6 (x float);
create table t7 (x double);
create table t8 (x decimal);
insert into t6 values(1.111111111111111111111111111111);
insert into t7 values(1.111111111111111111111111111111);
insert into t8 values(1.111111111111111111111111111111);
float 显示五位
double 显示十几位
decimal 显示全部

3,字符类型

分类

char(定长)

varchar(变长)

作用 描述 地址,姓名等信息

create table t1 (name char(4))# 超出四个字符报错,不够资格字符空格补全
create table t2 (name varchar(4))#超出四个字符报错,不够有几个存几个
#两个的优缺点
1,char 浪费内存空间,但读取速度快
  char的读取方式是每四个字节读一次
       egon alex lxx  jxx  txx  
   2,varchar 节省内存空间 但是读取速度慢(只是相对于char)
  varchar 在读取的时候是前面加了报头 所以慢
       1bytes+egon 1bytes+alex 1bytes+lxx  1bytes+jxx  1bytes+txx
#但是在查看的时候会发现没有什么 变化因为数据在显示的时候mysql自动将末尾的空格去除掉了 ,这时候就需要阿紫添加一个模式
set global sql_mode = "strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
#注意在添加的时候 一定要把上一次添加的严格模式在添加一变,不然会被顶掉

4,时间类型

分类

data ;年月日2019-08-19

time ;时分秒16:32:32

Datatime;年月日 时分秒2019-08-19 16:32:32

Year 年2019

测试

create table student(
id int,
name char(10),
born_year year,
 birth date,
 study_time time,
 reg_time datetime
);
 insert into student values(1,"yangxin",'2019','2019-08-19','16:36:21','2019-08-19 16:38:11');

5枚举与集合类型

分类

枚举enum 多选一

集合set 多选多

测试

 

create table user(
id int,
name char(12),
gender enum('male','female'));
insert into user values(1,'jason','xxxooo')#报错
insert into user values(1,'yangxin','male')#正确

create table teacher(
id int,
name char(10),
hobby set('read','sleep','sanna','69'))
insert into teacher values(1,'yangxin','read,sleep');
#枚举 在创建表的时候只能选择表中的选项而且只能选择一个,用处,用户注册 婚姻 性别,只有单选项的时候
#集合 可以选择多个 用在,爱好,性格特点 之列的跟情况而定

 

6约束条件

 

"""
PRIMARY KEY(PK) 标识该该表的主键,克为宜标识记录
FOREIGN KEY(FK) 标识该字段为该表的外键
NOT NULL 标识该字段不能为空
UNIQUE KEY(UK) 标识该字段 是唯一的
AUTO_INCREMENT 标识该字段的值 自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值

UNSIGNED 无符号
ZEROFILL 使用0填充
"""

 

not null+default

create table user(
id,int,
name,char(16))
insert into user values(1,null) #存入name为空

alter table user modify name char(16) not null #修改限制 储存内容不得为空
insert into user (name,id) values(null,2);#报错 插入数据可以指定到那是前提前后顺序一定要对应

#新建一张表
create table student(
id int,
name char(10) not null ,
gender enum('male','female','others') default 'male'
);
#一般来说都是配合在 有些地方用户可以不用输入直接使用默认值



 

unique

#单例唯一
create table user(
id int unique,
name char(12));
#给id 设置单例模式 就是在添加数据的id不能相同,

#联合唯一
create table server(
id int,
ip char(16),
port int,
unique(ip,port))

#两个单独的ip 或则端口号 可以重复 但是加在一起就不能重复了,只能重复一个

 

primary key +auto_increment

create table t1(id int primary key);
insert into t1 values(1),(1)
#如果存相同的id会报错


primary key  主键
限制效果跟 not null + unique 组合效果一致   非空且唯一

create table t18(id int primary key);


primary key也是innodb引擎查询必备的索引
索引你就把当成书的目录

innodb引擎在创建表的时候 必须要有一个主键
当你没有指定主键的时候
1.会将非空切唯一的字段自动升级成主键
2.当你的表中没有任何的约束条件  innodb会采用自己的内部默认的一个主键字段
该主键字段你在查询时候是无法使用的
查询数据的速度就会很慢
类似于一页一页的翻书

create table t19(
id int,
 name char(16),
 age int not null unique,
 addr char(16) not null unique
);

主键字段到底设置给谁呢???
通常每张表里面都应该有一个id字段
并且应该将id设置为表的主键字段

联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键!!!
!!!!!!!!!!!!!!!!!ps:innodb引擎中一张表有且只有一个主键!!!!!!!!!!!!!!!!!!!!!!!



create table t20(
ip char(16),
 port int,
 primary key(ip,port)
);
desc t20;


主键字段应该具备自动递增的特点
每次添加数据  不需要用户手动输入
auto_increment  自动递增
create table t21(id int primary key auto_increment,name varchar(16));

create table t22(id int primary key,name varchar(16));


delete from  仅仅是删除数据   不会重置主键
truncate   初始化表  会重置主键
   delete from tb1;
强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为0,
所以收该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录
delete from tb1 where id > 10;

如果要清空表,使用truncate tb1;
作用:将整张表重置,id重新从0开始记录

 

 

posted @ 2019-08-19 19:06  杨鑫Zz  阅读(349)  评论(0编辑  收藏  举报