克隆表,将数据表的数据记录生成到新的表中
方法1:先克隆表结构,在导入表数据
create table 新表名 like 旧表名 #通过LIKE方法,复制旧表的结构生成新表
insert into 新表名 select * from 旧表名; ##再将旧表数据导入新表
方法2:创建新表时,导入旧表数据
create table 新表名 (select * from 旧表名);
总结
create table 新表 like 旧表; ##通过like方法复制旧表的表结构
insert into 新表 select * from 旧表; ##向新表插入旧表查询的数据
##可以保证新表结构和表数据 跟旧表是一致的
create table 新表(select * from 旧表); ##在创建表的时候直接引用旧表查询的结构和数据
##新表的表数据和旧表是一样的,但可能会出现新表的表结构和旧表的不一致
情况表,删除表内的所有数据
方法一
delete from 表名;
##delete清空表后,返回结果内有删除的记录条目;delete工作时是一行一行的删除记录数据
如果表中有自增长字段,使用delete from删除所有记录后,新添加的记录会从原来最大的记录ID后面继续自增长记录
方法二
truncate table 表名;
##truncate清空表后,没有返回被删除的条目,truncate工作时是将表结构按原样重新建立,因此在速度方面 truncate 会比delete清空表快,使用truncate table清空表内数据后,ID会从1开始重新记录
总结
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;
创建外键约束,保证数据的完整性和一致性
外键的定义
如果同一个属性字段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);
##添加外键时必须关联主键(即先要添加主键,再添加外键)
##删除数据时,先删除外表数据在删除主表数据
##添加主键和外键时,即使不设置别名,系统也会自动创建一个别名。
插入数据
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的值
删除主键表的数据记录
#删除数据记录时,要先删从表再删主表。也就是说删除主键表的记录时,必须先删除其他与之关联的表中的记录
delete from student where name='yzh'; ##先删除外键表的数据记录
delete from profession where proname='大数据'; ##在删除主键表的数据记录
查看和删除外键约束
第一步删除外键约束,第二步删除别名
##查看外键约束
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