MySql 資料管理 (3)
阿新 • • 發佈:2020-08-24
3.1 外來鍵
方式一 在建立表的時候,增加約束(麻煩,複雜)
create table `grade`(
`gradeid` int(11) not null auto_increment commit '學號',
`gradename` varchar(255) not null commit '名字',
primary key (`gradeid`)
)ENGING=INNODB DEFAULT CHARSET=utf8;
-- 學生表的gradeid欄位,要去飲用年級表中的gradeid欄位
-- 定義外來鍵key
-- 給這個外來鍵新增約束(執行引用) references 引用
create table `student`(
`id` int(4) not null auto_increment commit '學號',
`name` varchar(255) not null commit '名字',
`gradeid` int(11) not null commit '學號',
primary key (`id`),
KEY `FK_grade` (`gradeid`),
CONSTRAINT `FK_grade` FOREING key (`gradeid`) REFERENCES `grade` (`gradeid`)
)ENGING=INNODB DEFAULT CHARSET=utf8;
刪除有外來鍵關係的表的時候,必須先刪除引用別人的表(從表),在刪除被引用的表(主表)
方式二 新增表成功後,新增外來鍵約束
create table `grade`(
`gradeid` int(11) not null auto_increment commit '學號',
`gradename` varchar(255) not null commit '名字',
primary key (`gradeid`)
)ENGING=INNODB DEFAULT CHARSET=utf8;
create table `student`(
`id` int(4) not null auto_increment commit '學號',
`name` varchar(255) not null commit '名字',
`gradeid` int(11) not null commit '學號',
primary key (`id`)
)ENGING=INNODB DEFAULT CHARSET=utf8;
-- 建立表的時候沒有外來鍵約束
alter table `student`
add CONSTRAINT `FK_grade` FOREING key (`gradeid`) REFERENCES `grade` (`gradeid`)
-- alter table 表 add CONSTRAINT 約束名 FOREING key(作為外來鍵的列)REFERENCES 約束的表(表裡的欄位)
以上的操作是資料庫的物理外來鍵,資料庫級別的外來鍵,我們不建議使用!
最佳實踐
-
資料庫就是單純的表,只用來儲存資料,只有行(資料)和列(欄位)
-
我們想使用多張表的資料,使用邏輯外來鍵(程式碼裡實現)
3.2 DML 語言
本質:儲存資料,操作資料
語法:
-
insert
-
update
-
delete
3.3 新增
insert
-- 插入語句(新增)
-- insert into 表名([欄位名,欄位名,欄位名]) values([值1,值2...])
insert into `grade` (`gradeName`) values ('name');
-- 由於主鍵自增,我們可以省略(如果不寫表的欄位,他就會一一對應)
insert into `grade` values ('name');
-- 一般寫插入欄位,我們一定要資料和欄位一一對應
-- 插入多個欄位
insert into `grade` values ('name'),('name1');
insert into `student`(sex) values ('男');
insert into `student`(name,sex,age) values ('zz','男',10);
語法:-- insert into 表名([欄位名,欄位名,欄位名]) values([值1,值2...])
注意事項:
-
欄位和欄位之間用英文逗號隔開
-
欄位是可以省略的,不過需要全部一一對應
-
欄位可以同時插入多條資料,只要valuse後面的用逗號隔開即可。
3.4 修改
update
-- 修改學員名字
update `student` set `name`='aa' where id = 1;
-- 不指定條件下,會改動整個表
update `student` set `name`='aa'
-- 修改多個屬性,逗號隔開
update `student` set `name`='aa',sex = '男' where id = 1;
-- 語法:
update 表名 set column = value ,[column = value,column = value....] where [條件]
-- 通過多條件進行定位
update `student` set `name`='寶貝' where `name`='aa',sex = '男';
-- 變數
update `student` set `Birthday` = CURRENT_TIME where `name`='aa',sex = '男';
語法:update 表名 set column = value ,[column = value,column = value....] where [條件]
注意事項:
-
column 是資料庫上的列,儘量帶上``
-
條件,如果不新增上條件,則是修改所有的資料庫
-
value 可能是一個具體的值,也可以是一個變數
-
多個設定屬性之間,用逗號隔開
3.5 刪除
delete
語法:delete from 表名 where [條件]
-- 刪除資料
delete from `student`;
-- 根據條件刪除資料
delete from `student` where id = 1;
TRUNCATE
作用:完全清空一個數據庫的表,表的結構和索引約束不會變!
-- 清空資料庫的一張表
TRUNCATE `student`;
Delete 和 TRUNCATE 的區別
-
相同點 : 都可以刪除清空資料
-
不同點:
-
TRUNCATE 重新設定自增列進行自增
-
TRUNCATE 不會影響事務
-