zoukankan      html  css  js  c++  java
  • 数据类型 包括数字类型字符类型,枚举与集合类型等, 模糊查询 主键 约束条件等

    创建表


    创建表的完整语法

    create table 表名(
    		字段名1 字段类型[(宽度) 约束条件],
    		字段名2 字段类型[(宽度) 约束条件],
    		字段名3 字段类型[(宽度) 约束条件],
    		字段名4 字段类型[(宽度) 约束条件]
    		);
    

    宽度 : 限制数据

    字段类型 : 规定存储数据的类型

    约束条件 : 基于字段类型之上的额外约束

    约束

    not null  不能为空
    unique  唯一:不能出现重复   单列唯一:在同一张表中某个字段的信息不能重复
    default  给某个字段设置默认值(当用户写了的时候用用户的,当用户没有写就用默认值)
    primary key
    unsigned  无正负符号
    zerofill  用0填充不足的位数
    

    注意:

    		1.同一张表内字段名不能重复
    		2.字段名和字段类型都是必须的 中括号内的都是可选的
    		3.最后一个字段语句后不能有逗号
    
    对存储数据的限制
    
    char(1)  只能存一个字符
    		如果超了 mysql会自动帮你截取
    				1.插入的时候 mysql自动截取
    				2.会直接报错(mysql严格模式)
    

    小例子:

    # 修改表中字段
    alter table t5 modify name char not null;
    		# not null 指该字段不能插空
    		
    # 创建表
    create table t6(
    		id int,
    		name char
    		);
    

    使用数据库的准则:能尽量让它少干活就尽量少干活

    数据类型


    ( 字段类型 )

    整型
    浮点型
    字符类型
    日期类型
    枚举与集合类型
    

    整型

    SMALLINT TINYINT INT BIGINT

    整形数据类型 tinyint smallint int bigint
    储存大小(字节) 1bytes 2bytes 4bytes 8bytes
    表示的数字 0 – 2^8-1 0 – 2^16-1 -2^31 – 2^31 -2^63 – 2^63-1

    默认都是带正负号 默认是带有符号的(-128,127)

    超出限制会如何:超出之后只会存最大值或者最小值

    特例:只有整型后面的数字不是用来限制存储数据的长度 而是用来控制展示的数据的位数
    		在定义整型字段的时候不需要指定宽度,默认就是展示最大宽度
    
    int(8):数字不够8位 默认用空格填充,够8位或者8位以上,有多少位显示多少位,但是也不能超出int最大范围
    
    zerofill 用0填充不足的位数
    修改约束条件  不够8位的情况下 用0填充
    

    创建的例子:create table t6(id TINYINT);

    强调:对于整型来说,数据类型后的宽度并不是存储限制,

    而是显示限制,所以在创建表时,

    如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据

    只要是整型 都不需要指定宽度 因为有默认的宽度 足够显示对应的数据

    模糊匹配

    ​ like

    %匹配任意多个字符

    _匹配任意一个字符

    ​ set session 临时有效 只在你当前操作的窗口有效

    ​ set global 全局有效 终生有效

    ​ set global sql_mode = 'STRICT_TRANS_TABLES';

    ​ 设置完之后 你只需要重新退出客户端再次进入即可

    浮点型

    float(255,30)  总共255位 小数部分占30位
    double(255,30) 总共255位 小数部分占30位
    decimal(65,30) 总共65位 小数部分占30位
    

    验证精确度

    create table t12(id FLOAT(255,30));
    create table t13(id DOUBLE(255,30));
    create table t14(id DECIMAL(65,30));
    
    insert into t12 values(1.111111111111111111111111111111);
    insert into t13 values(1.111111111111111111111111111111);
    insert into t14 values(1.111111111111111111111111111111);
    

    精确度

    float < double < decimal

    通常情况下会将数字在数据库存储上变成字符串来方便存储 不需要考虑精确度带来的问题

    字符类型

    char Vs varchar

    char定长

    1.浪费硬盘空间
    2.存取速度快
    
    char(django中如果你想用char需要你自己定义)
    

    varchar变长

    1.节省硬盘空间
    2.存取速度慢(较于char比较慢)
    	存的时候 需要给数据讲一个记录长度的报头
    	取的时候 需要先读取报头才能读取真实数据
    	
    varchar(django默认只有varchar类型)
    

    char后面的数字是用来限制存储数据的长度的

    char(4) varchar(4)
    取的时候方便 取的时候比较繁琐了
    直接按固定的长度取即可 无法知道数据到底多长
    create table t15(name char(4));
    create table t16(name varchar(4));
    char_length()
    
    char(4)  # 最大只能存四个字符 超出来会直接报错  如果少了 会自动用空格填充
    varchar(4)   # 最大只能存四个字符 超出来会直接报错  如果少了 有几个存几个
    
    mysql在存储char类型字段的时候 硬盘上确确实实存的是固定长度的数据
    但是再取出来的那一瞬间 mysql会自动将填充的空格去除
    可以通过严格模式 来修改该机制 让其不做自动去除处理
    

    日期类型

    类型 输出格式
    date YY-MM-DD
    datetime YY-MM-DD hh:mm:ss
    year YY
    time hh:mm:ss

    枚举与集合类型

    限制某个字段能够存储的数据内容

    ​ 枚举(enum):多选一(男女性别,婚否...)

    ​ 集合(set):多选多但是也可以多选一(爱好...)

    如果你写的信息不在选择范围内会直接报错

    约束条件:

    not null  不能为空
    unique  唯一:不能出现重复
    				单列唯一:在同一张表中某个字段的信息不能重复
    				联合唯一:在语句的最后 用括号的形式 表示哪几个字段组合的结果是唯一的
    default  给某个字段设置默认值(当用户写了的时候用用户的,当用户没有写就用默认值)
    primary key
    unsigned  无正负符号
    zerofill  用0填充不足的位数
    ...
    

    小例子:create table t17(id int unique,name char(16) default 'jason');

    gender enum('male','female','others') default 'male'

    往表中插入数据的时候 可以指定字段进行插入 不需要全部都插

    insert into t17(name,id) values('egon',2);

    单列唯一:在同一张表中某个字段的信息不能重复
    联合唯一:在语句的最后 用括号的形式 表示哪几个字段组合的结果是唯一的
    

    联合唯一

    ​ ip int

    ​ port int

    ​ unique(ip,port)

    create table server(
    		id int,
    		ip char(16),
    		port int,
    		unique(ip,port)
    		)
    

    primary key 主键

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

    create table t18(id int primary key);

    Innodb存储引擎在建表的时候 要求表必须有且只有一个主键

    !!!!!!!!!!!!!!!!!ps:innodb引擎中一张表有且只有一个主键!!!!!!!!!!!!!!!!!!!!!!!

    当你没有设置主键的时候
    1.会自上往下寻找非空且唯一的约束字段自动将其升级为主键字段
    2.当你的表中没有任何约束字段的时候,Innodb会使用内部隐藏一个主键字段
    			无法利用该主键字段加快查询
    			查询数据的速度就会很慢
    			类似于一页一页的翻书
    
    通常情况下,每张表都必须有一个能够唯一标识数据的编号字段
    id 这个id字段一般也是主键字段
    primary key也是innodb引擎查询必备的索引
    
    把索引当成书的目录
    

    小例子:

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

    主键字段到底设置给谁呢???

    ​ 通常每张表里面都应该有一个id字段

    ​ 并且应该将id设置为表的主键字段

    联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键!!!

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

    主键字段应该具备自动递增的特点

    每次添加数据 不需要用户手动输入

    auto_increment 自动递增

    ​ 该约束条件只能加载被设置成key的字段上,不能单独使用

    ​ 通常都是跟primary key联合使用

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

    主键设置成自增之后 id永远是增加 不会因为你数据的删除而重置

    delete from 仅仅是删除数据 不会重置主键

    如果你想重置id

    truncate 初始化表 会重置主键

  • 相关阅读:
    Java 发送邮件工具类
    Java AES加密算法工具类
    Java MD5加密算法工具类
    Java 发送 Https 请求工具类 (兼容http)
    Java 发送 Http请求工具类
    POI Excel 导入导出重点
    POI IndexedColors 编码 与 颜色 对照
    java POI Excel 单元格样式
    java Excel 自动调整列宽
    POI CellStyle 中样式覆盖问题
  • 原文地址:https://www.cnblogs.com/PowerTips/p/11384909.html
Copyright © 2011-2022 走看看