zoukankan      html  css  js  c++  java
  • MySQL中的数据类型,列选项,视图


    列的数据类型

    整型

    类型 取值范围
    tinyint -128 - 127
    smallint -32768 - 32767(几万)
    mediumint -8388608 - 8388607(几百万)
    integer -2147484468 - 2147483647(几十亿)
    bigint -9223372036854775808 - 9223372036854775807(天文数字)

    小数类型

    decimal[精度,小数位数]
    小数位数是定数;数值是什么就是什么,不会进行类似于四舍五入,不会存储近似值。

    浮点类型

    float[长度,小数位数]
    double[长度,小数位数]
    float的小数位数不是固定的;超出存储范围,近似值进行存储。

    小结:

    • decimal用来存精确值、定数。
    • float存储可以四舍五入的。

    位类型

    bit[(长度)]
    场景:
    这里写图片描述

    字符串类型

    • char 0-255
    • varchar 0-65535 (长度指的是字符的长度。最常用varchar)
    • long varchar:2^24-1
    • longtext:4G个字符

    日期类型

    • date 3字节
    • datetime 8字节
    • time 3字节
    • timestamp 4字节
    • year[(2) | (4)] 1字节

    二进制大对象类型

    • binary: 255个字符
    • varbinary :65535个字符
    • blob: 65535字符 ,比如存储照片
    • long varbinary: 2的24次方减1个字符
    • long blob: 2的32次方-1个字符

    数字列上的列选项

    • unsigned:无符号的,表示只允许正数。
    • zerofill:填充0
    • auto_increment:自动增长。只适应于整数类型。一个表中只有一个列可以是自动增长的。

    这里写图片描述

    临时表

    临时表是一张表,用来临时保存一些数据。它只对创建它的用户可见。当会话结束时,MySQL自动删除临时表。
    保存这些数据的时候,尽量少的占用资源,删除数据的时候,尽量少的占用资源。
    临时表的核心:建立和删除表以及里面的数据时,消耗资源非常小。
    例:创建临时表sumpenalties,保存所有罚款的总和。

    CREATE TEMPORARY TABLE sumpenalties(
    total DECIMAL(10,2)
    ); 

    CTAS举例

    if not exit :强制不显示出错消息。

    这里写图片描述

    根据已有的表创建新表

    结构一样。
    create table copy_teams LIKE teams;(空表,不带数据)
    create table copy_teams_1 AS select * from teams;(带数据)
    --》PS:这个SELECT可以非常非常的复杂

    default

    这里写图片描述
    这里写图片描述

    表选项

    例26: 创建表city_names,其主键列从10开始编号。

    CREATE TABLE city_names(
      seqno INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
      NAME VARCHAR(30) NOT NULL
    ) AUTO_INCREMENT = 10;
    
    INSERT INTO city_names VALUES(NULL,'北京');
    INSERT INTO city_names VALUES(NULL,'上海');
    INSERT INTO city_names VALUES(NULL,'天津');
    SELECT * FROM city_names;

    这里写图片描述
    可以看到,序号是从10开始的。

    comment:给表添加注释

    CREATE TABLE mycomm(
    column_a  INTEGER
    ) COMMENT '测试表';

    约束,非空,主键,唯一键

    约束的类型

    • NOT NULL:非空约束,强烈建议使用,这个列上不能有空值。
    • UNIQUE:唯一性约束。这个列的值唯一,可以有多个空值。一个表可以有多个unique。
    • PRIMARY KEY:主键约束,一个表只有一个,这个列的数值唯一。不能为空。
    • FOREIGN KEY:外键约束。
    • CHECK:检查约束

    约束定义的时间:

    • 使用CREATE TABLE语句
    • 表已经创建完了,使用ALTER TABLE语句

    外键约束

    • 外键是一个约束
    • 外键约束什么呢?
      • 一个表的一个列的数值来自于另外一个表的一个列的数值,成绩表里面的学号这个列里面的所有的数值(学号),来自于学生表里面的学号这个列里面的数值。
    • 外键引用的一定是另外一个表的主键或者唯一键。

    on delete(update)

    外键约束

    • 1.从表insert数据,会检查主表,看一下外键列的数据是否来自于主键列。
    • 2.对主表进行delete时,检查外表,看一下外表中是否引用了主表中要删除的数据。

    只要有引用,主表就受到了限制。
    主表删除数据,子表引用了主表的数据。

    enum枚举、set

    create table t1(id int,name varchar(10),sex enum('男','女'));      --》只能取男或者女
    desc t1;
    insert into t1 values(1,'张三','男');
    insert into t1 values(2,'李四','女');
    insert into t1 values(3,'张三','M');

    –》会报错,因为只能是’男’或者’女’!

    这里写图片描述

    enum和set的异同

    不同:

    • set(‘one’,’two’,’three’,’four’); –》可以同时取其中的多个。
    • enum(‘男’,’女’)); –》只能取男或者女

    相同点:

    • 都是对数据库的规范;
    • 后面都不接数据类型

    check约束

    check(id>100);

    check约束的括号里面可以是巨复杂的表达式。

    alter、drop table的风险

    删除表以前:

    • 1.确认这个表没有人在使用,确实是一个废除的表。
    • 2.确认是这个数据库的表,别删错了别的表。

    (建议:status看一下此时的状态!!再删!)

    删除临时表要加temporary:

    这里写图片描述

    表的修改操作

    alter修改表的操作

    • 1.增加一个列
    • 2.删除一个列
    • 3.修改一个列的数据类型 varchar-int
    • 4.修改一个列的数据类型的宽度 varchar(10) varchar(20)

    添加一个新列时,默认是加在最后。

    mysql>alter table t1 add COLUMN b_date date not null after name;

    –》在name列后面添加一个新列b_date
    这里写图片描述

    删除列的语句

    mysql>alter table t1 drop column b_date;
    --》删除b_date列

    修改列的数据类型

    mysql>alter table t1 modify sex int;
    --》把sex列的数据类型宽度

    修改列的数据类型的宽度

    mysql>alter table t1 modify sex varchar(10);
    --》把sex列的宽度改为varchar(10);

    对表进行约束的添加和删除

    联合主键、几个列合起来形成一个主键。

    风险分析

    • 1.数据字典级别改一下。速度快。
    • 2.对100万个数据块进行修改。速度慢。在十分钟的时间里是不能操作的。

    视图

    视图基本定义

    • 视图是一个逻辑表,它本身并不包含数据。通过它,可以展现基表的部分数据。
    • 用来创建视图的表叫做基表BASE TABLE
    • 视图是作为一个SELECT语句保存在数据字典中的。

    视图语法

    -CREATE  [OR REPLACE] VIEW view_name [(column_list)]    
    -AS  select_statement  
    - [WITH [CASCADED | LOCAL] CHECK OPTION]
    -OR REPLACE:如果视图已经存在则替换它

    视图基本功能

    • 查询接口
    • 权限控制
    create view v_players as
    select 语句

    视图别名

    create or replace view 视图名(别名,......)
    as select 
    字段,......
    from 表名

    通过视图修改表

    此方法不常用。
    例:
    从视图中cplayers中删除联盟会员号码为6524的球员 。

    DELETE FROM cplayers
    WHERE leagueno=‘6524’; 

    因为视图本身没有数据,因此对视图进行的dml操作最终都体现在基表中。

    with check option约束

    对于可以执行DML操作的视图,定义时可以带上WITH CHECK OPTION约束。该约束的作用是:对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制 。
    例:创建视图,包含1960年之前出生的所有球员(老兵)。

    CREATE OR REPLACE VIEW veterans
    AS SELECT *
    FROM players
    WHERE birth_date < '1960-01-01'
    WITH CHECK OPTION;

    视图权限

    示例1:以用户newroot执行:

    CREATE USER  'demo'@'%'   IDENTIFIED BY 'demo'; 

    创建视图,视图的定义者是demo

    CREATE OR REPLACE
       DEFINER='demo'@'%'
       SQL SECURITY DEFINER
    VIEW cplayers  
    AS SELECT playerno,leagueno
           FROM players
         WHERE leagueno IS NOT NULL; 

    把视图的select权限授给demo :

    GRANT SELECT ON tennis.cplayers  TO  'demo'@'%' ;

    例:以用户newroot执行:

    CREATE OR REPLACE
      SQL SECURITY  DEFINER
    VIEW cplayers  
    AS SELECT playerno,leagueno
         FROM players
        WHERE leagueno IS NOT NULL;
  • 相关阅读:
    php简单的server登陆验证
    CentOS更新php(PHP 5.2+ is required问题)
    CentOS 5.5 x86_64下安装oci8与pdo_oci扩展
    httpd.conf详解
    Thinkphp中去除URL里的index.php
    Oracle使用虚拟表dual一次插入多条记录【摘录】
    【问题】apache目录403错误
    mysql中存储引擎MyISAM与InnoDB的一些区别
    从开辟蓝海到保卫蓝海(三)
    答MM问:经济泡沫破了不更好吗?
  • 原文地址:https://www.cnblogs.com/lpeng94/p/12546475.html
Copyright © 2011-2022 走看看