標籤:

MySQL知識點總結

1.1 MySQL概述

1.1.1 什麼是MySQL資料庫

1.1.2 關係型資料庫

關係資料庫,是建立在關係模型基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的數據。現實世界中的各種實體以及實體之間的各種聯繫均用關係模型來表示。關係模型是由埃德加·科德於1970年首先提出的,並配合「科德十二定律」。現如今雖然對此模型有一些批評意見,但它還是數據存儲的傳統標準。標準數據查詢語言SQL就是一種基於關係資料庫的語言,這種語言執行對關係資料庫中數據的檢索和操作。 關係模型由關係數據結構、關係操作集合、關係完整性約束三部分組成。

簡單說,關係型資料庫是由多張能互相聯接的二維行列表格組成的資料庫。

1.1.3 ER模型圖

E-R圖也稱實體-聯繫圖(Entity Relationship Diagram),提供了表示實體類型、屬性和聯繫的方法,用來描述現實世界的概念模型。

它是描述現實世界關係概念模型的有效方法。是表示概念關係模型的一種方式。用「矩形框」表示實體型,矩形框內寫明實體名稱;用「橢圓圖框」表示實體的屬性,並用「實心線段」將其與相應關係的「實體型」連接起來;

用」菱形框「表示實體型之間的聯繫成因,在菱形框內寫明聯繫名,並用」實心線段「分別與有關實體型連接起來,同時在」實心線段「旁標上聯繫的類型(1:1,1:n或m:n)

1.1.4常見的關係型資料庫

  • MySQL
  • Oracle
  • SQLServer
  • DB2
  • SyBase

1.1.5 MySQL資料庫存儲數據方式


1.2 SQL的概述

1.2.1 什麼是SQL(Structured Query Language)

1.2.2 SQL的分類

1.2.2.1 DDL(數據定義語言 Date Definition Language)

--創建新資料庫/表(碼字方便,SQL無此種語法)create database / table--更該資料庫/表alter database / table--刪除表drop table

1.2.2.2 DCL(數據控制語言 Date Control Language)

grant --許可權分配revoke --撤銷許可權

1.2.2.3 DML(數據操縱語言 Date Manipulation Language)

update -- 更新資料庫表中的數據 delete -- 從資料庫表中刪除數據 insert into -- 向資料庫表中插入數據

1.2.2.4 DQL(數據查詢語言 Date Query Language)

select -- 從資料庫表中獲取數據


1.3 SQL的使用

1.3.1對資料庫進行操作

1.3.1.1創建資料庫

--語法:create database 資料庫名稱 [character set 字符集 collate 字符集校對規則 ]--例如:--ex1:創建資料庫名稱為db1的資料庫create database db1;--ex2:創建資料庫名稱為db2,字符集為utf8的資料庫create database db2 character set utf8;----ex3:創建資料庫名稱為db3,字符集為utf8,字符集校對規則為utf8_bin的資料庫create database db3 character set utf8 collate utf8_bin;

1.3.1.2 查看資料庫 :

--查看數據伺服器中所有的資料庫show databases;--查看某個資料庫的定義信息show create database db2

1.3.1.3 修改資料庫:

/*語法:alter database 資料庫名稱 character set 字符集 collate 字符集校對規則類似於創建資料庫,只是將關鍵字替換為 alter*/ alter database db1 character set gbk;

1.3.1.4 刪除資料庫:

/*語法: drop database 資料庫名稱*/drop database db1;

1.3.1.5 其他資料庫的操作:

--切換資料庫use 資料庫名稱--查看正在使用的資料庫select database();


1.3.2 SQL對資料庫表進行操作

1.3.2.1創建表

  • 語法:
  • create table 表名稱(欄位名稱 欄位類型(長度) 約束,欄位名稱 欄位類型(長度) 約束。。。。);
  • 欄位類型:一個實體對應一個表,一個實體的屬性對應一個欄位

1.3.2.2數據類型:

  • Text 類型:

(註:char保存固定長度的字元串,例如定義char(8),存入hello,那麼資料庫將會用三個空格將其補全;varchar 保存長度可變的字元串,例如定義varchar(8),存入hello,那麼存入資料庫的就是hello)


  • Number類型:


  • date數據類型:

(註:datatime()是既有時間又有日期的日期類型,如果沒有像資料庫中存值,資料庫就會使用null存入到資料庫中;timestamp()也是既有時間又有日期的日期類型,如果沒有日期存入到資料庫中,資料庫會使用系統的當前時間存入到數據中)


1.3.2.3約束:

作用:保證數據的完整性

單表約束分類:

  • 主鍵約束:primary key (主鍵約束默認就是 唯一 、非空的)

--在創建表時創建主鍵create table Persons{ID_P int not null,LastName varchar(255) not null,FirstName varchar(255),Address varchar(255),City varchar(255),primary key(ID_P)}--如果需要給primary key 命名及為多個列定義primary key時,用下面的語法create table Persons{ID_P int not null,LastName varchar(255) not null,FirstName varchar(255),Address varchar(255),City varchar(255),constraint uc_PersonID primary key(ID_P,LastName)}--如果表已經存在,給列創建主鍵約束時,請使用下面的語法alter table Persons add primary key (ID_P);--如果表已經存在,需要給primary key 命名及為多個列定義primary key時,用下面的語法alter table Persons constraint pk_PersonID primary key(ID_P,LastName);--撤銷主鍵約束alter table Persons drop primary key;

  • 唯一約束:unique

/*unique 約束唯一標識資料庫中表的每條記錄unique 和primary key 都可以為列或者列集合提供唯一性約束primary key 擁有自定義的唯一性約束每個表可以擁有很多個unique約束,但是primary key 只能有一個*/--在創建表時創建約束create table Persons(ID_P int not null,LastName varchar(255) not null,FirstName varchar(255),Address varchar(255),City varchar(255),unique(ID_P));--其餘情況與primary key 相同,只需將關鍵字替換為unique即可

  • 非空約束:not null

CREATE TABLE Persons(Id_P int NOT NULL,--此處的not null 即為非空約束,這意味著如果不向欄位添加值,就會報錯LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))

  • 默認約束:default

/*default 約束用於向列中插入默認值如果沒有規定其他值,那麼會將默認值添加到所有的新紀錄 */create table Persons{ID_P int not null,LastName varchar(255) not null,FirstName varchar(255),Address varchar(255),City varchar(255) default Sandnes}--另外可用使用getdate()這樣的函數,和default約束用於插入系統值create table Orders(Id_O int not null,OrderNo int not null,Id_P int,OrderDate date default getdate());

  • 限制約束:check

-- check用於限制列中值的範圍create table Persons{ID_P int not null,LastName varchar(255) not null,FirstName varchar(255),Address varchar(255),City varchar(255) ,check (ID_P > 0)}

1.3.2.4 SQL查看錶

  • 查看某個資料庫下的所有表

show tables;

  • 查看某個表的結構信息

desc 表名

1.3.2.5 SQL刪除表

drop table 表名

1.3.2.6 SQL修改表

  • 修改表:添加列

-- 語法:alter table 表名 add 列名 類型(長度) 約束;alter table user add image varchar(20) not null;

  • 修改表:修改列類型,長度和約束

-- 語法: alter table 表名 modify 列名 類型(長度) 約束;alter table user modify image varchar(50);

  • 修改表:刪除列

-- 語法:alter table 表名 drop 列名;alter table user drop age;

  • 修改表:修改列名稱

-- 語法:alter table 表名 change 舊列名 新列明 類型(長度) 約束alter table user change image pic varchar(50) not null;

  • 修改表:修改表名

-- 語法:rename table 表名 to 新的表名;rename table table user to person;

  • 修改表:修改表的字符集

--語法:alter table 表名 character set 字符集;alter table user character set utf8;

1.3.3 SQL對資料庫表的記錄進行操作

1.3.3.1 SQL添加表的記錄

  • 語法:
  • 向表中插入某些列:insert into 表名(列名1,列名2,列名3....) values(值1,值2,值3...)
  • 向表中插入所有列:insert into 表名 values(值1,值2,值3)

注意事項:

  1. 值的類型與資料庫中表列的類型一致
  2. 值的順序與資料庫中表列的順序一致
  3. 值的最大長度不能超過列設置時的長度
  4. 值的類型是字元串或者是日期類型的時候,使用單引號括起來
  • 添加記錄

--添加某幾列insert into user (id,username,password) values (null,xiaoli,1234);-- 添加所有列insert into user values (null,aaa,213,21,1994-2-9);

  • 修改記錄
  • 語法:update 表名 set 列名 = 值,列名2 = 值 [where 條件]
  • 注意事項:
  1. 值的類型與列的類型一致
  2. 值的最大長度不能超過列設置的最大長度
  3. 字元串類型即日期類型加單引號括起來

-- 修改某一列的所有值update user set password = abc;-- 按條件修改數據update user set password = bbb where id = 2-- 按條件修改多個列update user set password = 2145,name = helloworld where username = jackmouse;

  • 刪除記錄
  • 語法:delete from 表名 [ where 條件];
  • 注意事項:
  1. 刪除表的記錄,指的是刪除表中的一條記錄
  2. 刪除如果沒有條件,默認刪除的是表中的所有記錄

-- 刪除某一條記錄delete from user where id =1;--刪除表中的所有記錄delete from user;/*注:delete from user 屬於DML語言,一條記錄一條記錄的刪除,事物可以作用在DML語句上,truncate table user 屬於DDL語言,將表刪除,然後重新創建一個結構一樣的表,事物不能控制DDL語言*/

1.3.3.2 SQL查看錶的記錄(重點掌握,下次單獨寫)

書寫順序:

S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);

解析順序:

f... w...g ...h...s...o

from:要查詢,先得找到數據的位置------即表的位置

where:沒有任何聚合操作,對一行行的數據進行篩選,後面不能直接接聚合函數

group by:按後面接的條件進行分組

having:分組後,會有多個組存在,再按having後面接的條件篩選

select:按上面的條件查詢到要的列的數據

order by :根據查詢到的列的數據,進行升序或者降序排列


推薦閱讀:

sql中為什麼select要放在from之前?
請教一下大家,關於 MySQL 百萬數據量的 count(*) 查詢如何優化?
SQL Server 2016高級資料庫管理視頻教程
零基礎如何學習SQL——了解select查詢語句
MathematicaSQL導出示例

TAG:SQL |