1. 程式人生 > 資訊 >Redmi Book Pro 2022 筆記本確認搭載 12 代酷睿 H45 處理器

Redmi Book Pro 2022 筆記本確認搭載 12 代酷睿 H45 處理器

資料庫操作

操作資料庫 —>操作資料庫中的表—>操作資料庫中表的欄位

結構化查詢語句分類:

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、注意

  1. 每個庫目錄存在一個儲存當前資料庫的選項檔案db.opt。
  2. 模式萬用字元:
    1. _ : 任意單個字元
    2. % : 任意多個字元,甚至包括零字元
    3. 單引號需要進行轉義 \’
  3. CMD命令列內的語句結束符可以為 “;”, “\G”, “\g”,僅影響顯示結果。其他地方還是用分號結束。delimiter 可修改當前對話的語句結束符。
  4. SQL對大小寫不敏感 (關鍵字)
  5. 清除已有語句:\c