1. 程式人生 > 實用技巧 >JZOJ 3252. 【GDOI三校聯考】炸彈

JZOJ 3252. 【GDOI三校聯考】炸彈

操作資料庫

目錄

操作資料庫>操作資料庫中的表>操作資料庫中表的資料

MySQL關鍵字不區分大小寫!

1. 資料庫的增刪改查(瞭解)

1. 建立資料庫

CREATE DATABASE IF NOT EXISTS newDatabase;	--如果不存在,建立一個新的資料庫

2. 刪除資料庫

DROP DATABASE newDatabase;

3. 使用資料庫

--如果你的表名或者欄位名是一個特殊字元,就需要帶`(Tab上面)
USE `USER`;

4. 檢視資料庫

DROP DATABASE newDatabase;		--檢視所有的資料庫

2. 資料庫的列型別

1. 數值

資料型別 描述 位元組數
tinyint 十分小的資料 1個位元組
smallint 較小的資料 2個位元組
mediumint 中等大小的資料 3個位元組
int(常用) 標準的整數 4個位元組
bigint 較大的資料 8個位元組
float 浮點數 4個位元組
double 雙精度浮點數 8個位元組
decimal 字串形式的浮點數,
金融計算的時候一般使用decimal

2. 字串

資料型別 描述 大小
char 字串固定大小的 0~255
varchar(常用) 可變字串,對應Java中的String,儲存常用的變數 0~65535
tinytext 微型文字 2^8 - 1
text(常用) 文字串,儲存大文字 2^16 -1

3. 時間日期

資料型別 格式 描述
date YYYY-MM-DD 日期格式
time HH:mm:ss 時間格式
datetime YYYY-MM-DD HH:mm:ss 最常用的時間格式
timestamp 時間戳,1970.1.1到現在的毫秒數
year 年份表示

4. null

  • 沒有值,未知
  • 注意,不要使用NULL進行運算,結果為NULL

3. 資料庫的欄位屬性(重點)

1. Unsigned

  • 無符號的整數
  • 聲明瞭該列不能宣告為負數

2. zerofill

  • 0填充
  • 不足的位數,使用0來填充

3. 自增

  • 通常理解為自增,自動在上一條記錄的基礎上+1(預設)
  • 通常用來設計唯一的主鍵~index,必須是整數型別
  • 可以自定義設計主鍵自增的起始值和步長(在高階中寫)

4. 非空

NULL/not null

  • 假設設定為 not null,如果不給它賦值,就會報錯!
  • Null,如果不寫值,預設就是null!(不勾選非空)

5. 預設

  • 設定預設的值!
  • 例如:sex,預設值為男,如果不指定該列的值,則會有預設的值!

6. 拓展

/*每一個表,都必須存在如下五個欄位!
  做專案用的,表示一個記錄存在的意義!
id			主鍵
`version`	樂觀鎖
is_delete	偽刪除
gmt_create	建立時間
gmt_update	修改時間
*/

4. 建立資料庫表(重點)

/*注意點,使用英文括號,表的名稱和欄位儘量使用``括起來
  AUTO_INCREMENT 自增
  NOT NULL 非空
  DEFAULT 預設,後面是預設的欄位
  字串使用單引號括起來
  所有的語句後面加,最後一個不用加
  PRIMARY KEY 主鍵,一般一個表只有一個唯一的主鍵!在最後面寫
*/
CREATE TABLE 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 '性別',
	`birthdat` DATETIME DEFAULT NULL COMMENT '出生日期',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
	PRIMARY KEY(`id`)
)ENGINE INNODB DEFAULT CHARSET=utf8

查看錶資料務必重新整理!

格式總結(中括號中的為可選設定)

CREATE TABLE [IF NOT EXISTS] `表名` (
	`欄位名` 列資料型別 [屬性] [索引] [註釋],
    `欄位名` 列資料型別 [屬性] [索引] [註釋],
    ......
    `欄位名` 列資料型別 [屬性] [索引] [註釋]   
)[表型別] [字符集型別] [註釋]

5. 常用命令

SHOW CREATE DATABASE school	/*檢視建立資料庫的語句*/
SHOW CREATE TABLE student	/*檢視student資料表的定義語句*/
DESC student				/*顯示student資料表的結構*/

前兩個可以逆向從已有的資料庫和表中輸出建立這些資料庫和表的SQL語句

6. 資料表的型別

/*關於資料庫引擎
INNODB	預設使用
MYISAM	早期版本使用
*/
MYISAM INNODB
事務支援 不支援 支援
資料行鎖定 不支援 支援
外來鍵約束 不支援 支援
全文索引 支援 不支援
表空間的大小 較小 較大,
約為MYISAM的兩倍

常規使用操作:

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

7. 在物理空間存在的位置

所有的資料庫檔案都存在data目錄下,一個資料夾就對應一個數據庫

本質還是檔案的儲存!

MySQL引擎在物理檔案上的區別:

  • INNODB在資料庫表中只有一個*.frm檔案,以及上級目錄下的ibdata1檔案

  • MYISAM對應的檔案

    • *.frm 表結構的定義檔案
    • *.MYD 資料檔案(data)
    • *.MYI 索引檔案(index)

8. 設計資料庫表的字符集編碼

CHARSET=utf8

不設定的話,會是MySQL預設的字符集編碼(不支援中文)

MySQL的預設編碼是Latin1,不支援中文

9. 修改和刪除表

1. 修改表

/*修改表名
  ALTER TABLE 舊錶名 RENAME AS 新表名
*/
ALTER TABLE student RENAME AS student1
/*增加表的欄位
  ALTER TABLE 表名 ADD 欄位名 列屬性
*/
ALTER TABLE student1 ADD age INT(3)
/*修改表的欄位(重新命名,修改約束!)
  ALTER TABLE 表名 MODIFY 欄位名 列屬性
  ALTER TABLE 表名 CHANGE 舊欄位名 新欄位名 列屬性
*/
ALTER TABLE student1 MODIFY age VARCHAR(11)	/*修改約束,無法重新命名*/
ALTER TABLE student1 CHANGE age age1 INT(11)	/*欄位重新命名*/
/*刪除表的欄位
ALTER TABLE 表名 DROP 欄位名
*/
ALTER TABLE student1 DROP age1

2. 刪除表

/*刪除表(如果表存在再刪除)
  DROP TABLE IF EXISTS 表名
*/
DROP TABLE IF EXISTS student1

所有的建立和刪除操作,儘量加上判斷,以免報錯

10. 注意點

  • 所有的欄位名使用``包裹

  • 註釋 --或者/**/

  • sql關鍵字大小寫不敏感,建議大家寫小寫

  • 所有的符號全部用英文