sql 删除带外键约束的表的语句是什么1、创建主键表,test_class,并建立class_id字段为主键;
create table test_class(class_id number, class_name varchar2(20));
-- Create/Recreate indexes
alter table TEST_CLASS
add constraint P_CLASS_ID primary key (CLASS_ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255;
2、创建外键表,test_stu,其中字段class_id为test_class表的class_id字段;
create table test_stu(id number, class_id number);
-- Create/Recreate primary, unique and foreign key constraints
alter table TEST_STU
add constraint f_class_id foreign key (CLASS_ID)
references test_class (CLASS_ID) on delete cascade;
3、两张表分别插入记录;
insert into TEST_CLASS values(1001,'语文');
insert into TEST_CLASS values(1002,'数学');
insert into TEST_CLASS values(1003,'英语');
insert into TEST_STU values(1,1001);
insert into TEST_STU values(2,1001);
insert into TEST_STU values(3,1002);
insert into TEST_STU values(4,1003);
4、查询TEST_STU表中的记录;select t.*, rowid from test_stu;
5、删除主表TEST_CLASS中class_id=1001的记录 , 会发现从表TEST_STU中class_id中的记录也被删除;
delete test_class where class_id = 1001;
commit;
select t.*, t.rowid from TEST_STU t
mysql删除外键索引问题SET @a=(SELECT CONSTRAINT_NAME
FROMINFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERECONSTRAINT_NAMEIN(SELECTCONSTRAINT_NAMEFROMINFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS) and TABLE_NAME='Operation' and COLUMN_NAME='resNo' limit 0,1 );
SET @s = CONCAT("alter table Operation drop foreign key ", @a);
PREPARE stmt FROM @s;
这样测试过没有问题
MySQL数据库基础数据库的基本操作?需要用mysql怎么删除外键的资料以链接mysql怎么删除外键的形式给需要的同学 。
我用的mysql版本为: Mysql-5.5.45-win64.msi 密码是:26zw
图形化工具 Navicat(前期不推荐用,直接手动敲): Navicat 密码:c7fs
开始我的MySQL之旅吧 始于2016.12.04
--WH
一、数据库的安装
这个就不在这里过多阐述了,因为网上实在是太多安装mysql的教程了,有了我给的mysql , 在按照这个安装教程(MySQL安装教程)去看,就能够安装完好 。
安装好mysql后,如果需要使用windows命令窗口(也就是cmd)来操作mysql,那么就需要配置环境变量,在安装好的mysql下找到bin , 将其目录放到环境变量path中去 , 就行了,检测成功与否的方法是在cmd命令窗口中输入mysql,就会出现一大段英文 , 就说明成功了,反之失败,如果不会的话就去百度搜教程 。
二、数据库的基本操作
1、开启mysql服务命令
net start mysql
2、进入mysql的两种方式
明文进入:mysql -uroot -proot格式:mysql -u帐号 -p密码
密文进入:mysql -uroot -p 按enter会提示mysql怎么删除外键你输入密码(Enter pssword:),此时你写的密码就会显示为***这样 。
3、查看mysql中所有的数据库(一般在固定的单词命令就会是用大写,这个要习惯,看多了敲多了就认识了)
前面四个数据库是mysql中自带的 , 也就是必须的.
SHOW DATABASES;
4、创建名为test_1的数据库
格式:CREATE DATABASE 数据库名
CREATE DATABASE test_1;
5、删除名为test_1的数据库
格式:DROP DATABASE 数据库名
DROP DATABASE test_1;
总结:学习了对数据库的三个操作,1、查看所有数据库 2、创建数据库 3、删除数据库
三、数据表的基本操作
数据表和数据库还有Mysql三者的关系
mysql中保存了很多数据库、一个数据库中可以保存很多表 。
对数据表的增(创建表)删(删除表)改(修改表字段)查(查询表结构) 。注意:这里的操作对象是表,对表的操作也就是表的结构 , 和表中的字段的操作(字段和记录要分清楚)
前提:表是在数据库下的,所以要先确实使用哪个数据库 。
USE test_1;
1、创建数据表
格式:CREATE TABLE 数据表名(
字段名1数据类型[列级别约束条件],
字段名2数据类型[列级别约束条件],
字段名3数据类型[列级别约束条件]
);
注意:格式不一定需要这样隔着写,完全可以全部写成一行 。但是那样写可观性非常差 。我这样写只是为了可以看的更清晰 。
解释:
1、[]中括号中的内容表示可以有可以没有,
2、列级别这个“列”一定要搞清楚说的是什么,一张表中有行有列,列表示竖,行表示横
3、约束条件后面会讲到
1.1、创建没有约束的student表
CREATE TABLE student(idINT(11),nameVARCHAR(12),ageINT(11));
注释:SHOW TABLES 查询数据库底下的所有表 。
1.2、创建有约束的student表
六大约束:主键约束、外键约束、非空约束、唯一约束、默认约束、自动增加
1.2.1:主键约束
PRIMARY KEY(primary key):独一无二(唯一)和不能为空(非空),通俗的讲,就是在表中增加记录时,在该字段下的数据不能重复,不能为空,比如以上面创建的表为例子,在表中增加两条记录,如果id字段用了主键约束 。则id不能一样,并且不能为空 。一般每张表中度有一个字段为主键,唯一标识这条记录 。以后需要找到该条记录也可以同这个主键来确认记录,因为主键是唯一的,并且非空,一张表中每个记录的主键度不一样,所以根据主键也就能找到对应的记录 。而不是多条重复的记录 。如果没有主键,那么表中就会存在很多重复的记录,那么即浪费存储空间,在查询时也消耗更多资源 。
一般被主键约束了的字段度习惯性的称该字段为该表的主键
单字段主键约束
两种方式都可以
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12),nameVARCHAR(12),
ageINT(11) ageINT(11),
); PRIMARY KEY(id) );
多字段主键约束(复合主键)
这个id和name都市主键,说明在以后增加的插入的记录中,id和name不能同时一样 , 比如说可以是这样 。一条记录为id=1,name=yyy、另一条记录为:id=1,name=zzz 。这样是可以的 。并不是你们所理解的两个字段分别度不可以相同 。
CREATE TABLE student(CREATE TABLE student(
idINT(11) PRIMARY KEY,idINT(11),
nameVARCHAR(12) PRIMARY KEY, nameVARCHAR(12),
ageINT(11) ageINT(11),
);PRIMARY KEY(id,name) );
1.2.2:外键约束
什么是外键举个例子就清楚了,有两张表,一张表是emp(员工)表,另一张表是dept(部门)表 , 一个员工属于一个部门 , 那么如何通过员工能让我们自己他在哪个部门呢mysql怎么删除外键?那就只能在员工表中增加一个字段,能代表员工所在的部门,那该字段就只能是存储dept中的主键了(因为主键是唯一的,才能确实是哪个部门,进而代表员工所在的部门,如果是部门名称 , 有些部门的名称可能是同名 。就不能区分了 。),像这样的字段 , 就符合外键的特点 , 就可以使用外键约束 , 使该字段只能够存储另一张表的主键 。如果不被外键约束,那么该字段就无法保证存储进来的值就一定是另一张表的主键值 。
外键约束的特点:
1、外键约束可以描述任意一个字段(包括主键),可以为空,并且一个表中可以有多个外键 。但是外键字段中的值必须是另一张表中的主键 。
2、这样被外键关联的两种表的关系可以称为父子表或者主从表 。子表(从表)拥有外键字段的表,父表(主表)被外键字段所指向的表 。
3、子表被外键约束修饰的字段必须和父表的主键字段的类型一样 。
注意:一个表中有被外键修饰的字段,就称该表有外键(是“有外键” 。而不是“是外键”),并会给该表中的外键约束取一个名称,所以我们常说的这个表有没有外键,指的不是被外键约束修饰的字段名,而是指这个表是否有存在外键约束 。也就是说,不能说这个表的外键是xxx(该表中被外键约束修饰的字段名) , 这种说法是错误的 , 但是大多数人已经习惯了这样,虽然影响不大,但是在很多时候需要理解一个东西时,会造成一定的困扰 。
格式:CONSTRAINT外键名称FOREIGN KEY(被外键约束的字段名称)REFERENCES主表名(主键字段)
英文解释:CONSTRAINT:约束REFERENCES:参考
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22),
location VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE tableB
(
id INT(11),
name VARCHAR(22) NOT NULL,
deptId INT(11),
PRIMARY KEY(id),
CONSTRAINT tableA_tableB_1 FOREIGH KEY(deptId) REFERENCES tableA(id)
);
解释:tableB中有一个名为tableA_tableB_1的外键关联了tableA和tableB两个表,被外键约束修饰的字段为tableB中的deptId,主键字段为tableA中的id
1.2.3:非空约束
NOT NULL. 被该约束修饰了的字段,就不能为空 , 主键约束中就包括了这个约束
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) NOT NULL,
location VARCHAR(50),
PRIMARY KEY(id)
);
1.2.4:唯一约束
UNIQUE被唯一约束修饰了的字段 , 表示该字段中的值唯一,不能有相同的值,通俗点讲,就好比插入两条记录,这两条记录中处于该字段的值不能是一样的 。
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) UNIQUE,
location VARCHAR(50),
PRIMARY KEY(id)
);
也就是说在插入的记录中,每条记录的name值不能是一样的 。
1.2.5:默认约束
Default指定这一列的默认值为多少,比如,男性同学比较多,性别就可以设置为默认男 , 如果插入一行记录时,性别没有填,那么就默认加上男
CREATE TABLE table
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
deptId INT(11) DEFAULT 1111,
salary FLOAT
);
1.2.6:自动增加
AUTO_INCREMENT 一个表只能一个字段使用AUTO_INCREMENT , 并且使用这个约束的字段只能是整数类型(任意的整数类型TINYINT,SMALLIN,INT,BIGINT),默认值是1,也就是说从1开始增加的 。一般就是给主键使用的,自动增加,使每个主键的值度不一样,并且不用我们自己管理 , 让主键自己自动生成
CREATE TABLE table(id INT(11) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(22) NOT NULL);
2、查询表结构
2.1、查看表基本结构语句
格式1:DESCRIBE 表名/DESC 表名这两个的功能是一样的,简写了单词describe
DESCRIBE student;
2.2、查看创建表的语句
格式:SHOW CREATE TABLE 表名
SHOW CREATE TABLE student;
这样显示的格式很不好,看不清楚,所以有了下面这个语句
格式:SHOW CREATE TABLE 表名\G
SHOW CREATE TABLE student\G;
3、修改数据表
修改数据表包括:对表中字段的增加、删除、修改 。在这个里面用的关键字为 ALTER
3.1、修改表名
格式:ALTER TABLE旧表名 RENAME[TO]新表名;
将student表名改为student1(改完后在改回来)
ALTER TABLE student RENAME TO student1;
3.2、修改表中的字段名
格式:ALTER TABLE表名 CHANGE旧字段名新字段名新数据类型
将student表中的name字段名改为 username
ALTER TABLE student CHANGE name username VARCHAR(30);
3.3、修改表中的数据类型
格式:ALTER TABLE表名 MODIFY字段名数据类型
ALTER TABLE student MODIFY username VARCHAR(20);
解释:只能修改字段名的数据类型,但是其原理跟上面change做的事情一样 , 这里也有修改字段名的过程,只不过修改后的字段名和修改前的字段名相同,但是数据类型不一样 。
3.4、修改字段的排列位置
方式1:ALTER TABLE表名 MODIFY字段1数据类型 FIRST|AFTER字段2
解释:将字段1的位置放到第一,或者放到指定字段2的后面
ALTER TABLE student MODIFY username VARCHAR(20) AFTER age;
方式2:ALTER TABLE表名 CHANGE字段1字段2数据类型 FIRST|AFTER字段3
解释:其实是一样的,将是字段2覆盖字段1,然后在进行排序
ALTER TABLE student CHANGE username username VARCHAR(20) AFTER age;
总结
CHANGE和MODIFY的区别mysql怎么删除外键?
原理都市一样的 , MODIFY只能修改数据类型,但是CHANGE能够修改数据类型和字段名,也就是说MODIFY是CHANGE的更具体化的一个操作 。可能觉得用CHANGE只改变一个数据类型不太爽 , 就增加了一个能直接改数据类型的使用关键字MODIFY来操作 。
3.5、添加字段
格式:ALTER TABLE表名称 ADD新字段名数据类型[约束条件][FIRST|AFTER已存在的表名]
解释:在一个特定位置增加一个新的字段,如果不指定位置,默认是最后一个 。
ALTER TABLE student ADD sex VARCHAR(11);
3.6、删除字段
格式:ALTER TABLE表名称 DROP字段名;
ALTER TABLE student DROP sex;
3.7、删除表的外键约束
格式:ALTER TABLE表名称 DROP FOREIGN KEY外键约束名
注意:外键约束名 指的不是被外键约束修饰的字段名,切记,而是我们在创建外键约束关系时取的名字 。
3.8、更改表的存储引擎
格式:ALTER TABLE表名 ENGINE=更改后的存储引擎名
这个存储引擎目前我自己也不太清楚 , 虽然知道有哪几种引擎,但是稍微深入一点就不清楚了,所以打算留到日后在说 。
4、删除表
4.1、删除无关联表
格式:DROP TABLE表名;
ALTER TABLE student;
4.2、删除被其他表关联的主表
这个是比较重要的一点 , 在有外键关联关系的两张表中,如果删除主表,那么是删不掉的,并且会报错 。因为有张表依赖于他 。那怎么办呢?针对这种情况 , 总共有两种方法
1、先删除你子表 , 然后在删除父表,这样就达到了删除父表的目的 , 但是子表也要被删除
2、先解除外键关系,然后在删除父表,这样也能达到目的,并且保留了子表,只删除我们不需要的父表 。在3.7中就讲解了如何删除外键关系 。
mysql怎么设置外键为级联删除,级联更新设定外键为级联删除就可以了 。
alter table B add constraint fk_ID foreign key (ID) references A(ID) on delete cascade;
这样只需:delete from A where ID=nnnn; 就可以自动删除对应B表内容了 。
通过外键无法实现同步更新 。
mysql数据库,我想删除一张表,这张表的主键又作为其它多张表的外键,InnoDB,且设置了删除cascade 。这样的操作明显违法了当初如此进行这些表关系设计的初衷 。
cascade用处在于,你删除某条记录时 , 如果主键值被删除 , 那么级联删除子表的相关数据 。
不适用于你现在的情况:删除主表?。。?
还是建议你想好,为什么要删除此表 。
安全起见的话,先删除各个外键,再删除主表;建议删除主表前,先备份(以免后悔)
【mysql怎么删除外键 mysql删除外键约束失败】mysql怎么删除外键的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于mysql删除外键约束失败、mysql怎么删除外键的信息别忘了在本站进行查找喔 。
推荐阅读
- 鸿蒙系统有必要,鸿蒙系统有必要刷全量包吗
- gtx690核显卡怎么样的简单介绍
- 关于酒令棋牌游戏的信息
- go语言知识图谱大全 go语言教程
- flutterlua绑定,flutter lua
- 微星h81m-p33装什么cpu,微星h81m p33支持什么内存条
- 视频号与直播,视频号直播用什么软件
- 怎么访问mysql多从 mysql多用户访问
- 红米7不兼容flutter,红米手机chrome安装不兼容