1. 程式人生 > 實用技巧 >MySql 資料管理 (3)

MySql 資料管理 (3)

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 不會影響事務