SQL语句的一些高级用法1

news/2025/2/12 8:46:04/

这里写目录标题

  • SQL语句的一些高级用法1
    • 1.修改表名和表结构
      • 1.修改表名
    • 2.扩展表结构(增加字段)
    • 3.修改字段(列)名,添加唯一键
    • 4.删除字段
  • 案例扩展
  • 数据表高级操作
    • 1.克隆表,将数据表的数据记录生成到新的表中
      • 1.方法1
      • 2.方法2
    • 2.清空表,删除表内的所有数据
      • 1.方法1
      • 2.方法2
    • 3. 创建临时表
    • 4.创建外键约束,保证数据的完整性和一致性。

SQL语句的一些高级用法1

  • MySQL中6种常见的约束:
  • 主键约束(primary key):主键一般选择能代表唯一性的字段,不允许取空值(null),不可重复,一个表只能有一个主键。
  • 外键约束(foreign key):MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)
    主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值

定义外键时,需要遵守下列规则:

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
  • 必须为主表定义主键。
  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
  • 外键中列的数目必须和主表的主键中列的数目相同。
  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
  • 非空约束(not null)
  • 唯一性约束(unique [key|index])
  • 默认值约束(default)
  • 自增约束(auto_increment)

1.修改表名和表结构

1.修改表名

ALTER TABLE 旧表名 RENAME 新表名;例:
ALTER TABLE KY08 RENAME CLASS08;
ALTER TABLE CLASS08 RENAME KY08;

在这里插入图片描述

2.扩展表结构(增加字段)

ALTER TABLE 表名 ADD address varchar(50) default '地址不详';
#default '地址不详':表示此字段设置默认值 地址不详;可与 NOT NULL 配合使用

在这里插入图片描述

3.修改字段(列)名,添加唯一键

ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [unique key];

在这里插入图片描述

4.删除字段

ALTER TABLE 表名 DROP 字段名;例:
ALTER TABLE KY08 DROP passwd

在这里插入图片描述

案例扩展

use kgc;
create table if not exists info (
id int(4) zerofill primary key auto_increment,				#指定主键的第二种方式
name varchar(10) not null default '匿名',
cardid int(18) not null unique key,
hobby varchar(50));#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
#int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL

在这里插入图片描述
在这里插入图片描述

数据表高级操作

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

1.方法1

#此方法能保证 新表的表结构、表数据 跟旧表都是一致的

案例:
create table test01 like KY08;				#通过 LIKE 方法,复制 KY08 表结构生成 test01 表
insert into test01 select * from KY08;#实操:我们复制上面的实例案例来创建一个新表格,包括里面的数据也一起复制
create table t03 like info;
insert into t03 select * from info; #复制数据

在这里插入图片描述

2.方法2

#此方法创建的新表的表数据和旧表是一样的,但可能会出现新表的表结构和旧表的不一致,该方法无法将我们所设置的约束键复制过来

CREATE TABLE test02 (SELECT * from KY08);
show create table test02\G					#获取数据表的表结构、索引等信息
SELECT * from test02;

在这里插入图片描述
对比看到两表的结构是不同的,但是表的数据是全部复制过来了
在这里插入图片描述

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

1.方法1

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.方法2

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

在这里插入图片描述

3. 创建临时表

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

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

例:
create temporary table test03 (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));insert into test03 values(1,'zhangsan',123456,'running');select * from test03;
show tables;quit
select * from test03;

在这里插入图片描述

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

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

主键表和外键表的理解:
(1)以公共关键字作主键的表为主键表(父表、主表)
(2)以公共关键字作外键的表为外键表(从表、外表)

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

#创建主表 profession
create table profession (pid int(4),proname varchar(50));#创建从表 student
create table student (id int(4) primary key auto_increment,name varchar(10),age int(3),proid int(4));#为主表 profession 添加一个主键约束。主键名建议以“PK_”开头。
alter table profession add constraint PK_pid primary key (pid);#为从表 student 表添加外键,并将 student 表的 proid 字段和 profession 表的 pid 字段建立外键关联。外键名建议以“FK_”开头。
alter table student add constraint FK_pro foreign key (proid) references profession (pid);references profession (pid) ## 这步是为了和主表的主键连接起来,比如我主表里面的设置了两个大类:1云计算和2大数据,
那么我从表里面的proid设置1的行就是属于云计算,设置2的就是属于大数据desc student;#插入新的数据记录时,要先主表再从表
insert into profession values(1,'云计算');
insert into profession values(2,'大数据');
insert into student values(1,'zhangsan',18,1);
insert into student values(2,'lisi',19,1);
insert into student values(3,'wangwu',20,2);#删数数据记录时,要先从表再主表,也就是说删除主键表的记录时必须先删除其他与之关联的表中的记录。
delete from student where proid=1;
delete from profession where pid=1;#查看和删除外键约束
show create table student;
desc student;
alter table student drop foreign key FK_pro;   # 此时外接键和外接名的联系已经删除,但是外接键并没有删除
alter table student drop key FK_pro;      #这不才是真正的删除外接键

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/421191.html

相关文章

【微信小程序注册及认证】

微信小程序注册及认证 本文档详细介绍了微信小程序账号注册开通、填写小程序信息、小程序微信认证、完善小程序信息的流程。 1、微信小程序账号注册开通,填写小程序信息2、小程序微信认证3、完善小程序信息 最近公司要开发一个小程序,所以从头开始了小程…

CRMEB(Java 多商户商城系统) 移动端商城编译h5后小问题修复

官方文档地址: CRMEB JAVA 国内版多商户序言 - CRMEB文档 问题1: 编译成h5后,登录成功不跳转/支付页面回调查询不到参数 解决: 路由模式须为history模式, 文件夹设置(例如: /shop/) 服务器也需要做调整,详见: history模式配置及nginx服务器配置 否则登录后无…

JAVA开发运维(系统上到生产环境准备工作)

一、前言 java项目在开发环境开发完成,在测试环境测试没有问题后,就需要发布到生产环境,如果系统是对公众的,那就需要很多工作了。比如服务器申请,域名申请,渗透测试,漏洞扫描,公网…

安卓系统学习入口

源码地址分享 源码地址:OpenGrok search 源码地址:Android Code Search 开发说明:Source 代码库:Git repositories on android 开发文档:Android API reference

学生通讯录管理系统

学生通讯录管理系统 题目描述 -1)问题描述 纸质的通讯录已经不能满足大家的要求,容易丢失、查找困难等问题是纸质通讯录所不能克服的缺点。学生通讯录管理系统是为了帮助老师、同学或者其他一些需要使用通讯录的人员进行管理和分析的一种应用程序。 -2…

培训学校管理系统:课程管理

培训机构课程管理工作除了日常的教学之外,还要进行教师排课、学生课消等一系列内容。因此,作为一个好的培训机构课程管理系统肯定是不能忽略课程管理这部分了。那么培训机构课程管理系统是怎么做到的呢? 传统课程管理采用的方式是纸质化进行…

【学生签到系统】

学生签到系统 前言一、部分截图总结 前言 随着互联网的快速发展,传统点名方式的弱点暴露无遗。传统点名方式不仅浪费老师的时间精力也浪费学生的上课时间,而且不能解决学生之间互相喊到代签的问题。为了提高课堂的资源利用效率,也为了解决学…