工具/原料
成都創(chuàng)新互聯(lián)公司專(zhuān)注于晉寧網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供晉寧營(yíng)銷(xiāo)型網(wǎng)站建設(shè),晉寧網(wǎng)站制作、晉寧網(wǎng)頁(yè)設(shè)計(jì)、晉寧網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造晉寧網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供晉寧網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
電腦??MySQL
方法/步驟
設(shè)置主鍵:
1、通過(guò)終端進(jìn)入到mysql命令行工具。
2、通過(guò)use關(guān)鍵字進(jìn)行到目標(biāo)數(shù)據(jù)庫(kù)里。
3、如原表已有主鍵,先把原來(lái)的主鍵刪除掉,通過(guò)DROPPRIMARYKEY命令:ALTERTABLE`jingyan`DROPPRIMARYKEY;。
4、主鍵已經(jīng)沒(méi)有了。
5、通過(guò)命令:ADDPRIMARYKEY來(lái)添加ALTERTABLE`jingyan`ADDPRIMARYKEY(`id`)。
6、輸入后按下回車(chē)鍵即可看到queryok執(zhí)行成功的字符。
7、回到數(shù)據(jù)庫(kù)的可視化工具,即可顯示現(xiàn)在的表在id列上添加了主鍵了。
設(shè)置外鍵:
1、創(chuàng)建好主從表。
2、選擇主表,點(diǎn)擊設(shè)計(jì)表,進(jìn)入到表設(shè)計(jì)界面。
3、點(diǎn)擊外鍵,進(jìn)入到外鍵設(shè)置界面。
4、先設(shè)置外鍵名稱(chēng)和選擇主表的外鍵字段。
5、然后在設(shè)置外鍵字段對(duì)應(yīng)從表的數(shù)據(jù)庫(kù)、表名和字。
6、點(diǎn)擊保存就完成外鍵設(shè)置了。
select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME='box_alipay_trade_record';
定義外鍵的方法和詳細(xì)的操作步驟如下:
1、第一步,創(chuàng)建一個(gè)主從表,如下圖所示,然后進(jìn)入下一步。
2、其次,完成上述步驟后,選擇主表,然后單擊設(shè)計(jì)表進(jìn)入表設(shè)計(jì)界面,如下圖所示,然后進(jìn)入下一步。
3、接著,完成上述步驟后,單擊外鍵進(jìn)入外鍵的設(shè)置界面,如下圖所示,然后進(jìn)入下一步。
4、然后,完成上述步驟后,設(shè)置外鍵名稱(chēng),然后選擇主表的外鍵字段,如下圖所示,然后進(jìn)入下一步。
5、隨后,完成上述步驟后,設(shè)置與數(shù)據(jù)庫(kù),表名稱(chēng)和從屬表的單詞相對(duì)應(yīng)的外鍵字段,如下圖所示,然后進(jìn)入下一步。
6、最后,完成上述步驟后,單擊保存即可,如下圖所示。這樣,問(wèn)題就解決了。
增加外鍵
創(chuàng)建表的時(shí)候增加外鍵:在所有的表字段之后,使用foreign key(外鍵字段) references 外部表(主鍵字段)
在新增表之后增加外鍵:修改表結(jié)構(gòu),使用alter table 表名 add [constraint 外鍵名字] foreign key(外鍵字段) references 父表(主鍵字段);
修改外鍵刪除外鍵
alter table 表名 drop foreign key 外鍵名;
外鍵條件
外鍵要存在,首先必須保證表的存儲(chǔ)引擎是innodb
列類(lèi)型必須與父表的主鍵類(lèi)型一致
一張表中的外鍵名字不能重復(fù)
增加外鍵的字段數(shù)據(jù)已經(jīng)存在,必須保證數(shù)據(jù)與父表主鍵要求對(duì)應(yīng)
外鍵約束
有三種約束模式
district:嚴(yán)格模式(默認(rèn)的)
cascade:級(jí)聯(lián)模式
set null:置空模式
語(yǔ)法:foreign key(外鍵字段) references 父表(主鍵字段) on delete 模式 on update 模式;
聯(lián)合查詢(xún)
基本語(yǔ)法:
select 語(yǔ)句1
union [union 選項(xiàng)]
select 語(yǔ)句2……
union 選項(xiàng)
all:保留所有,不管重復(fù)
distinct:去重,默認(rèn)的
子查詢(xún)(sub query)
按位置分類(lèi)
from子查詢(xún)
where子查詢(xún)
exists子查詢(xún)
按結(jié)果分類(lèi)
標(biāo)量子查詢(xún)
列子查詢(xún)
行子查詢(xún)
表子查詢(xún)
子查詢(xún)
列子查詢(xún)
=any等價(jià)于in; -- 其中一個(gè)即可
any等價(jià)于some; -- 二者是一樣的
=all為全部
-- 創(chuàng)建外鍵
create table my_foreign1(
idint primary key auto_increment,
name varchar (20)not null comment
'學(xué)生姓名',
c_idint comment'班級(jí)id',
-- 增加外鍵
foreign key(c_id)references
my_class(id)
)charset utf8;
-- 創(chuàng)建表
create table my_foreign2(
idint primary key auto_increment,
name varchar (20)not null comment
'學(xué)生姓名',
c_idint comment'班級(jí)id'? -- 普通字段
)charset utf8;
-- 增加外鍵
alter table my_foreign2add
-- 指定外鍵的名字
constraint student_class_1? -- 可以指定多個(gè)外鍵 但是名字不能相同
-- 指定外鍵的字段
foreign key(c_id)
-- 引用父表主鍵
references my_class(id);
-- 刪除外鍵
alter table my_foreign1drop
foreign key my_foreign1_ibfk_1;? -- my_foreign1_ibfk_1 通過(guò)外鍵的名字來(lái)刪
-- 插入數(shù)據(jù);外鍵字段在父表不存在
insert into my_foreign2values (
null,'郭富城',4);? -- 沒(méi)有4號(hào)班級(jí)
insert? into my_foreign2values (
null,'項(xiàng)羽',1);
insert? into my_foreign2values (
null,'劉邦',2);
insert? into my_foreign2values (
null,'韓信',3);
-- 更新父表的記錄
update my_classset id=4 where id=1;? -- 失??;id=1記錄已經(jīng)被學(xué)生引用
update my_foreign2set c_id=2 where id=4;? -- 更新
update my_classset id=4 where id=3;? -- 可以;沒(méi)有學(xué)生引用此班級(jí)
-- mysql中添加外鍵約束遇到一下情況:
-- cannot add foreign key constraint
-- 出現(xiàn)這個(gè)問(wèn)題的原因是,外鍵的使用:
-- 1. 外鍵字段不能為該表的主鍵;
-- 2. 外鍵字段參考字段必須為參考表的主鍵
-- 插入數(shù)據(jù)
insert into my_foreign1values (
null,'馬超','3'
);
-- 增加外鍵
alter table my_foreign1add
foreign key(c_id)references
my_class(id);? -- 失?。灰?yàn)闆](méi)有3號(hào)班了
-- 創(chuàng)建外鍵,指定模式;刪除置空;更新級(jí)聯(lián)
create table my_foreign3(
idint primary key auto_increment,
name varchar (20)not null,
c_idint,
-- 增加外鍵
foreign key (c_id)
-- 引用表
references my_class(id)
-- 指定刪除模式
on delete set null
-- 指定更新模式
on update cascade
)charset utf8;
-- 插入數(shù)據(jù)
insert into my_foreign3values (
null,'劉備',1),
(null,'曹操',1),
(null,'孫權(quán)',1),
(null,'祝賀量',2),
(null,'周瑜',2);
-- 解除My_foreign2表的外鍵
alter table my_foreign2drop
foreign key student_class_1;
-- 更新父表主鍵
update my_classset id=3 where id=1;
-- 刪除父表主鍵
delete from? my_classwhere id=2;
-- 聯(lián)合查詢(xún)
select * from my_class
union? -- 默認(rèn)去重
select * from my_class;
select * from my_class
union all? -- 不去重
select * from my_class;
select id,c_name,roomfrom my_class
union all? -- 不去重
select name,number,idfrom my_student;
-- 需求;男生升序;女生降序(年齡)
(select * from my_student
where sex='男'
order by ageasc limit9999999)
union
(select * from my_student
where sex='女'
order by agedesc limit9999999);
select * from my_studentwhere
c_id=(
-- 標(biāo)量子查詢(xún)
select idfrom my_classwhere
c_name='python1903');-- id一定只有一個(gè)值(一行一列)
insert into my_classvalues (1,
'python1907','B407');
-- 列子查詢(xún)
select * from my_studentwhere
c_idin(select idfrom my_class);
-- any,some,all
select * from my_studentwhere
c_id=any(select idfrom my_class);
select * from my_studentwhere
c_id=some(select idfrom my_class);
select * from my_studentwhere
c_id=all(select idfrom my_class);
select * from my_studentwhere
c_id!=any(select idfrom my_class);? -- 所有結(jié)果(null除外)
select * from my_studentwhere
c_id!=some(select idfrom my_class);? -- 所有結(jié)果(null除外)
select * from my_studentwhere
c_id!=all(select idfrom my_class);? -- 所有2號(hào)班級(jí)(null除外)
select * from my_studentwhere
age=(select max(age)from
my_student)
and
height=(select max(height))from
my_student);
-- 行子查詢(xún)
select * from my_student
-- (age,height)稱(chēng)之內(nèi)為行元素
where (age,height)=(select max(
age),max(height)from my_student);
update my_studentset height=188
where name='王五';
select * from my_studentorder by
agedesc,heightdesc limit1;
select * from my_studentorder by
heightdesc;
-- 表子查詢(xún)
select * from my_studentgroup by
c_idorder by heightdesc;? -- 每個(gè)班選出第一個(gè)學(xué)生再按身高排序
select * from (select * from
my_studentorder by heightdesc)
as studentgroup by student.c_id;