MySQL學習

資料庫

請不要假裝很努力,因為結果不會陪你演戲。

typora快捷鍵 //blog.csdn.net/weixin_30619101/article/details/97707926

1. 認識資料庫

1.1 資料庫分類

類型 關係型資料庫 非關係型資料庫
舉例 MySQL,Oracle,SQL server,DB2,SQLite Redis,MongDB
特徵 通過表和表之間,行和列之間的關係進行數據的存儲。 非關係型資料庫,對象存儲,通過對象的自身屬性來決定

1.2 Mysql資料庫

MySQL是一個關係型資料庫管理系統,由瑞典[MySQL AB](//baike.baidu.com/item/MySQL AB/2620844) 公司開發,屬於 Oracle 旗下產品。

MySQL是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一。

MySQL所使用的 SQL 語言是用於訪問資料庫的最常用標準化語言。

2. 操作資料庫

2.1 連接資料庫

  • 連接到伺服器
$> mysql -h host -u user -p
Enter password: ********
  • 斷開連接

    QUIT(或\q或exit)來斷開連接:

mysql> QUIT
Bye
  • 單行注釋
--
  • 多行注釋
/*
xx
*/

結構化語言(CURD)

DDL(Data DefinitionLanguage) 資料庫定義語言

DML(Data Manipulation Language) 資料庫操作語言

DQL(Data QueryLanguage) 資料庫查詢語言

DCL(Data Control Language) 資料庫控制語言

2.2 操作資料庫

  1. 創建資料庫
create database[if not exists] 資料庫名;
  1. 刪除資料庫
drop database[if exists] 資料庫名;
  1. 使用資料庫(如果表名是特殊字元,則需要加``)
use 資料庫名--;可以省略
  1. 查看資料庫
show databases;--查看所有的資料庫
  1. 查看創建資料庫
show create database 資料庫名;

2.3 數據表的列類型

數值

類型 特徵 大小
tinyint 十分小的數據 1個位元組
smallint 較小的數據 2個位元組
mediumint 中等大小的數據 3個位元組
int 標準的整數 4個位元組
bigint 較大的數據 8個位元組
float 浮點數 4個位元組
double 浮點數(雙精度) 8個位元組
decimal 字元串形式的浮點數(金融行業)

字元串

類型 特徵 大小
char 字元串固定大小 0~255
varchar 可變字元串(string) 0~6553
tingytex 微型文本 2^8-1
text 文本串(保存大文本) 2^16-1

時間日期

類型 格式 備註
date YYYY-MM-DD 日期格式
time HH:mm:ss 時間格式
datetime YYYY-MM-DD HH:mm:ss 最常用的格式
timestamp 1970-1-1至今 時間戳
year YYYY 年份表示

null

空值,未知

  • 不要使用null運算,結果為null

2.4 數據表的欄位屬性

Unsigned:

  • 無符號整數
  • 聲明了該列不能為負數

Zerofill(無符號):

  • 0填充
  • 不足位數,用0填充

自增:

  • 自動在上一條記錄的基礎上加1
  • 通常用來設計唯一主鍵--index,必須是整數
  • 可以自定義初始值和步長

不是Null:

  • 如果設置為not null,不賦值則為空
  • null,如果不填寫值,默認為nnull

默認(default):

  • 設置默認值

表的定義規則

***每一個表,都必須存在以下五個欄位!表示一個記錄存在的意義!

id			主鍵
`version`	樂觀鎖
is_create	偽刪除
gmt_create	創建時間
gmt_update	修改時間

2.5 創建數據表

create table [if not exists] `表名`(
	`欄位名` 列類型[屬性][索引][注釋],
	`欄位名` 列類型[屬性][索引][注釋],
	…………
	`欄位名` 列類型[屬性][索引][注釋]
)[表類型][字符集設置][注釋]
  • 格式
create table if not exists `student`(
`id` int(4) not null auto_increment primary key,
`name` varchar(10) not null,
`gender` varchar(2) not null,
`birthdy` datetime not null
)engine=innodb default charset=utf8
  • 查看創建數據表
show create table 表名;
  • 查看錶的結構
desc 表名;	--describe 表名;
  • 刪除表
drop table [if exists] 表名;

資料庫引擎

myisam innodb
事物支援 不支援 支援
數據行鎖定 不支援 支援
外鍵約束 不支援 支援
全文索引 支援 不支援
表空間的大小 較小 較大,約為2倍

常規使用操作:

  • myisam 節約空間,速度較快
  • innodb 安全性高,事務的處理,多表用戶操作

資料庫的物理空間

在安裝目錄的data文件夾下!

本質還是文件的存儲

MySQL引擎在物理文件上的區別

  • innodb在資料庫表中只有一個*.frm文件,以及上機目錄下的ibdata1文件
  • myisam對應文件
    • *.fram 表結構的定義文件
    • *.myd 數據文件(data)
    • *.myi 索引文件(index)

字符集編碼

設置資料庫表的字符集編碼

charset=utf8

默認編碼格式latin1(不支援中文)

在my.ini中修改默認配置

2.6 修改數據表

  1. 修改表名
alter table 舊錶名 rename as 新表名;
  1. 增加表的欄位
alter table 表名 add 欄位名 列屬性;
  1. 修改表的欄位
修改欄位約束

alter table 表名 modify 欄位名 列屬性;
修改欄位名

alter table 表名 change 欄位名 列屬性;

modify和change區別

  • modify不能用來欄位重命名,只能修改欄位類型和約束

  • change用來欄位重命名,不能修改欄位類型和約束

  1. 刪除表的欄位
alter table 表名 drop 欄位名;

3. MySQL數據管理

3.1 外鍵

方法一 (創建的時候添加外鍵約束)

定義外鍵key,添加外鍵添加約束

create table `grade`(
`gradeid` int(4) not null auto_increment,
`gradename` varchar(10) not null,
primary key (`gradeid`)
)engine=innodb default charset=utf8

create table if not exists `student`(
`id` int(4) not null auto_increment ,
`name` varchar(10) not null,
`gradeid`  varchar(10) not null,  
`gender` varchar(2) not null,
`birthdy` datetime not null.
primary key (`id`),
key `fk_gradeid` (`gradeid`),    
constraint `fk_gradeid` foreign key (`gradeid`) references `grade` (`gradeid`)
)engine=innodb default charset=utf8

方法二 (表創建完添加外鍵約束)

alter table 表名 
add constraint `fk_gradeid` foreign key(`gradeid`) references `grade` (`gradeid`)

以上操作為物理外鍵,通常使用程式來實現外鍵

3.2 DML語言(資料庫操作語言)

insert 插入

update 修改

delete 刪除

3.3 添加

insert

插入語句(欄位和值對應 )

inert into 表名([欄位1][欄位2][...]) values([值1][值2[...]);

INSERT INTO `student`(`name`,`age`)VALUES('李四','18')

3.4 修改

update

指定條件

update 表名 set colnum_name=value where 條件;

不指定條件(會改動所有表)

update 表名 set colnum_name=value;

修改多個屬性

update 表名 set colnum_name1=value1,[colnum_name2=value2] where 條件;

UPDATE `student` SET `name` = '王五' WHERE id = 2

操作符返回 布爾值

操作符 含義 範圍 結果
= 等於 5=6 false
<> 或 != 不等於 5<>6 true
> 大於 5>6 false
< 小於 5<6 true
>= 大於等於 5>=6 false
<= 小於等於 5<=6 true
between...and... 區間 [5,6]
and 與(&&) 5 and 6
or 或(||) a>5 or b< 6
通過多個條件定位語句

UPDATE `student` SET `name` = '嶼龍' WHERE `id` >= 2 OR `name` != '嶼龍'

注意:

  • colnum_name 是資料庫的列要加上``

  • value可以是具體值,也可以是變數

3.5 刪除

delete

語法:delete from 表名 [where 條件]

-- 刪除資料庫
delete from `student`

-- 刪除指定數據
delete from `student` where `id` = 1 

truncate 命令

作用:完全清空一個資料庫,表的約束和結構不變

-- 清空資料庫
truncate `student`

delete 和truncate區別

  • 相同點:都能刪除數據,都不會刪除表的結構
  • 不同點:
    • truncate 重新設置自增列 計數器歸零
    • truncate 不會影響事物

4.DQL查詢數據

4.1DQL(資料庫查詢語言)

所有查詢 語句 select

4.2 查詢指定欄位

語法:select 欄位 1,...from 表

-- 查詢全部學生
select * from student

-- 查詢指定欄位
select `name`,`age` from student

-- 別名:給結果/表起一個名字 as
select `name` as 姓名,`age` as 年齡 from student from student as a

-- sql函數 concat拼接字元串
select concat('姓名:',`name`) as 新名字 from student

註:當欄位名不能很好的表示數據本來的意思,可以給欄位起別名以便於理解

distinct 去重

作用:去除select查詢出來的結果中重複的數據,重複的數據只顯示一條

-- 查詢一下有哪些同學參加了考試,成績
SELECT * FROM resu1t -- 查詢全部的考試成績
SELECT `studentNo` FROM result -- 查詢有哪些同學參加了考試
SELECT DISTINCT `studentNo` FROM resu1t -- 發現重複數據,去重

資料庫的列(表達式)

select version() -- 查詢資料庫的版本(函數)
selcet 1*55-1 as 計算結果 -- 用來計算(表達式)
select @@auto_increment_increment -- 查詢自增的步長(變數)

-- 成績+1分
SELECT `studentNo`, `studentResult` +1 AS `提分後` FROM result

資料庫中的表達式:文本值,列,NUl,函數,計算表達式,系統變數

select 表達式 from 表

4.3 where條件子句

作用:檢索數據中符合條件的值

搜索的條件由一個或多個組成

邏輯運算符

運算符 語法 描述
and && a and b a&&b 邏輯與,同為真時為真
or || a or b a||b 邏輯或,同為假時假
not ! not a !a 邏輯非,取反
SELECT studentNo. `studentResult` FROM result

-- 查詢考試成績在95~100分之間
SELECT studentNo, `studentResult` FROM result WHERE StudentResult>=95 AND StudentResult<=100
-- and&&
SELECT studentNo, `studentResult` FROM result WHERE studentResu1t>=95 && studentResult<=100
-- 模糊查詢(區間)
SELECT studentNo, `studentResult` FROM result WHERE StudentResu1t BETWEEN 95 AND 100
-- 除了1000號學生之外的同學的成績
SELECT studentNo, `studentResult` FROM result WHERE studentNo!=1000
-- !=not
SELECT studentNo, `studentResult` FROM result WHERE NOT studentNo = 1000
Tags: