• 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;
  • 相关阅读:
    java-version
    Centos7使用google-Chrome浏览器
    sign_and_send_pubkey: signing failed: agent refused operation
    删除带中划线的数据库
    yum update报错RPM数据库问题
    Centos的timedatectl
    /var/lib/docker/overlay2/db72dadf047395c178feb0eaedd932b48e283abcaa5a870c0c746bab8ee6f76a: no such file or directory
    /bin/bash^M: 坏的解释器: 没有那个文件或目录
    repeat()函数
    (Problem 47)Distinct primes factors
  • 原文地址:https://www.cnblogs.com/baicai37/p/12828489.html
Copyright © 2020-2023  润新知