zoukankan      html  css  js  c++  java
  • MySQL数据库之表相关

    阅读目录

    一、存储引擎介绍

    存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制

    https://www.cnblogs.com/baicai37/p/12827274.html

    二、表介绍

    表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段

     id,name,qq,age称为字段,其余的,一行内容称为一条记录

    三、创建表

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

    create table t6(
        id int,
        name char,
    ); 报错

    创建表示例:

    mysql> create table t1(
        -> id int,
        -> name varchar(50),
        -> password varchar(50)
        -> );
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> show tables;
    +-----------------------+
    | Tables_in_userinfo_db |
    +-----------------------+
    | baseinfo              |
    | t1                    |
    +-----------------------+
    2 rows in set (0.00 sec)
    
    mysql> desc t1;
    +----------+-------------+------+-----+---------+-------+
    | Field    | Type        | Null | Key | Default | Extra |
    +----------+-------------+------+-----+---------+-------+
    | id       | int(11)     | YES  |     | NULL    |       |
    | name     | varchar(50) | YES  |     | NULL    |       |
    | password | varchar(50) | YES  |     | NULL    |       |
    +----------+-------------+------+-----+---------+-------+
    3 rows in set (0.02 sec)
    
    mysql>
    """补充"""
    # 宽度
        一般情况下指的是对存储数据的限制
        create table t7(name char);  默认宽度是1
        insert into t7 values('jason');
        insert into t7 values(null);  关键字NULL
            针对不同的版本会出现不同的效果
                5.6版本默认没有开启严格模式 规定只能存一个字符你给了多个字符,那么我会自动帮你截取
                5.7版本及以上或者开启了严格模式 那么规定只能存几个 就不能超,一旦超出范围立刻报错 Data too long for ....
    """严格模式到底开不开呢?"""
    MySQL5.7之后的版本默认都是开启严格模式的
    使用数据库的准则:
        能尽量少的让数据库干活就尽量少 不要给数据库增加额外的压力
    
    # 约束条件 null  not null不能插入null
    create table t8(id int,name char not null);
    
    """
    宽度和约束条件到底是什么关系
        宽度是用来限制数据的存储
        约束条件是在宽度的基础之上增加的额外的约束
    """

    四、严格模式

    # 如何查看严格模式
    show variables like "%mode";
    也可以使用:
    select @@sql_mode;
    
    模糊匹配/查询
        关键字 like
            %:匹配任意多个字符
            _:匹配任意单个字符
    
    # 修改严格模式
        set session  只在当前窗口有效
        set global   全局窗口有效(重启MySQL后失效)
    要想永久有效要在my.ini配置文件中的mysqld下的sql_mode修改
      
    #启用严格模式 #NO_ENGINE_SUBSTITUTION非严格模式 set global sql_mode = 'STRICT_TRANS_TABLES'; 修改完之后 重新进入服务端即可

    五、数据类型以及枚举和集合用法

    https://www.cnblogs.com/baicai37/p/12828292.html

    六、完整性约束

    https://www.cnblogs.com/baicai37/p/12831515.html

    七、表相关操作

    对字段操作:

    语法:
    1. 修改表名
          ALTER TABLE 表名 
                              RENAME 新表名;
    
    2. 增加字段
          ALTER TABLE 表名
                              ADD 字段名  数据类型 [完整性约束条件…],
                              ADD 字段名  数据类型 [完整性约束条件…];
          ALTER TABLE 表名
                              ADD 字段名  数据类型 [完整性约束条件…]  FIRST;              #添加到最前面
          ALTER TABLE 表名
                              ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;   #添加到指定字段名之后
                                
    3. 删除字段
          ALTER TABLE 表名 
                              DROP 字段名;
    
    4. 修改字段(名称、类型或完整性约束)只有完整性约束条件可写可不写,其他必写
          ALTER TABLE 表名 
                              MODIFY  字段名 数据类型 [完整性约束条件…];     #修改字段类型
          ALTER TABLE 表名 
                              MODIFY  字段名 数据类型 [完整性约束条件…] first;   #将字段修改为第一字段
          ALTER TABLE 表名 
                              MODIFY  字段名 数据类型 [完整性约束条件…] after 字段名;  #将字段放在指定字段名之后 
          ALTER TABLE 表名 
                              CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
          ALTER TABLE 表名 
                              CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

    对表本身的操作:

    #创建表
    create table 表名(
                 字段名1 类型[(宽度) 约束条件],
                 字段名2 类型[(宽度) 约束条件],
                 字段名3 类型[(宽度) 约束条件]
    );
    
    show tables;                                                          #查看当前数据库里有多少张表;
    desc t1;(describe)                                                   #查看t1表结构;
    
    flush  privileges;                                                     #刷新权限;
    drop  table t1;                                                       #删除表;
    
    show engines;查看MySQL存储引擎;
    show variables like '%storage_engine%'#查看MySQL默认的存储引擎;
    alter table t1  engine=innodb;                                  #修改MySQL t1表存储引擎;

     八、复制表

    复制表结构+记录 (key不会复制: 主键、外键和索引)
    create table 表名 select * from 旧表;  #只复制旧表内记录,以及表结构,不能复制主键 外键 ... mysql
    > create table new_service select * from service; #根据条件复制旧表 mysql> create table new1_service select * from service where id=1; #只复制旧表中id=1的记录以及表结构,不能复制主键、外键... Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
    create table 表名 like 旧表; #不能复制旧表记录、主键、外键,只复制旧表结构 mysql
    > create table t4 like employees;
  • 相关阅读:
    sql2slack alash3al 开源的又个轻量级工具
    pgspider fetchq 扩展docker镜像
    godns 集成coredns 的demo
    godns 简单dnsmasq 的dns 替换方案
    aviary.sh 一个基于bash的分布式配置管理工具
    使用coredns 的template plugin实现一个xip 服务
    nginx 代理 coredns dns 服务
    基于nginx proxy dns server
    几个不错的geodns server
    spring boot rest api 最好添加servlet.context-path
  • 原文地址:https://www.cnblogs.com/baicai37/p/12828489.html
Copyright © 2011-2022 走看看