zoukankan      html  css  js  c++  java
  • MySQL数据库之表的操作

    表的操作

    数据表的文件

    • 拓扑结构

      • 一个数据库对应一个文件夹
      • 一个表对应一个或多个文件
    • 引擎

      • myisam 一个表对应三个文件
        • .frm 存储的是表结构
        • .myd 存储的是表数据
        • .myi 存储的表数据的索引
      • innodb 一个表对应一个表结构文件
        • innodb的都有表的数据都保存在ibdata1文件中
        • 如果数据量很大,会自动的创建ibdata2,ibdata3...
        • 如果不指定引擎,默认是innodb
      • innodbmyisam的区别
        • myisam
          • 查询速度快
          • 容易产生碎片
          • 不能约束数据
        • innodb
          • 以前没有myisam查询速度快,现在已经提速了
          • 不产生碎片
          • 可以约束数据

    表前环境创建

    -- 创建数据库
    mysql> create database data;
    # `Query OK, 1 row affected (0.00 sec)`
    
    -- 使用数据库
    mysql> use data;
    # `Database changed`
    
    -- 设置客户端和服务器通讯的编码
    mysql> set names gbk;  
    # `Query OK, 0 rows affected (0.00 sec)`
    

    创建表

    • 语法
    create table [if not exists] `表名`(
        `字段名` 数据类型 [null|not null] [default] [auto_increment] [primary key] [comment],
        `字段名` 数据类型 [null|not null] [default] [auto_increment] [primary key] [comment]
    )[engine=存储引擎] [charset=字符编码]
    
    • 语法说明
      • null|not null 是否为空
      • default 默认值
      • auto_increment 自动增长,默认从1开始,每次递增1
      • primary key 主键,主键的值不能重复,不能为空,每个表必须只能有一个主键
      • comment 备注
      • engine 引擎决定了数据的存储和查找 myisam、innodb
      • 表名和字段名如果用了关键字,要用反引号引起来
      • 如果不指定引擎,默认是innodb
      • 如果不指定字符编码,默认和数据库编码一致
      • varchar(20) 表示长度是20个字符
    -- 创建简单的表
    mysql> create table stu1(
        -> id int auto_increment primary key,
        -> name varchar(20) not null
        -> )engine=innodb charset=gbk;
    # `Query OK, 0 rows affected (0.11 sec)`
    
    -- 创建复杂的表
    mysql> create table stu2(
        -> id int auto_increment primary key comment '主键',
        -> name varchar(20) not null comment '姓名',
        -> `add` varchar(50) not null default '地址不详' comment '地址',
        -> score int comment '成绩,可以为空'
        -> )engine=myisam;
    # `Query OK, 0 rows affected (0.06 sec)`
    

    显示所有表

    • 语法
      • show tables;

    显示创建表的语句

    • 语法
      • show create table 表名称; 结果横着排列
      • show create table 表名称G; 结果竖着排列

    查看表结构

    • 语法
      • desc[ribe] 表名;

    复制表

    • 语法
      • create table 新表 select 字段 from 旧表;
        • 不能复制父表的键,能够复制父表的数据
      • create table 新表 like 旧表;
        • 只能复制表结构,不能复制表数据
      • * 表示所有字段

    删除表

    • 语法
      • drop table [if exists] 表1,表2,… ;

    修改表

    • 语法
      • alter table 表名;

    添加字段

    • 语法
      • alter table 表名 add [column] 字段名 数据类型 [位置];
    -- 默认添加字段放在最后
    mysql> alter table stu add `add` varchar(20);	
    # `Query OK, 0 rows affected (0.05 sec)`
    
    -- 在name之后添加sex字段
    mysql> alter table stu add sex char(1) after name;  
    # `Query OK, 0 rows affected (0.00 sec)`
    # `Records: 0  Duplicates: 0  Warnings: 0`
    
    -- age放在最前面
    mysql> alter table stu add age int first;  
    # `Query OK, 0 rows affected (0.00 sec)`
    # `Records: 0  Duplicates: 0  Warnings: 0`
    

    删除字段

    • 语法
      • alter table 表 drop [column] 字段名;
    -- 删除age字段
    mysql> alter table stu drop age;   
    # `Query OK, 0 rows affected (0.00 sec)`
    # `Records: 0  Duplicates: 0  Warnings: 0`
    

    修改字段(改名)

    • 语法
      • alter table 表 change [column] 原字段名 新字段名 数据类型;
    -- 将name字段更改为stuname varchar(10)
    mysql> alter table stu change name stuname varchar(10);
    # `Query OK, 0 rows affected (0.02 sec)`
    # `Records: 0  Duplicates: 0  Warnings: 0`
    

    修改字段(不改名)

    • 语法
      • alter table 表 modify 字段名 字段属性 字段属性;
    -- 将sex数据类型更改为varchar(20)
    mysql> alter table stu  modify sex varchar(20);
    # `Query OK, 0 rows affected (0.00 sec)`
    # `Records: 0  Duplicates: 0  Warnings: 0`
    
    -- 将add字段更改为varchar(20) 默认值是‘地址不详’
    mysql> alter table stu modify `add` varchar(20) default '地址不详';
    # Query OK, 0 rows affected (0.00 sec)
    # Records: 0  Duplicates: 0  Warnings: 0
    

    修改引擎

    • 语法
      • alter table 表名 engine=引擎名;
    mysql> alter table stu engine=myisam;
    # `Query OK, 0 rows affected (0.01 sec)`
    # `Records: 0  Duplicates: 0  Warnings: 0`
    

    修改表名

    • 语法
      • alter table 表名 rename to 新表名;
    -- 将stu表名改成student
    mysql> alter table stu rename to student;
    # Query OK, 0 rows affected (0.00 sec)
    

    将表移动到其他数据库

    • 语法
      • alter table 表名 rename to 其他数据库.新表名;
    -- 将当前数据库中的student表移动到php74数据库中改名为stu
    mysql> alter table student rename to php74.stu;
    # Query OK, 0 rows affected (0.00 sec)
    

    清空数据表

    delete 方式清空数据表

    • 语法

      • delete * from table_name;
    • 说明

      • delete是逐条删除 (速度较慢)
      • delete 删除以后,identity 依旧是接着被删除的最近的那一条记录ID加1后进行记录
      • 如果只需删除表中的部分记录,只能使用 DELETE语句配合 where条件

    truncate 方式清空数据表

    • 语法

      • truncate table table_name;
    • 说明

      • truncate 是整体删除 (速度较快)
      • truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete高的原因
      • truncate 不激活trigger (触发器),但是会重置Identity (标识列、自增字段)
      • 相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的 ID数
  • 相关阅读:
    Nuget常用命令(转)
    Core使用SAP Web Service
    jquery.dataTables动态列--转
    jqGrid随窗口大小变化自适应大小-转
    30个值得推荐的数据可视化工具--转
    Automapper问题记录
    MVC及MVC Core在filter中如何获取控制器名称和Action名称
    .Net Core使用 MiniProfiler 进行性能分析(转)
    Core中使用Hangfire
    ASP.NET 多环境下配置文件web.config的灵活配置---转
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14137699.html
Copyright © 2011-2022 走看看