MySQL——数据类型

创建表的完整语句

# 语法
create table 表名(
字段名1 类型[(宽度),约束条件],
字段名2 类型[(宽度),约束条件],
字段名1 类型[(宽度),约束条件]
)
# 注意点:
1. 在同一张表中,字段名不能相同
2. 宽度和约束条件可选,字段名和类型是必须的
3. 最后一个字段不能加逗号

宽度限制

    create database day38;
    use day38;
    create table t1(name char);
    insert into t1 values('jason');
        # 1.能够成功但是显示的时候只显示一位
        # 2.第二种情况,直接报错:Data too long for column 'name' at row 1

1557730624574

约束条件:

create table t2(name char(16) not null);

1557730873050

总结:类型与约束条件区别

# 类型:限制字段必须以什么样的数据类型存储
# 约束条件:约束条件是在类型之外天剑一种额外的限制

数据类型

整型:

​ 分类:TINYINT , SMALLINT , MEDIUMINT, INT , BIGINT
​ 字节: 1 2 3 4 8

​ 作用:年龄,等级信息

​ TINYINT :默认有正负号

1557731500576

int 类型;

create table t5(id int);
alter table t5 modify id int unsigned;

1557731793000

注意:

# 给整型设置宽度:
#	唯独整型字段在设置宽度的时候,限制不是存储宽度,而是显示宽度
create table t6(id int(8));
# 显示正常时,不够8位用0填充,如果超出8位则正常显示
create table t7(id int(8) zerofill)

注:唯独整型字段在设置宽度的时候,限制的不是存储宽度,而是显示宽度,在创建整型字段的时候,不需要知道字段了宽度(整型的显示宽度)
like 模糊查询:
% :匹配任意数量的任意字符
_ :匹配单个数量的任意字符
 show variables like "%mode%";


设置严格模式:
set session:当前窗口有效
set global: 全局有效
set global sql_mode = "STRICT_TRANS_TABLES";
# 设置完成后需要退出客户端,重新登录客户端即可,不需要重启服务端


浮点型

分类:
float
double
decimal

作用:薪资,体重,身高

浮点类型(5,3)# 总长度为5 位其中小数占3位,整数站两位

float(255,30)
double(255,30)
decimal(255,30)
三者区别:
	精度不同:
		精度由低到高:
			float
			double 
			decimal
        create table t10(id float(255,30));
        create table t11(id double(255,30));
        create table t12(id decimal(65,30));


        insert into t10 values(1.111111111111111111111111111111);
        insert into t11 values(1.111111111111111111111111111111);
        insert into t12 values(1.111111111111111111111111111111);

1557734721146

字符类型
        char:定长
        varchar:变长

    create table t13(name char(4));  # name字段固定存储四个长度,如果超了直接报错,如果不够默认用空格填充
    create table t14(name varchar(4)); # name字段如果超了直接报错,如果不够按实际长度存储

    insert into t13 values('a');  'a    '
    insert into t14 values('a');  'a'

    char_length(name) # 统计字段值所对应的长度
    select char_length(name) from t13;
    select char_length(name) from t14;

    # 这个是修改操作
    set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";


char VS varchar
char(4) 定长
优点:存取速度都快,简单粗暴
缺点:浪费空间
egonjxx lxx ow

1557735467530

1557735477641

日期类型

date 年月日
time 时分秒
daetime 年月日时分秒
year 年

create table t15(
	id int,
	birth date,
	class_time time,
	reg_time datetime,
	yy year
)
insert into t15 values(1,"2000-01-21","11:11:11","2019-01-21 11:11:11","2019");

1557736539767

枚举(enum):多选一
create table t16(
    id int,
    name char(6),
    gender enum('male','female','others')
);
insert into t16 values(1,'egon','xxx');


1557736595736

# 集合(set):多选多,虽然是多选多但是支持只选一个
create table t17(
id int,
name char(6),
gender enum('male','female','others'),
hobby set('run','dbj','sing')
);
insert into t17(1,'tank','male','sing,dbj');
insert into t17(1,'tank','male','dbj');


1557737661090

约束条件:

# primary Key(PK) 标识该字段为该表的主键,可以是唯一标识记录
# frorgin Key(fk) 标识该字段为该表的外键
# not null 标识该字段不能为空
# unique key(uk) 标识该字段的值是唯一的
# auto_increment 标识该字段的值是自动增长(整数类型,而且为主建)
# default:为字段设置默认值

# unsigned:无符号
# zerofill: 使用0填充

not null:
限制字段不能为空:
create table t21(id int,name char(4) not null);

default:设置默认值
create table t21(
id int,
name char(4),
gender enum('male','female','others')default 'male'
);




unique
某个字段对于的值在当前表中是唯一的
# 单列唯一
create table t22(
	id int unique,  # 单个字段
    name char(16)
);
insert into t22 values(1,'egon'),(1,'tank');
insert into t22 values(1,'egon'),(2,'tank');

1557738693972

 # 服务器IP和Port
 # 联合唯一:
 create table t23(
 	host char(16);
    port int,
    unique(host,port)
 )
 insert into t23 values("127.0.0.1",8080),('127.0.0.1',8081);
  insert into t23 values("127.0.0.1",8080),('127.1.1.1',8081);
  insert into t23 values('127.0.0.1'8080),('127.0.0.1',8080);
  # 检查联合是否相同
  

1557739597230

# primary key
# 主键:单从限制条件上来说,它就相当于not+null非空唯一
create table t26(
id int primary key,
name char(16)
)engine = innodb;
innodb引擎中,所有的表都必须有且只有一个主键,它是浓浓的吧引擎用来组织数据的依据

强调

1 一张表必须有且只有一个主键,如果你没有设置主键

那么会从上往下搜索,直到遇到一个非空且唯一的字段自动将其设置成主键

1557744018680

2, 如果表里面没有指定任何可以设定的主键字段,那么innodb会采用自己默认的隐藏字段作为主键,隐藏意味着你在查询的时候无法根据这个主键字段加速查询。
索引:类似于数的目录,没有主键就相当于一页一页的翻查着

3,一张表中通常都应该有一个id字段,并且通常将该id字段设置成主键

#自增:auto_crement
create table t27(
id int primary key auto_increment,
name char(16)
);
inser t1 into t13('jason'),('jason'),('jason')#id字段从1开始递增
注意:auto_increment通常都是加在主键上,并且只能给设置为key的字段加
	删除后还是从最后一个数开始,保留原序号id不会置为0
	


补充

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

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

原文地址:https://www.cnblogs.com/king-home/p/10858412.html