1. 程式人生 > 其它 >MySQL(day 2)

MySQL(day 2)

技術標籤:個人學習感想mysql

MySQL(day 2)

1. 程式碼
show create database 資料庫名;--檢視建立資料庫語句
show create table 表名;--檢視建立資料表語句
DESC 表名; --顯示錶的結構
2. 資料庫引擎
MYISAM(早期使用)INNODB(預設使用)
事務支援不支援支援
資料行鎖定不支援(表鎖)支援(行鎖)
外來鍵約束支援不支援
全文索引支援不支援
表空間的大小較小較大,約2倍

常規使用操作:

  • MYISAM 節約空間,速度較快;
  • INNODB 安全性高,事物的處理,多表多使用者操作;

在物理空間存在的位置

所有的資料庫檔案都存在data目錄下,本質還是檔案的儲存;一個資料夾對應一個數據庫;

MYSQL 引擎在物理檔案上的區別

  • INNODB 在資料庫表中只有一個*.frm 檔案,以及上級目錄下的 iddata1檔案;
  • MYISAM對應檔案
    1. *.frm 表結構的定義檔案
    2. *.MYD 資料檔案(data)
    3. *.MYI 索引檔案(index)

設定資料表的字符集編碼

CHARSET=utf8

注:不設定的話會是MYSQL 預設的字符集編碼(不支援中文);

MYSQL的預設編碼是Latin1,不支援中文,因此建議建表是加上‘CHARSET=utf8’語句

3.修改表
ALTER TABLE 舊錶名 RENAME AS 新表名  --修改表名
ALTER TABLE 表名 ADD 欄位名 列屬性     --修改表的欄位
ALTER TABLE 表名 MODIFY 欄位名(age) 列屬性(VARCHAR11)) --修改表的欄位之修改約束; ALTER TABLE 表名 change 欄位名(age) 新欄位名(age1) 列屬性(VARCHAR11)變為int1)) --修改表的欄位之欄位重新命名; /*MODIFY 與 CHANGE的區別:change>modify;*/ ALTER TABLE 表名 drop 欄位名(age) --刪除表的欄位;

注:所有的建立和刪除加上判斷(IF EXISTS),以免報錯

4.外來鍵(瞭解)

方式一:建立表時

  1. 定義外來鍵key;
  2. 給外來鍵新增約束(執行引用)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 修改誰 set name = 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 不會影響自增;# 學習目標: