MySQL(day 2)
阿新 • • 發佈:2021-01-05
MySQL(day 2)
1. 程式碼
show create database 資料庫名;--檢視建立資料庫語句
show create table 表名;--檢視建立資料表語句
DESC 表名; --顯示錶的結構
2. 資料庫引擎
MYISAM(早期使用) | INNODB(預設使用) | |
---|---|---|
事務支援 | 不支援 | 支援 |
資料行鎖定 | 不支援(表鎖) | 支援(行鎖) |
外來鍵約束 | 支援 | 不支援 |
全文索引 | 支援 | 不支援 |
表空間的大小 | 較小 | 較大,約2倍 |
常規使用操作:
- MYISAM 節約空間,速度較快;
- INNODB 安全性高,事物的處理,多表多使用者操作;
在物理空間存在的位置
所有的資料庫檔案都存在data目錄下,本質還是檔案的儲存;一個資料夾對應一個數據庫;
MYSQL 引擎在物理檔案上的區別
- INNODB 在資料庫表中只有一個*.frm 檔案,以及上級目錄下的 iddata1檔案;
- MYISAM對應檔案
- *.frm 表結構的定義檔案
- *.MYD 資料檔案(data)
- *.MYI 索引檔案(index)
設定資料表的字符集編碼
CHARSET=utf8
注:不設定的話會是MYSQL 預設的字符集編碼(不支援中文);
MYSQL的預設編碼是Latin1,不支援中文,因此建議建表是加上‘CHARSET=utf8’語句
3.修改表
ALTER TABLE 舊錶名 RENAME AS 新表名 --修改表名
ALTER TABLE 表名 ADD 欄位名 列屬性 --修改表的欄位
ALTER TABLE 表名 MODIFY 欄位名(age) 列屬性(VARCHAR(11)) --修改表的欄位之修改約束;
ALTER TABLE 表名 change 欄位名(age) 新欄位名(age1) 列屬性(VARCHAR(11)變為int(1)) --修改表的欄位之欄位重新命名;
/*MODIFY 與 CHANGE的區別:change>modify;*/
ALTER TABLE 表名 drop 欄位名(age) --刪除表的欄位;
注:所有的建立和刪除加上判斷(IF EXISTS),以免報錯
4.外來鍵(瞭解)
方式一:建立表時
- 定義外來鍵key;
- 給外來鍵新增約束(執行引用)references 引用;
create tables if not exists 'student'(
'id' int(4) not null auto_increment comment'學號',
'name' varchar(30) not null default'匿名' comment'姓名',
'pwd' varchar(20) not null default'123456' comment'密碼',
'sex' varchar(2) not null default'女' comment'性別',
'brithday' datetime default 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 `drade`(`gradeid`)
)engine=innodb default charset=utf8 --主表
create tables if not exists 'grade'(
'gradeid' int(4) not null auto_increment comment'年級id',
'gradename' varchar(30) not null comment'年級名稱',
primary key('gradeid')
)engine=innodb default charset=utf8 --從表
注:刪除有外來鍵關係的表的時候,必須要先刪除引用別人的表(從表),在刪除被引用的表(主表);
方式二:建立表成功後新增外來鍵約束
/*建立表的時候沒有外來鍵關係*/
ALTER TABLE `表` ADD CONSTRAINT 約束名 FOREIGN KEY(作為外來鍵的列) REFERENCES 那個表(哪個欄位)
以上操作都是物理外來鍵,屬於資料庫級別;
最佳實踐:
- 使用多張表資料/外來鍵,利用程式實現;
5.DML語言(資料操作語言)
5.1新增(insert)
insert into 表名 ([欄位名1,欄位2,欄位3])values('值1','值2','值3',···)
/* insert into `student`(`name`,`pwd`,`sex`)VALUES(`張三`,`aaaa`,`男`)
或者 insert into `student` (`name`,`pwd`,`sex`) VALUES(`張三`,`aaaa`,`男`),(`李四`,`bbbb`,`女`)
*/
insert into 表名 ([欄位名1,欄位2,欄位3])values('值1'),('值2')··· --插入多個欄位
/*insert into `grade`(`gradename`) value(`大一`,`大二`) */
插入語句時,資料與欄位一一對應!
注:欄位與欄位之間使用英文逗號隔開;
欄位可以省略的,但是後面的值必須要一一對應,不能少;
可以同時插入多條資料,VALUES後面的值,需要使用隔開即可;
5.2修改
update
修改誰
setname
=WHILE Id=1;
UPDATE `student` SET `name`=`XX` WHERE id=1;
UPDATE `student` SET `name`=`XXX`; --不指定條件的情況下,會改動所有表!
UPDATE `student` SET `name`=`XXX`,`email`=`XXX` WHERE id=1; --修改多個屬性,用逗號隔開;
/*提煉語法:UPDATE 表名 set colnum_name=value,[colnum_name = value,...] WHERE [條件] */
條件:WHERE 子句 運算子
操作符 | 含義 |
---|---|
= | |
<>或!= | 不等於 |
>/</>=/<= | |
BETWEEN…AND… | 在某個範圍 [2,5] |
AND | 和 |
OR | 或 |
UPDATE `student` SET `name`=`XX` WHERE `name`=`XXXX` AND sex = `X`; --通過多個條件定位資料
/*語法:UPDATE 表名 set column_name = value,[column_name = value,...] WHERE [條件] */
注:value可以是一個具體的值,也可以是一個變數(例如時間);
UPDATE `student` SET `birthday`= CURRENT_TIME WHERE `name`=`XXXX` AND sex=`X`;
5.3刪除
delete 命令
DELete from `student`;--刪除資料
DELETE FROM `student` WHERE id=1; --刪除制定資料
TRUNCATE 命令
TRUNCATE `student`; --清空student表
作用:完全清空一個數據表,表的結構和索引約束不變;
兩個語句的區別:
-
TRUNCATE 重新設定自增列,計數器歸零;
-
TRUNCATE 不會影響事務;
-
delete 不會影響自增;# 學習目標: