JZOJ 3252. 【GDOI三校聯考】炸彈
阿新 • • 發佈:2020-08-10
操作資料庫
目錄
操作資料庫>操作資料庫中的表>操作資料庫中表的資料
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關鍵字大小寫不敏感,建議大家寫小寫
-
所有的符號全部用英文