操作數據庫 > 操作數據庫中的表 > 操作數據庫中表的數據
注意:mysql關鍵字不分區大小寫
1.1、操作數據庫
1、創建數據庫
CREATE DATABASE [IF NOT EXISTS] westos;
2、刪除數據庫
DROP DATABASE [IF EXISTS] westos
3、使用數據庫
-- tab 鍵的上面,如果你的表名或者字段名是一個特殊字符,就需要帶 ``
USE `school`
4、查看數據庫
SHOW DATABASES -- 查看所有的數據庫
對比 : SQLyog 的可視化操作
學習思路:
- 對照 sqlyog可視化歷史記錄查看sql
- 固定的語法或關鍵字必須要強行記住!
1.2、數據庫的列類型
1.2.1、數值
- tinyint 十分小的數據 1個字節
- smallint 較小的數據 2個字節
- mediumint 中等大小的數據 3個字節
- int 標准的整數 4個字節 常用的 int
- bigint 較大的數據 8個字節
- float 浮點數 4個字節
- double 浮點數 8個字節 (存在精度問題需要注意)
- decimal 字符串形式的浮點數 金融計算的時候,一般是使用decimal
1.2.2、字符串
- char 字符串固定大小的 0~255
- varchar 可變字符串 0~65535 常用的變量 String
- tinytext 微型文本 2^8 - 1
- text 文本串 2^16 -1 保存大文本
1.2.3、時間日期
- date YYYY-MM-DD , 日期格式
- time HH:mm:ss 時間格式
- datetime YYYY-MM-DD HH:mm:ss 最常用的時間格式
- timestamp 時間戳, 1970.1.1 到現在的毫秒數! 也較為常用!
- year 年份表示
1.2.4、null
- 沒有值,未知
- 注意:不要使用NULL進行運算,結果為NULL
1.3、數據庫的字段屬性(重點)
Unsigned :
- 無符號的整數
- 聲明了該列不能聲明為負數
zerofill:
- 0填充的
- 不足的位數,使用0來填充, int(3) , 5 --- 005
自增:
- 通常理解為自增,自動在上一條記錄的基礎上 + 1(默認)
- 通常用來設計唯一的主鍵~ index,必須是整數類型
- 可以自定義設計主鍵自增的起始值和步長
非空( not null):
- 假設設置為 not null ,如果不給它賦值,就會報錯!
- NUll ,如果不填寫值,默認就是null!
默認:
- 設置默認的值!
- sex,默認值 為 男,如果不指定該列的值,則會有默認的值!
拓展:
/* 每一個表,都必須存在以下五個字段!未來做項目用的,表示一個記錄存在意義!
id 主鍵
`version` 樂觀鎖
is_delete 偽刪除
gmt_create 創建時間
gmt_update 修改時間
*/
1.4、創建數據庫表(重點)
-- 目標 : 創建一個school數據庫
-- 創建學生表(列,字段) 使用SQL 創建
-- 學號int 登錄密碼varchar(20) 姓名,性別varchar(2),出生日期(datatime),家庭住址,email
-- 注意點,使用英文 () , 表的名稱 和 字段 盡量使用 `` 括起來
-- AUTO_INCREMENT 自增
-- 字符串使用 單引號括起來!
-- 所有的語句后面加 , (英文的),最后一個不用加
-- 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 '性別',
`birthday` 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] `表名`(
'字段名' 列類型 [屬性] [索引] [注釋],
'字段名' 列類型 [屬性] [索引] [注釋],
......
'字段名' 列類型 [屬性] [索引] [注釋]
)[表類型][字符集設置][注釋]
常用命令:
SHOW CREATE DATABASE school -- 查看創建數據庫的語句
SHOW CREATE TABLE student -- 查看student數據表的定義語句
DESC student -- 顯示表的結構
1.5、 數據表的類型
- INNODB 默認使用~
- MYISAM 早些年使用的
InnoDB與MyISAM的區別:
MYISAM | INNODB | |
---|---|---|
事務支持 | 不支持 | 支持 |
數據行鎖定 | 不支持 | 支持 |
外鍵約束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空間的大小 | 較小 | 較大,約為 2 倍 |
常規使用操作:
- MYISAM 節約空間,速度較快
- INNODB 安全性高,事務的處理,多表多用戶操作
在物理空間存在的位置
所有的數據庫文件都存在 data 目錄下,一個文件夾就對應一個數據庫,本質還是文件的存儲!
MySQL 引擎在物理文件上的區別:
- InnoDB 在數據庫表中只有一個 *.frm 文件, 以及上級目錄下的 ibdata1 文件
- MYISAM 對應文件
- *.frm 表結構的定義文件
- *.MYD 數據文件 (data)
- *.MYI 索引文件(index)
設置數據庫表的字符集編碼
CHARSET=utf8
不設置的話,會是mysql 默認的字符集編碼~ (不支持中文!)
注意:MySQL的默認編碼是Latin1,不支持中文
在my.ini 中配置默認的編碼
character-set-server=utf8
1.6、修改刪除表
1.6.1、修改
- rename: 修改表名
- add: 增加表的字段
- modify: 修改列屬性(約束)
- change: 重命名
- drop: 刪除表的字段
-- 修改表名 : ALTER TABLE 舊表名 RENAME AS 新表名
ALTER TABLE teacher RENAME AS teacher1
-- 增加表的字段 : ALTER TABLE 表名 ADD 字段名 列屬性
ALTER TABLE teacher1 ADD age INT(11)
-- 修改表的字段 (重命名,修改約束!)
-- ALTER TABLE 表名 MODIFY 字段名 列屬性[]
ALTER TABLE teacher1 MODIFY age VARCHAR(11) -- 修改約束
-- ALTER TABLE 表名 CHANGE 舊名字 新名字 列屬性[]
ALTER TABLE teacher1 CHANGE age age1 INT(1) -- 字段重名名
-- 刪除表的字段: ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher1 DROP age1
1.6.2、刪除
-- 刪除表(如果表存在再刪除)
-- 注意:所有的創建和刪除操作盡量加上判斷,以免報錯
DROP TABLE IF EXISTS teacher1
注意點:
字段名
,使用`包裹防止出錯- 注釋 : /**/
- sql 關鍵字大小寫不敏感,建議大家寫小寫
- 所有的符號全部用英文!