MySQL数据表的高级操作

86 阅读5分钟

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

方法1:先克隆表结构,在导入表数据

create table 新表名 like 旧表名 #通过LIKE方法,复制旧表的结构生成新表
insert into 新表名 select * from 旧表名;  ##再将旧表数据导入新表
Snipaste_2022-10-19_15-35-23.png

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

create table 新表名 (select * from 旧表名);
Snipaste_2022-10-19_15-55-44.png

总结

create table 新表 like 旧表;   ##通过like方法复制旧表的表结构
insert into 新表 select * from 旧表;  ##向新表插入旧表查询的数据
##可以保证新表结构和表数据 跟旧表是一致的
​
create table 新表(select * from 旧表);  ##在创建表的时候直接引用旧表查询的结构和数据
##新表的表数据和旧表是一样的,但可能会出现新表的表结构和旧表的不一致

情况表,删除表内的所有数据

方法一

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

Snipaste_2022-10-19_16-00-47.png

方法二

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

Snipaste_2022-10-19_16-01-49.png

总结

delete from 表名;  
##一行一行删除数据记录,删除效率较慢,执行完后会返回删除的记录条目数,删完后在插入数据记录,自增长字段仍然会从原来最大的记录自增
truncate table 表名;
##直接重建表,清空速度比delete更快,执行完后不会返回记录条目数,清空表后在插入数据,自增字段重新从1开始

创建临时表

临时表创建成功之后。使用show tables命令是看不到创建的临时表,临时表在连接退出后被销毁,如果在提出连接之前,也可以可执行增删改查等操作,比如使用drop table语句手动直接删除临时表

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

示例

create temporary table test01 (        #创建临时表test01
id int(4) zerofill primary key,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));
 
show tables;      #使用"show tables"查看不到临时表
 
insert into test01 values (1,'张三',123456,'running');    #向临时表中插入数据
select * from test01;      #查看临时表的数据,可以查看到
quit                       #退出mysql
 
#退出数据库后重新进入,查看临时表数据,提示表不存在。临时表会在连接退出后被销毁。
 select * from test01;
Snipaste_2022-10-19_16-08-41.png Snipaste_2022-10-19_16-11-03.png

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

外键的定义

如果同一个属性字段X在表一种是主键,而表二种不是主键,则字段x成为表二的外键

主键表和外键表的理解

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

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

注意:

与外键关联的主表的字段必须设置为主键,要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束

添加外键是必须关联主键(即主表先添加主键,之后从表在添加外键)

外键约束 两张表做级联的时候,用来保证表数据的完整和一致性

创建主键表和外键表

##创建主表 profession 专业表
create table profession (proid int,proname char(5));
​
##创建外表 student 学员表
create table student (id int primary key,name char(10),age int,pid int);
​
##为主表profession的proid字段添加一个主键约束
alter table profession add primary key(proid);
​
##为外表student的pid字段添加外键,并将student表的pid字段和profession表的proid字段建立外键关联。constraint为外键创建别名,外键名建议以"FK_”开头。
alter table student add constraint FK_pro foreign key(pid) references profession(proid);
​
##添加外键时必须关联主键(即先要添加主键,再添加外键)
##删除数据时,先删除外表数据在删除主表数据
##添加主键和外键时,即使不设置别名,系统也会自动创建一个别名。

Snipaste_2022-10-19_16-18-35.png

Snipaste_2022-10-19_16-22-24.png

插入数据

insert into profession values (1,'云计算'),(2,'大数据'),(3,'java'),(4,'测试');  ##为主表插入数据insert into student values (1,'zwz',22,1),(2,'xyd',24,4),(3,'sjl',26,3),(4,'yzh',28,2); ##为外表插入数据insert into student values (5,'sly',25,5); ##这条数据会插入失败,因为主表的proid字段没有为5的值

Snipaste_2022-10-19_16-24-20.png

Snipaste_2022-10-19_16-27-49.png

删除主键表的数据记录

#删除数据记录时,要先删从表再删主表。也就是说删除主键表的记录时,必须先删除其他与之关联的表中的记录
delete from student where name='yzh'; ##先删除外键表的数据记录
delete from profession where proname='大数据'; ##在删除主键表的数据记录

Snipaste_2022-10-19_16-32-15.png

查看和删除外键约束

第一步删除外键约束,第二步删除别名
​
##查看外键约束
show create table student;
desc student;
​
##删除外键约束
alter table student drop foregin key_pid;
alter table student drop key FK__pro;

总结

alter table xxx rename  ##修改表名称
                add     ##添加字段 或者主键
                change  ##修改字段(名称 数据类型 约束属性)
                drop    ##删除字段
​
MySQL的六种常见约束:
非空约束:not null
主键约束:primary key
唯一键约束:unique key
默认约束:default
自增约束:auto_increment
外键约束:foreign key