• Mysql数据库对表的基本操作


    目录

    一.表基本操作

    1.当前数据库内创建表

    2.查看表

    3.删除表

    4.修改表结构

    5.复制表(结构)

    二.表约束创建

    1.约束的作用

    2.约束的类型

    3.演示


    一.表基本操作

    1.当前数据库内创建表

     CREATE TABLE 表名(
        列名 列数据类型,
        列名 列数据类型);

    1. mysql> create table stable(
    2. -> name char(10),
    3. -> id int);
    4. Query OK, 0 rows affected (0.02 sec)

    常用数据类型

    2.查看表

    (1)查看数据库中的表

    1. mysql> show tables from SLB;
    2. +---------------+
    3. | Tables_in_SLB |
    4. +---------------+
    5. | stable |
    6. | t1 |
    7. | t2 |
    8. | t3 |
    9. | t4 |
    10. +---------------+
    11. 5 rows in set (0.00 sec)

    (2)查看表结构

    #describe 表名

    #show columns from 表名

    1. mysql> describe SLB.stable;
    2. +-------+----------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+----------+------+-----+---------+-------+
    5. | name | char(10) | YES | | NULL | |
    6. | id | int | YES | | NULL | |
    7. +-------+----------+------+-----+---------+-------+
    8. 2 rows in set (0.00 sec)
    9. mysql> show columns from SLB.stable;
    10. +-------+----------+------+-----+---------+-------+
    11. | Field | Type | Null | Key | Default | Extra |
    12. +-------+----------+------+-----+---------+-------+
    13. | name | char(10) | YES | | NULL | |
    14. | id | int | YES | | NULL | |
    15. +-------+----------+------+-----+---------+-------+
    16. 2 rows in set (0.01 sec)

    (3)垂直显示表中各列信息

    1. mysql> show create table SLB.stable\G;
    2. *************************** 1. row ***************************
    3. Table: stable
    4. Create Table: CREATE TABLE `stable` (
    5. `name` char(10) DEFAULT NULL,
    6. `id` int DEFAULT NULL
    7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    8. 1 row in set (0.00 sec)

    3.删除表

    drop table 表名

    1. mysql> drop table stable;
    2. Query OK, 0 rows affected (0.01 sec)
    3. mysql> show tables;
    4. +---------------+
    5. | Tables_in_SLB |
    6. +---------------+
    7. | t1 |
    8. | t2 |
    9. | t3 |
    10. | t4 |
    11. +---------------+
    12. 4 rows in set (0.01 sec)

    4.修改表结构

    (1)修改列类型:ALTER table 表名 modify 列名 列数据类型

    1. mysql> desc t1;
    2. +-------+----------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+----------+------+-----+---------+-------+
    5. | id | int | YES | | NULL | |
    6. | name | char(10) | YES | | NULL | |
    7. +-------+----------+------+-----+---------+-------+
    8. 2 rows in set (0.00 sec)
    9. mysql> ALTER table t1 modify id char(20);
    10. Query OK, 0 rows affected (0.02 sec)
    11. Records: 0 Duplicates: 0 Warnings: 0
    12. mysql> desc t1;
    13. +-------+----------+------+-----+---------+-------+
    14. | Field | Type | Null | Key | Default | Extra |
    15. +-------+----------+------+-----+---------+-------+
    16. | id | char(20) | YES | | NULL | |
    17. | name | char(10) | YES | | NULL | |
    18. +-------+----------+------+-----+---------+-------+
    19. 2 rows in set (0.00 sec)

    (2)修改列名:ALTER table t1 change 原列名 新列名 列数据类型

    1. mysql> ALTER table t1 change id stuid char(20);
    2. Query OK, 0 rows affected (0.01 sec)
    3. Records: 0 Duplicates: 0 Warnings: 0
    4. mysql> desc t1;
    5. +-------+----------+------+-----+---------+-------+
    6. | Field | Type | Null | Key | Default | Extra |
    7. +-------+----------+------+-----+---------+-------+
    8. | stuid | char(20) | YES | | NULL | |
    9. | name | char(10) | YES | | NULL | |
    10. +-------+----------+------+-----+---------+-------+
    11. 2 rows in set (0.00 sec)

    5.复制表(结构)

    create table 新表名 like 被复制表名(源表) 

    1. mysql> desc stable;
    2. +-------+----------+------+-----+---------+-------+
    3. | Field | Type | Null | Key | Default | Extra |
    4. +-------+----------+------+-----+---------+-------+
    5. | id | int | YES | | NULL | |
    6. | name | char(20) | YES | | NULL | |
    7. +-------+----------+------+-----+---------+-------+
    8. 2 rows in set (0.01 sec)
    9. mysql> create table t1 like stable;
    10. Query OK, 0 rows affected (0.06 sec)
    11. mysql> desc t1;
    12. +-------+----------+------+-----+---------+-------+
    13. | Field | Type | Null | Key | Default | Extra |
    14. +-------+----------+------+-----+---------+-------+
    15. | id | int | YES | | NULL | |
    16. | name | char(20) | YES | | NULL | |
    17. +-------+----------+------+-----+---------+-------+
    18. 2 rows in set (0.00 sec)

    create table 新表名 select * from 被复制表名(源表) 

    1. mysql> create table t2 select * from stable;
    2. Query OK, 0 rows affected (0.01 sec)
    3. Records: 0 Duplicates: 0 Warnings: 0
    4. mysql>
    5. mysql> desc t2;
    6. +-------+----------+------+-----+---------+-------+
    7. | Field | Type | Null | Key | Default | Extra |
    8. +-------+----------+------+-----+---------+-------+
    9. | id | int | YES | | NULL | |
    10. | name | char(20) | YES | | NULL | |
    11. +-------+----------+------+-----+---------+-------+
    12. 2 rows in set (0.00 sec)

    二.表约束创建

    1.约束的作用

    约束主要用于保证数据库的完整性,表中数据有相互依赖时,可以保护相关的数据不被删除。

    2.约束的类型

    (1)根据约束数据列的限制:单列约束(每个约束只能约束一列),多列约束(每个约束可以约束多列数据)

    (2)根据约束的作用范围:列级约束(作用在一个列上,直接跟在列的后面 ),表级约束(作用在多个列上,不与列写一起,需要单独定义 )

    表级约束示例:

    alter table 表名 add constraint 约束名 约束类型(约束的列名)

    (3)常见约束

    注意:

    六种常见约束适用于列级约束,唯一、主键、外键、检查适用于表级约束

    NOT NULL:非空约束,规定某个字段不能为空

    UNIQUE:唯一约束,规定某个字段在整个表中是唯一的,不允许数据重复

    注意:唯一约束是为了确保所在的字段或者字段组合不出现重复值;唯一约束的字段允许出现多个NULL;同一张表内可建多个唯一约束;唯一约束可由多列组合而成;新建唯一约束时MySQL会为之建立对应的索引;如果不设置唯一约束名,该唯一约束默认与列名相同;删除唯一约束时使用“aletr table 表名 drop index 唯一约束名;”来删除。

    PRIMARY KEY:主键约束,是非空且唯一的

    注意:一个表只允许一个主键,创建主键时也会创建相应的索引。删除主键约束时使用“alter table 表名 drop primary key;”来删除

    FOREIGN KEY:外键约束,建立主表与从表的约束关系

    注意:从表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空);当主表的记录被从表参照时,主表记录不允许被删除; 外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录;删除外键时使用“aletr table 从表名 drop foreign key CONSTRAINT显示的名称;”

    CHECK:检查约束

    DEFAULT:默认值约束

    3.演示

    (1)非空约束

    注意:取消约束时使用alter命令更改列时不指定约束即可

    1. mysql> create table t3( id int, name char(20) not null);
    2. Query OK, 0 rows affected (0.02 sec)
    3. mysql> show create table SLB.t3\G;
    4. *************************** 1. row ***************************
    5. Table: t3
    6. Create Table: CREATE TABLE `t3` (
    7. `id` int DEFAULT NULL,
    8. `name` char(20) NOT NULL
    9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    10. 1 row in set (0.00 sec)

     (2)唯一约束

    1. mysql> create table t4(
    2. -> id int unique,
    3. -> name char(20));
    4. Query OK, 0 rows affected (0.01 sec)
    5. mysql> show create table SLB.t4\G;
    6. *************************** 1. row ***************************
    7. Table: t4
    8. Create Table: CREATE TABLE `t4` (
    9. `id` int DEFAULT NULL,
    10. `name` char(20) DEFAULT NULL,
    11. UNIQUE KEY `id` (`id`)
    12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    13. 1 row in set (0.00 sec)

     (3)主键约束

    1. mysql> create table t5(
    2. -> id int primary key,
    3. -> name char(10) unique);
    4. Query OK, 0 rows affected (0.01 sec)
    5. mysql> show create table SLB.t5\G;
    6. *************************** 1. row ***************************
    7. Table: t5
    8. Create Table: CREATE TABLE `t5` (
    9. `id` int NOT NULL,
    10. `name` char(10) DEFAULT NULL,
    11. PRIMARY KEY (`id`),
    12. UNIQUE KEY `name` (`name`)
    13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    14. 1 row in set (0.01 sec)

    auto_increment :自动增长,为新的行产生唯一的标识,一个表只能有一个auto_increment,且该属性必须是主键的一部分,auto_increment的属性可以是任何整数类型
     

    mysql>create table auto(id int primary key auto_increment); 

    (4)外键约束

    foreign key(外键列名) references (主表参照列)

    1. mysql> create table t6(
    2. -> id int primary key,
    3. -> name char(20));
    4. Query OK, 0 rows affected (0.04 sec)
    5. mysql> create table t7(
    6. -> t7id int primary key,
    7. -> name char(20),
    8. -> t7tableid int,
    9. -> foreign key(t7tableid) references t6(id)
    10. -> );
    11. Query OK, 0 rows affected (0.02 sec)
    12. mysql> show create table t7\G;
    13. *************************** 1. row ***************************
    14. Table: t7
    15. Create Table: CREATE TABLE `t7` (
    16. `t7id` int NOT NULL,
    17. `name` char(20) DEFAULT NULL,
    18. `t7tableid` int DEFAULT NULL,
    19. PRIMARY KEY (`t7id`),
    20. KEY `t7tableid` (`t7tableid`),
    21. CONSTRAINT `t7_ibfk_1` FOREIGN KEY (`t7tableid`) REFERENCES `t6` (`id`)
    22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    23. 1 row in set (0.04 sec)
    24. #t7表的t7tableid和t6表的id进行关联
    25. #删除外键约束
    26. mysql> alter table t7 drop foreign key t7_ibfk_1;
    27. Query OK, 0 rows affected (0.01 sec)
    28. Records: 0 Duplicates: 0 Warnings: 0

    t6主表中的id为1 

      t7从表中不允许修改主表设定的id

    从表删除外键后即可修改

     (5)检查约束

    这列数据只允许等于设定的内容

    1. mysql> create table t8(
    2. -> gender char(10) check(gender in ('男','女')));
    3. Query OK, 0 rows affected (0.01 sec)
    4. mysql> show create table SLB.t8\G;
    5. *************************** 1. row ***************************
    6. Table: t8
    7. Create Table: CREATE TABLE `t8` (
    8. `gender` char(10) DEFAULT NULL,
    9. CONSTRAINT `t8_chk_1` CHECK ((`gender` in (_utf8mb4'男',_utf8mb4'女')))
    10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    11. 1 row in set (0.00 sec)

     (6)默认值约束

    1. mysql> create table t9(
    2. -> id int unique default 1);
    3. Query OK, 0 rows affected (0.01 sec)
    4. mysql> show create table SLB.t9\G;
    5. *************************** 1. row ***************************
    6. Table: t9
    7. Create Table: CREATE TABLE `t9` (
    8. `id` int DEFAULT '1',
    9. UNIQUE KEY `id` (`id`)
    10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    11. 1 row in set (0.00 sec)

  • 相关阅读:
    vite 使用本地 ip + localhost 访问服务
    Js逆向教程17-极验滑块 实现加密算法的逻辑
    【数据结构-栈 二】【单调栈】每日温度、接雨水
    项目管理软件dhtmlxGantt配置教程(十四):自定义缩放时间尺度
    边缘计算(Edge Computing)
    GSCoolink GSV6127 HDMI 2.0/DisplayPort 1.4到MIPI CSI-2嵌入式MCU混合转换器芯片
    Java-GUI-事件监听
    Java面试题一
    微服务项目:尚融宝(14)(前端平台:尚融宝管理系统路由配置)
    小程序毕设作品之微信体育馆预约小程序毕业设计成品(8)毕业设计论文模板
  • 原文地址:https://blog.csdn.net/weixin_64334766/article/details/130899618