Redmi Book Pro 2022 筆記本確認搭載 12 代酷睿 H45 處理器
阿新 • • 發佈:2022-03-15
資料庫操作
操作資料庫 —>操作資料庫中的表—>操作資料庫中表的欄位
結構化查詢語句分類:
1、操作資料庫
create database [if not exists] 資料庫名; #建立資料庫,[]裡的是可寫可不寫的 drop database [if exists] 資料庫名; #刪除資料庫,[]裡的是可寫可不寫的 show databases; #檢視所有資料庫 use 資料庫名; #使用指定資料庫 -- 舉例: create database mydb; drop database if exists mydb; show database; use mydb;
2、操作資料表
#建立資料庫一定要先選擇資料庫 create table [if not exists] 表名( #建立資料表 欄位名1 列型別[屬性][索引][註釋], 欄位名2 列型別[屬性][索引][註釋], `欄位名1` 列型別[屬性][索引][註釋], -- 說明:反引號(Tab鍵上的那個) 用於區別Mysql保留字與普通字元而引入的 ... ... 欄位名n 列型別[屬性][索引][註釋] )[表型別][表字符集][註釋]; desc 表名; #顯示錶結構 -- comment 註釋 -- 舉例: create table goods( id int(4) not null auto_increment commemt '字串', name char(30) not null default '匿名' comment '姓名' )engine=innodb default charset=latin1; desc goods;
3、列型別
規定資料庫中該列存放的資料型別。
3.1、數值型別
(1)整數
型別 | 描述 | 取值範圍 | 大小 |
---|---|---|---|
tinyint | 十分小的資料 | 有符號:-2⁷~2⁷-1 無符號:0~2⁸-1 |
1個位元組 |
smallint | 較小的資料 | 有符號:-2¹⁵~2¹⁵-1 無符號:0~2¹⁶-1 |
2個位元組 |
mediumint | 中等大小的資料 | 有符號:-2²³~2²³-1 無符號:0~2²⁴-1 |
3個位元組 |
int(常用) | 標準的整數 | 有符號:-2³¹~2³¹-1 無符號:0~2³²-1 |
4個位元組 |
bigint | 較大的資料 | 有符號:-2⁶³~2⁶³-1 無符號:0~2⁶⁴-1 |
8個位元組 |
注意:int(m),這裡的m表示的是最大顯示寬度,最大有限顯示寬度為255。顯示寬度與儲存大小或型別包含的值的範圍無關。
比如INT(3)的情況下插入數字20,數字2,數字200,顯示的結果為:020;002;200
(2)浮點數
型別 | 描述 | 取值範圍 | 大小 |
---|---|---|---|
float | 浮點數 | ±1.1754351e-38 | 4個位元組 |
double(常用) | 浮點數 | ±2.2250738585072014e-308 | 8個位元組 |
decimal(金融常用) | 字串形式的浮點數 | decimal(m,d) | m個位元組 |
decimal(13,2)代表這個數字有13位,小數點後面有2位。
decimal為金融類專案上常用的資料型別,因為以字串形式儲存,所以不存在精度不夠的問題,使用時再將字串轉換為浮點數。
3.2、字串型別
型別 | 描述 | 大小 |
---|---|---|
char | 固定大小的字串 | 0~255 |
varchar(常用) | 可變長度的字串 | 0~65535 |
tinytext | 微型文字 | 255個位元組 |
text(常用) | 文字串,用於大型文章 | 65535個位元組 |
char為固定長度的字串,假設建表時設定資料型別為char(10),輸入資料為"abcd",佔用長度依舊為10。適合存放手機號、身份證號等長度相對固定的資料。
varchar為可變長度的字串,引用上述例子,varchar(10)中寫入"abcd"佔長度為4個位元組,適合用於長度不確定的資料,如姓名等。
3.3、日期和時間型數值型別
型別 | 描述 | 取值範圍 |
---|---|---|
date | YYYY-MM-DD,日期格式 | 1000-01-01~9999-12-31 |
time | HH:MM:SS,時間格式 | -838:59:59~838:59:59 |
datetime(最常用) | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~9999-12-31 23:59:59 |
timestamp(較常用) | YYYYMMDDhhmmss格式表示的時間戳 | 1970.1.1到現在的毫秒數 |
year | YYYY格式的年份表示 | 1901~2155 |
3.4、NULL值
沒有值,未知。
儘量不要使用NULL進行算數運算,結構仍為NULL,可以但不建議。
3.5、如何選擇合適的資料型別
(1)整數和浮點:如果你存的這一列沒有小數,就選整數型別(貨幣選decimal)
(2)日期型別:一般選DATETIME型別;以後可能會用到TIMESTAMP型別。但是後面這個的儲存範圍是小於前面這個的。
(3)char和varchar:char是固定長度的,varchar是可變長度的。如果儲存的東西對速度要求很高而對空間要求比較小,就用char;反之則用varchar。
4、欄位屬性
4.1、unsigned
- 無符號的
- 宣告該資料列不允許負數
4.2、zerofill
- 零填充
- 不足位數的用0來填充,如int(3),5 則為005
4.3、auto_increment
- 自動增長的,每新增一條資料,自動在上一個記錄數上加1
- 通常用於設定唯一的主鍵,且為整數型別
- 可定義起始值和步長
4.4、null和not null
- 預設為NULL,即沒有插入該列的數值
- 如果設定為NOT NULL,則該列必須有值,如果不給其賦值,就會報錯
4.5、default
- 預設的
- 用於設定預設值
- 如設定了sex,預設值為男,如果不指定該列的值,則會有預設的值!
每一個表 ,都必須存在以下五個欄位:
--未來做專案會用到,表示一個記錄存在的意義
- id 主鍵;
- vorsion 樂觀鎖;
- is_delete 偽刪除;
- gmt_create 建立時間;
- gmt_update 修改時間;
例項
#建立Student表(學號int、登入密碼varchar(20)、姓名varchar、性別varchar(2)、出生日期(Datetime)、家庭住址、email)
CREATE TABLE IF NOT EXISTS student(
id INT(4) PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵 ,學號',
pwd VARCHAR(20) DEFAULT '123456' NOT NULL COMMENT '密碼',
`name` VARCHAR(30) DEFAULT 'a' NOT NULL COMMENT '姓名',
sex VARCHAR(2) NOT NULL DEFAULT '1',
birthday DATETIME,
address VARCHAR(100),
email VARCHAR(50)
)engines=InnODB default charset=utf8
5、表型別
-- 檢視mysql所支援的引擎型別 (表型別)
SHOW ENGINES;
MySQL的資料表的型別 : MyISAM , InnoDB , HEAP , BOB , CSV等…
5.1、MyISAM 與 InnoDB 型別
名稱 | MyISAM | InnoDB |
---|---|---|
事務處理 | 不支援 | 支援 |
資料行鎖定 | 不支援 | 支援 |
外來鍵約束 | 不支援 | 支援 |
全文索引 | 支援 | 不支援 |
表空間大小 | 較小 | 較大,約2倍 |
5.2、適用場合
- 適用 MyISAM : 節約空間及相應速度;
- 適用 InnoDB : 安全性 , 事務處理,多使用者操作資料表;
5.3、在物理空間存在的位置
- MySQL資料表以檔案方式存放在磁碟中;
- 包括表文件 , 資料檔案 , 以及資料庫的選項檔案;
- 位置 : Mysql安裝目錄\data\下存放資料表 . 目錄名對應資料庫名 , 該目錄下檔名對應資料表;
- 注意 :
- * . frm – 表結構定義檔案;
- * . MYD – 資料檔案 ( data );
- * . MYI – 索引檔案 ( index );
- InnoDB型別資料表只有一個 *.frm檔案 , 以及上一級目錄的ibdata1檔案;
- MyISAM型別資料表對應三個檔案;
5.4、設定資料表字符集
- 我們可為資料庫,資料表,資料列設定不同的字符集,設定方法:
- 建立時通過命令來設定 , 如 : CREATE TABLE 表名() CHARSET = utf8;
- 如無設定 , 則根據MySQL資料庫配置檔案 my.ini 中的引數設定。
6、修改資料庫
6.1、ALTER 修改
#修改表名
alter table 舊錶名 rename as 新表名;
#新增欄位
alter table 表名 add 欄位名 列屬性[屬性];
#修改欄位
alter table 表名 modify 欄位名[屬性];
alter table 表名 change 舊欄位名 新欄位名[屬性];
#刪除欄位
alter table 表名 drop 欄位名;
示例:
USE school;
CREATE TABLE `teacher`(
`id` INT(10) NOT NULL COMMENT '教師ID',
`name` VARCHAR(100) NOT NULL COMMENT '教師姓名',
`age` INT(3) NOT NULL COMMENT '教師年齡',
PRIMARY KEY (`id`)
) ENGINE=INNOBASE CHARSET=utf8 COLLATE=utf8_general_ci;
-- 修改表名 :ALTER TABLE 舊錶名 RENAME AS 新表名;
ALTER TABLE teacher RENAME AS teacher1;
-- 新增欄位 : ALTER TABLE 表名 ADD 欄位名 列屬性[屬性];
ALTER TABLE teacher1 ADD age INT(12);
-- 修改欄位 : ALTER TABLE 表名 MODIFY 欄位名 列型別[屬性];
ALTER TABLE teacher1 MODIFY age VARCHAR(12); -- 修改約束
ALTER TABLE teacher1 CHANGE age age1 INT(12); -- 欄位重新命名
-- 刪除欄位 : ALTER TABLE 表名 DROP 欄位名;
ALTER TABLE teacher1 DROP age1;
6.2、DROP 刪除
#刪除資料表
DROP TABLE [IF EXISTS] 表名;
7、注意
- 每個庫目錄存在一個儲存當前資料庫的選項檔案db.opt。
- 模式萬用字元:
- _ : 任意單個字元
- % : 任意多個字元,甚至包括零字元
- 單引號需要進行轉義 \’
- CMD命令列內的語句結束符可以為 “;”, “\G”, “\g”,僅影響顯示結果。其他地方還是用分號結束。delimiter 可修改當前對話的語句結束符。
- SQL對大小寫不敏感 (關鍵字)
- 清除已有語句:\c