zoukankan      html  css  js  c++  java
  • 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开始记录
    
    
  • 相关阅读:
    centos7.3 安装 mysql5.7.13
    linux下MySQL的启动与访问
    使用jquery修改display属性
    浏览器在线预览pdf、txt、office文件
    查看java的jar包源码
    邮件群发器
    公司招聘asp.net程序员(已过期)
    javascript面向对象,实现namespace,class,继承,重载
    javascript window.close() 去掉那讨厌的确认对话框
    如果注定要分别
  • 原文地址:https://www.cnblogs.com/king-home/p/10858412.html
Copyright © 2011-2022 走看看