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数
posted @ 2020-12-15 11:51  wing1377  阅读(95)  评论(0编辑  收藏  举报