首页 > 数据库 >MySQL数据库高级操作

MySQL数据库高级操作

时间:2022-11-27 14:22:25浏览次数:35  
标签:删除 数据库 高级 外键 字段 student MySQL table 主键

克隆表

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

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

create table 新表名 like 旧表名;             #通过LIKE方法,复制旧表的结构生成新表
 
 insert into 新表名 select * from 旧表名;     #再将旧表数据导入新表

例:

create table tt02 like tt01;    #通过tt01表克隆一个tt02表,这样只克隆表结构,没有表数据
 ​
 insert into tt02 select * from tt01;    #将tt01的表数据导入tt02中

 

 

 

 

 

 

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

create table 新表名 (select * from 旧表名);

例:

create table tt03 (select * from tt01);   #创建tt03表的同时,导入tt01表的数据

 

 

 

查看表结构

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

 

 

 

 

 

 

 

 

 

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

方法一:delete

delete from 表名;
 ​
 #DELETE清空表后,返回的结果内有删除的记录条目;
 DELETE 工作时是一行一行的删除记录数据的,删除时速度较慢;
 如果表中有自增长字段,使用"DELETE FROM"删除所有记录后,新添加的记录会从原来最大的记录ID后面继续自增写入记录。
 ​
 
 示例:
 #delete删除所有数据后,新添加的记录id字段值会在原有的13基础上递增1,即增长为14。
 insert into tt02(cardid,hobby) values(1101,'running');

 

 

 

 

 

 

方法二:truncate

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

 

 

 

创建临时表 TEMPORARY

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

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

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

    CREATE TEMPORARY TABLE 表名(字段1 数据类型,字段2 数据类型[, ...] [, PRIMARY KEY (主键名)]);

例:

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)以公共关键字作外键的表为外键表(从表、外表)

注意:

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

创建主键表和外键表

#创建主表class
 create table class (cid int,cname varchar(10));
 ​
 #创建从表student
 create table student (id int,name varchar(10),age int,classid int);
 ​
 #为主表class的cid字段添加一个主键约束。constraint为主键创建别名,主键名建议以“PK_”开头。
 alter table class ADD constraint PK_CID primary key (cid);
 ​
 #为从表student的classid字段添加外键,并将student 表的classid字段和class 表的cid字段建立外键关联。外键名建议以"FK_”开头。
 #references关联主键表中的字段。
 alter table student ADD constraint FK_CLASSID foreign key (classid) references class(cid);
 ​
 
 #添加外键时必须关联主键(即先要添加主键,再添加外键)
 #添加主键和外键时,即使不设置别名,系统也会自动创建一个别名

为两个表插入数据:

INSERT INTO class values(1,'钢琴');          #为主表插入数据
 ​
 INSERT INTO student values(1,'张三',18,1);   #为从表插入数据
 ​
 INSERT INTO student values(2,'李四',18,2);   #这条数据会插入失败,因为主表的cid字段没有为2的值

删除主键表中的数据记录

如果想删除主键表中的某条记录,必须先删除外键表中相关联的字段记录#删除数据记录时,要先删从表再删主表。也就是说删除主键表的记录时,必须先删除其他与之关联的表中的记录。
 delete from student where classid=1;       //先删从表的数据
 delete from class where cid=1;             //再删主表的数据

查看和删除外键约束

#查看外键约束
 show create table student;
 desc student;
 ​
 #删除外键约束。
 alter table student drop foreign key FK_CLASSID;   //先删除外键约束
 alter table student drop key FK_CLASSID;           //再删除键(即删除别名)

 

 

标签:删除,数据库,高级,外键,字段,student,MySQL,table,主键
From: https://www.cnblogs.com/fengxia6/p/16929594.html

相关文章

  • Mysql-多表查询子查询 案例
    --1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述/*分析:1.员工编号,员工姓名,工资信息在emp表2.职务名称,职务描述信息在job表3.job职务表和emp员工......
  • 基于Servlet+jsp+mysql开发javaWeb学生管理系统(学生信息、学生选课、学生成绩、学生
    你知道的越多,你不知道的越多点赞再看,养成习惯文章目录​​一、开发背景​​​​二、需求分析​​​​三、开发环境​​​​四、运行效果​​​​五、开发流程​​​​工......
  • 【高级篇】Java JVM实战 之 内存调优
    文章目录​​一、通过Jprofiler调式Dump文件错误​​​​⛅什么是Jprofiler?​​​​⚡使用Jprofiler调试Dump文件​​​​二、堆内存调优​​​​三、GC垃圾回收器​​​......
  • Mysql 启动报错问题排查
    报错信息1:MySQL启动报错:File./mysql-bin.indexnotfound(Errcode:13)_MySQL请检查MySQL数据目录的权限/usr/local/mysql/data  ,  errcode13,一般就是权限问题,my......
  • MySQL 5.6/8.0 zip 安装
    MySQL5.7/8.0zip先安装rem配置系统环境变量Path中添加mysql.zip\bincd/dmysql.zip\binrem本地root密码为空mysqld--initialize-insecuremysqldinstallnet......
  • MySQL8.0新特性—生成列
    生成列(generatedcolumn)的值是根据列定义中包含的表达式计算得出的。生成列包含下面两种类型:virtual(虚拟):当从表中读取记录时,将动态计算该列。stored(存储):当向表中写入新......
  • 使用MyBatis select数据库查出有数据 但返回对象为null
    使用MyBatisselect数据库查出有数据但返回对象为null8/4/201811:03:14PM今天测试项目出现使用MyBatisselect数据库查出有数据但返回对象为nullmybatis配置文件:<......
  • 三、Mybatis(高级)
    一.Mybatis注解开发单表操作1.1MyBatis的常用注解这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。我们先围绕一些......
  • 【MySQL】记一次复杂数据查询排重
    事原在某一次仿真环境测试过程中发现数据列表中出现重复条目,如下图:经过排查后发现,用户登录后cust_id(企业id)字段做了mybatis的动态语句判断。其中出现问题的SQL脚本如下:SELEC......
  • Failed to start mysqld.service: Unit not found
    转载自:https://blog.csdn.net/miaodichiyou/article/details/99289160 ========================= 很多人对本博客的方法提出了质疑,在此我解释一下:由于MySQL在CentO......