zoukankan      html  css  js  c++  java
  • python 之 数据库(创建表的完整语法、基本数据类型)

    10.4 创建表的完整语法

    create table 表名(
    字段名1 类型[(宽度) 约束条件],
    字段名2 类型[(宽度) 约束条件],
    字段名3 类型[(宽度) 约束条件]
    );
    #类型:使用限制字段必须以什么样的数据类型传值
    #约束条件:约束条件是在类型之外添加一种额外的限制

    注意:

    1、在同一张表中,字段名不能重复 2、宽度和约束条件可选,字段名和类型是必须的 3、最后一个字段后不加逗号

    10.5 基本数据类型

    10.51 整型类型

    1、作用:id号,各种号码,年龄,等级 2、分类:tinyint   int   bigint

    3、默认整型都是有符号的

    #tinyint:小整数值(1字节)  范围(有符号):(-128,127)  范围(无符号):(0,255)
    create table t1(id tinyint);
    insert into t1 values(-10),(128),(-129);    # id -10 127 -128create table t2(id tinyint unsigned);       # 无符号的
    insert into t2 values(-1),(256);            # id 0 255
    ​
    #int:大整数值(4字节)  范围(有符号):(-2147483648,2147483647)    范围(无符号):(0,4294967295)
    create table t3(x int unsigned);
    insert into t3 values(4294967296);          # x 4294967295create table t4(x int(12) unsigned);        #显示宽度12     #显示宽度,并非存储宽度
    insert into t4 values(4294967296123);       # x 4294967295

    4、强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表示,如果字段采用的是整型类型,完全无需指定显示宽度,默认的显示宽度,足够显示完整当初存放的数据

    显示时,不够8位用0填充,如果超出8位则正常显示

    create table t5(x int(8) unsigned zerofill);
    insert into t5 values(4294967296123);       # x  4294967295
    insert into t5 values(1);                  # x  00000001

    10.52 修改sql_mode

    # 查看sql_mode
    mysql> show variables like "%sql_mode%";
    +----------------------------+---------------------+
    | Variable_name              | Value               |
    +----------------------------+---------------------+
    | sql_mode                  NO_ENGINE_SUBSTITUTION |
    +----------------------------+---------------------+
    ​
    #修改sql_mode为严格模式:在该模式下,如果插入的数据超过限制,则会立即报错
    mysql> set global sql_mode="strict_trans_tables";

    10.53 浮点型

    作用:存储身高、体重、薪资 分类:float double decimal 相同点: 对于三者来说,都能存放30位小数, 不同点: 1、精度的排序从低到高:float, double, decimal 2、float与double类型能存放的整数位比decimal更多

    create table t9(x float(255,30));   #255最大总数位   30最大小数位
    create table t10(x double(255,30));
    create table t11(x decimal(65,30)); #65最大总数位    30最大小数位
    ​
    insert into t9 values(1.111111111111111111111111111111);
    insert into t10 values(1.111111111111111111111111111111);
    insert into t11 values(1.111111111111111111111111111111);
    ​
    mysql> select * from t9;
    +----------------------------------+
    | x                                |
    +----------------------------------+
    | 1.111111164093017600000000000000 |
    +----------------------------------+
    ​
    mysql> select * from t10;
    +----------------------------------+
    | x                                |
    +----------------------------------+
    | 1.111111111111111200000000000000 |
    +----------------------------------+
    ​
    mysql> select * from t11;
    +----------------------------------+
    | x                                |
    +----------------------------------+
    | 1.111111111111111111111111111111 |
    +----------------------------------+

    10.54 字符类型

    作用:姓名,地址,描述类的信息

    分类:char 定长 varchar 变长

    强调:字符的宽度限制单位是字符个数

    create table t12(x char(4));            # 超出4个字符则报错,不够4个字符则用空格补全成4个字符
    create table t13(y varchar(4));         # 超出4个字符则报错,不够4个字符那么字符有几个就存几个
    ​
    insert into t12 values('hello');        #报错
    insert into t13 values('hello');        #报错
    ​
    insert into t12 values('a'); #'a    '   看不到空格,需要设置sql_mode
    insert into t13 values('a'); #'a'set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";# char_length(x)显示字段x对应的长度
    select char_length(x) from t12; #4
    select char_length(y) from t13; #1

    注意:

    针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中,但会在读出结果时自动去掉末尾的空格,但两种情况不同:

    mysql> select * from t14 where name="lxx";      # name字段明确地等于一个值,该值后填充空格是没有用
    mysql> select * from t14 where name like "lxx__";  # name字段模糊匹配一个值,该值后填充空格是有用的

    对比char与varchar:

    name char(5) 缺点:浪费空间 优点:存取速度都快 egon_ alex_ lxx__ wxx__ yx___

    ame varchar(5) 缺点: 存取速度都慢 优点: 节省空间 (1bytes+egon)(1bytes+alex)(1bytes+lxx)(1bytes+wxx)(1bytes+yx)

    10.55 日期类型

    作用:时间相关

    分类:date:1999-01-27 time: 11:11:11 datetime:1999-01-27 11:11:11 year:1999

    create table student(
        id int,
        name char(16),
        born_year year,
        birth date,
        class_time time,
        reg_time datetime
    );
    insert into student values(1,'egon','2000','2000-01-27','08:30:00','2013-11-11 11:11:11');
    mysql> select * from student;
    +------+------+-----------+------------+------------+---------------------+
    | id   | name | born_year | birth      | class_time | reg_time            |
    +------+------+-----------+------------+------------+---------------------+
    |    1 | egon |      2000 | 2000-01-27 | 08:30:00   | 2013-11-11 11:11:11 |
    +------+------+-----------+------------+------------+---------------------+

    10.56 枚举与集合类型

    作用与分类:枚举enum:多选一个 集合set:多选多(也可多选一)

    create table teacher(
        id int,
        name char(16),
        sex enum('male','female','others'),
        hobbies set('play','read','music','piao')
    );
    insert into teacher values(1,'egon','male','play,piao');
    select * from teacher;
    +------+------+------+-----------+
    | id   | name | sex  | hobbies   |
    +------+------+------+-----------+
    |    1 | egon | male | play,piao |
    +------+------+------+-----------+
  • 相关阅读:
    转:Visio之取消自动对齐与粘附
    转:Excel怎样修改图例名称
    一张图说明学习率和loss之间的关系
    转:loss不收敛或不下降问题处理经验
    N-UCLA骨架数据可视化
    转:IEEE论文投稿流程(格式说明,新手指南,模板)
    Ubuntu下无法安装sun-java6-jdk的解决办法
    Git 学习笔记一
    轮播特效小项目总结
    第9次作业--接口及接口回调
  • 原文地址:https://www.cnblogs.com/mylu/p/11279391.html
Copyright © 2011-2022 走看看