MySQL資料管理 -- MySQL03
阿新 • • 發佈:2021-09-22
MySQL資料管理
外來鍵(瞭解)
CREATE TABLE `grade`( `gradeid` INT(11) NOT NULL AUTO_INCREMENT COMMENT'年級', `gradename` VARCHAR(30) NOT NULL COMMENT'名字', PRIMARY KEY(`gradeid`) )ENGINE = INNODB DEFAULT CHARSET = utf8 -- 學生表的gradeid 欄位 要去引用年紀表的gradeid -- 定義外來鍵key -- 給這個外來鍵新增約束 (執行引用) references 引用 CREATE TABLE `student`( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT'學號', `name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名', `powdata` VARCHAR(20) NOT NULL DEFAULT'123456'COMMENT'密碼', `sex` VARCHAR(10) NOT NULL DEFAULT'男'COMMENT'性別', `birthday` DATETIME DEFAULT NULL COMMENT'出生日期', `gradeid` INT(11) NOT NULL COMMENT'年級', `address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址', `email` VARCHAR(50) DEFAULT NULL COMMENT'郵箱地址', PRIMARY KEY(`id`), KEY `FK_gradeid` (`gradeid`), CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) )ENGINE = INNODB DEFAULT CHARSET=utf8
刪除有外來鍵關係的表的時候,必須要先刪除引用別人的表,在刪除有外來鍵的表
CREATE TABLE IF NOT EXISTS `grade`( `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT'班級學號', `gradename` VARCHAR(30) NOT NULL COMMENT'班級姓名', PRIMARY KEY(`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8 -- 學生表的gradeid 欄位 要去引用年紀表的gradeid -- 定義外來鍵key -- 給這個外來鍵新增約束 (執行引用) references 引用 CREATE TABLE `student`( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT'學號', `name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名', `powdata` VARCHAR(20) NOT NULL DEFAULT'123456'COMMENT'密碼', `sex` VARCHAR(10) NOT NULL DEFAULT'男'COMMENT'性別', `birthday` DATETIME DEFAULT NULL COMMENT'出生日期', `gradeid` INT(11) NOT NULL COMMENT'年級', `address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址', `email` VARCHAR(50) DEFAULT NULL COMMENT'郵箱地址', PRIMARY KEY(`id`) )ENGINE = INNODB DEFAULT CHARSET=utf8 -- 建立表的時候沒有外來鍵關係 ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
以上都是物理外來鍵,不建議使用
- 資料庫就是單純的表,只用來存資料,只有行(資料)和列(欄位)
- 外面想使用多張表的資料,想使用外來鍵(程式去實現)
DML語言(全部記住)
資料庫意義:資料儲存,資料管理
DML語言:資料操作語言
- Insert
- update
- delete
新增
-- 插入語句 -- insert into 表名([欄位名1,欄位名2,欄位名3])values('值1'),('值2'),('值3') INSERT INTO `grade`(`gradename`)VALUES('大四') -- 由於主鍵自增外面可以省略(如果不寫表的欄位,他就會一一匹配) INSERT INTO `grade` VALUES('大三') -- 一般寫插入語句,外面一定要資料和欄位一一對應 -- 插入多個欄位 INSERT INTO `grade`(`gradename`)VALUES('大一'),('大二') INSERT INTO`student`(`name`,`powdata`,`sex`)VALUES('張三','aaaaa','男'), ('李四','bbbbb','男'),('王二','ccccc','女')
修改
-- 修改名字
UPDATE `student`SET `name` = '狂神' WHERE id = 1
-- 不指定條件的情況下,會改動所有表
UPDATE `student` SET `name` = '長江七號'
-- 修改多個欄位
UPDATE `student`SET `name`='張三',`email`='[email protected]' WHERE id =1
操作符 | 含義 | 範圍 | 結果 |
---|---|---|---|
= | 等於 | 3=5 | false |
<>或!= | 不等於 | 3<>5 | false |
> | 小於 | 4<6 | true |
< | 大於 | 6>4 | true |
<= | 小於等於 | 4<=6 | true |
>= | 大於等於 | 4>=6 | false |
between | 兩者之間 | between 2 and 7 | |
and | && | 5>1 and 1>2 | false |
or | || | 5>1 or 1>2 | true |
-- 指定多個條件定位資料
UPDATE `student` SET `name` = '狂神5' WHERE `name` = '長江七號' AND sex = '男'
注意 :
- colnum_name是資料庫的列,儘量帶上``
- 條件,篩選的條件,如果沒有指定,則會修改所有的列
- value, 是一個具體的值,也可以是一個變數
- 多個設定的屬性之間,使用英文逗號隔開
刪除
語法:delete from 表名 [where 條件]
-- 刪除資料
DELETE FROM `student` WHERE id = 1
truncate命令
作用:完全清空一個數據庫表,表的結構和索引約束不會變
-- 清空student表
TRUNCATE `student`
delete和truncate 的區別
- 相同點:都能刪除資料,都不會刪除表結構
- 不同:
- truncate 重新設定自增列 計數器會歸零
- truncate 不會影響事物
-- dellete 和 truncate的區別
CREATE TABLE `test`(
`id` INT(4) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
PRIMARY KEY(`id` )
)ENGINE = INNODB DEFAULT CHARSET = utf8
INSERT INTO `test`(`name`) VALUES ('1'),('2'),('3')
DELETE FROM `test` -- 不會影響自增
TRUNCATE TABLE `test` -- 自增會歸零