MySQL数据表的高级操作

238 阅读5分钟

1. 克隆表,将数据表的数据记录生成到新的表中

方法1:

create table 新表 like 旧表;     #通过LIKE方法,复制旧表的结构生成新表

insert into 新表 select * from 旧表  #将旧表数据导入新表

QQ截图20221022230805.png

QQ截图20221022231311.png

方法2:创建新表的同时,导入旧表数据。

create table 新表 (select * from 旧表)
次方法创建的新表的表结构和旧表是一样的,但可能会出现新表的表结构和旧表不一致

QQ截图20221022231629.png

QQ截图20221022233835.png

1.3 自增长配置以后从0开始

QQ截图20221022232146.png

QQ截图20221022232410.png

2. 查看表结构的三种方法

 方法一:
 desc 表名;      #以表格形式显示表结构
 ​
 方法二:
 show create table 表名;     #以创建表的命令形式显示表结构
 ​
 方法三:
 desc 表名\G       #如果字段较多,也可以使用"desc 表名\G"的方式竖向显示表结构

QQ截图20221022234535.png

QQ截图20221022234549.png

QQ截图20221022234640.png

3. 清空表,删除表内的所有数据

方法一: delete

 delete from 表名;
 ​
 #DELETE清空表后,返回的结果内有删除的记录条目;
 DELETE 工作时是一行一行的删除记录数据的,删除时速度较慢;
 如果表中有自增长字段,使用"DELETE FROM"删除所有记录后,新添加的记录会从原来最大的记录ID后面继续自增写入记录。

QQ截图20221023142553.png

方法二: truncate

 truncate table 表名;    #相当于格式化,速度很快
 ​
 #TRUNCATE清空表后,没有返回被删除的条目。
 TRUNCATE 工作时是将表结构按原样重新建立,因此在速度方面 TRUNCATE 会比DELETE清空表快。
 使用TRUNCATE TABLE清空表内数据后,ID会从1开始重新记录。

QQ截图20221023143143.png

4. 创建临时表

  • 临时表创建成功之后,使用"SHOW TABLES"命令是看不到创建的临时表的,临时表会在连接退出后被销毁。

  • 如果在退出连接之前,也可以执行增删改查等操作,比如使用"DROP TABLE"语句手动直接删除临时表。

  • 临时表一般用于测试使用,只有当前连接的用户才能看到,相同用户换个终端登录也看不到。退出当前连接(退出数据库)之后临时表会被销毁。

create temporary table 表名(字段1 数据类型, 字段2 数据类型[,....] [, primary key (主键名)];

QQ截图20221023154447.png

QQ截图20221023154720.png

QQ截图20221023155136.png

5. 创建外键约束,保证数据的完整性和一致性

外键的定义:  如果同一个属性字段x在表一中是主键,而在表二中不是主键,则字段x称为表二的外键。

外键的作用:

  • 为了一张表记录的数据不要太过冗余。
  • 保持数据的一致性、完整性。

主键表和外键表的理解:

(1)以公共关键字作主键的表为主键表(父表、主表)

(2)以公共关键字作外键的表为外键表(从表、外表)

注意:

  • 与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。
  • 添加外键时必须关联主键(即主表先要添加主键,之后从表再添加外键)

5.1 创建主键表和外键表

创建主表
create table profession (proid int, proname char(5));

创建从表
create table student (id int primary key, name char(10), age int, pid int);

为主表的ProID添加一个主键约束,
alter table profession add primary key(proid);

为从表的pid添加外键
 alter table student add constraint FK_pro foreign key(pid) references profession (proid);

#添加外键时必须关联主键(即先要添加主键,再添加外键)  
#添加主键和外键时,即使不设置别名,系统也会自动创建一个别名。

QQ截图20221023165252.png

QQ截图20221023165830.png

5.2 插入数据

给主表插入数据
insert into profession values (1, '云计算'),(2, '大数据'),(3, 'java'),(4, '测试');

给从表插入数据
insert into student values (1, 'aa', 22, 1),(2, 'cc', 24, 3),(3, 'dd', 19, 2);

QQ截图20221023170751.png

QQ截图20221023171454.png

 5.3 删除主键表中的数据记录

如果想删除主键表中的某条记录,必须先删除外键表中相关联的字段记录。

#删除数据记录时,要先删从表再删主表。也就是说删除主键表的记录时,必须先删除其他与之关联的表中的记录。

delete from student where name='aa';   #先删除从表数据
delete from profession where proid=1;  #再删除主表数据

QQ截图20221023172111.png

5.4 查看和删除外键约束

 #查看外键约束
 show create table student;
 desc student;
 ​
 alter table student drop foreign key FK_pro;   先删除外键约束
 
alter table student drop key FK_pro;   再删除键

QQ截图20221023173136.png

6 总结

克隆表
create table 新表 like 旧表;  通过like方法复制旧表的表结构
insert into 新表 select * from 旧表;  向新表插入旧表查询的数据

可以保证 新表的表结构和表数据 跟就表示一致的

create table 新表 (select * from 旧表);   再创建新表的时候直接引用旧表查询的结构和数据
新表的数据和旧表是一样的,但可能会出现新表的表结构和旧表不一致


查看表结构
desc 表名;   以表格格式展示表结构
show create table 表名;    以SQ命令格式展示表结构,还能显示表的其他信息

清空表数据
delete from 表名;
一行一行的删除数据记录,删除效率较慢,执行完成后会返回删除的记录条目数,删完后在插入数据记录,自增字段任然会以原来的最大记录自增

truncate table 表名;
直接重建表,清空速度比delete更快,执行完后不会返回记录条目数,清空表后在插入数据,祖增字段会重1开始递增

临时表  临时保存表结构  表数据  测试场景
create  temporary table 表名 (字段 数据类型, .....);
临时表只能在当前连接中有效,能正常被增删改查,但是show tables是看不到的,并且换一个或者退出当前后临时表会都失效