一、主鍵 primary key
1.1、從約束條件上看,等同於not null+unique:非空且唯一
create table t1(id int primary key)
1.2、主鍵除了有約束效果外,還是innodb儲存引擎組織資料的依據
innodb儲存引擎在建立表的時候必定會有primary key,相當於表內的索引,通常在id欄位放置,可以快速的找到需要的資訊
1.2.1、當表內沒有主鍵 primary key時
當表內找不到任何關於非空且唯一欄位時,innodb儲存引擎會在自己內部提供乙個他隱藏的非空且唯一的字段,但是我們無法找到他。
1.2.2、當表內沒有primary key,但是有not null unique時,
innodb儲存引擎會按照從上到下找到第乙個not null unique ,並將它設定成主鍵
1.2.3、當表內有且只有乙個primary key時
通常primary key是以id/uid/sid欄位作為主鍵
1.2.4、聯合主鍵
將多個字段聯合起來作為主鍵,本質也是乙個主鍵:primary key (ip,port)
二、自增 auto_increment
自動增加序號,只能給主鍵新增,可以避免不斷地輸入序號
create table t1(id int primary key auto_increment,name char(16));'
insert into t1(name) values(
'jason
'),('
egon
');
三、表與表之間的關係
為避免表結構的資料擴充套件性差,浪費空間,組織結構不清晰,因此可以將乙個表進行拆解,並將其進行關聯。
表的關係分為四種,分別是:一對多關係,多對多關係,一對一關係,沒有關係
3.1、外來鍵 foreign key
外來鍵就是連線將表與表關聯在一起:foreign key
3.2、一對多關係
將一張表進行分解成兩張,其中一張資料相對比較單一,一張資料相對比較複雜,複雜的包含在單一的裡面就像乙個集合,例如乙個部門有多個員工,多的就是員工,單一的就是部門。
foreign key:1.設定在複雜的一方,也就是關聯表,而少的就是被關聯表
2.建立表的時候需要先建立被關聯表
3.錄入資料是,也要先錄入被關聯表
由於刪除和修改表內的資料,需要先刪除關聯表內資料,再刪除被關聯表內資料,所以有了同步更新和同步刪除
同步更新:on update cascade
同步刪除:on delete cascade
create table dep(id int primary key auto_increment,
dep_name char(16),
dep_desc chjar(32)
);create table emp(
id int primary key auto_increment,
name char(16),
gender enum(
'male
','female
','others'),
def_id int,
foreign key(dep_id) references dep(id)
on update cascade
#同步更新
on delete cascade#
同步刪除
);insert into dep(dep_name,dep_desc) values(
'教學部
','教育人
'),('
技術部','
搞研究'
);insert into emp(name,def_id) values(
'jason
',1),('
egon
',2),('
tank
',2)
3.3、多對多關係
多對多關係需要建立一張第三方的表,將兩張表進行關聯
create table book(id int primary key auto_increment,
title varchar(32),
price int
);create table author(
id int primary key auto_inceement,
name varchar(32),
age int
);craeate table book_and_author(
id int primary key auto_increment,
author_id int,
book_id int,
foreign key(author_id) references author(id)
on update cascade
#同步更新
on delete cascade #
同步刪除
foreign key(book_id) references book(id)
on update cascade
#同步更新
on delete cascade #
同步刪除
)
3.4、一對一關係
當欄位比較多時,可以將一張表拆成兩張一對一的表,外來鍵字段建議建立在使用頻率比較高的表中
create table authordetail(id int primary key auto_increment,
phone int,
addr varchar(64)
);create table author(
id int primary key auto_increment,
name varchar(32),
age int,
authordetail_id int unique,
foreign key(authordetail_id) references authordetail(id)
on update cascade
on delete cascade
)
四、修改表
4.1、修改表名
alter table 表名 rename 新錶名
4.2、增加字段
alter table 表名 add 欄位名 字段型別(寬度) 約束條件;
alter table 表名 add 欄位名 字段型別(寬度) 約束條件 first;
alter table 表名 add 欄位名 字段型別(寬度) 約束條件 after 欄位名;
4.3、刪除字段
alter table 表名 drop 欄位名;
4.4、修改字段
alter table 表名 modify 欄位名 字段型別(寬度) 約束條件;
alter table 表名 change 舊欄位名 新欄位名 字段型別(寬度) 約束條件;
五、複製表
由於sql語句查詢的是一張虛擬表,只能複製舊表,不能複製主鍵以及外來鍵
create table 表名 select * from 舊表;
create table new_dep2 select * from dep where id >3;
mysql表與表的鏈結 MySQL表連線
有3種 join 按照功能大致分為如下三類 cross join 交叉連線 inner join 內連線或等值連線 outer join 外連線 交叉連線cross join 交叉連線也叫笛卡爾積連線。笛卡爾積是指在數學中,兩個集合 x 和 y 的笛卡尓積 cartesian product 又稱直...
mysql表連線sql表 MYSQL表連線查詢
表連線查詢 一 交叉連線 笛卡爾積 查詢teacher和course表中所有的資料 select from teacher,course select name,courseid,course.id,cname from teacher,course where teacher.courseid c...
資料庫表與表的連線方式
第一部分 查詢理論 連線查詢方式有 內連線 外連線 左連線 右連線 全連線 交叉連線 左連線和右連線的區別 左連線以左表為基準進行查詢,左表資料會全部顯示出來,右表如果和左表匹配的資料則顯示相應欄位的資料,如果不匹配,則顯示為null 右連線剛好相反。全連線就是先以左表進行左外連線,然後以右表進行右...