日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

一篇文章入门Mysql

發布時間:2024/3/12 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一篇文章入门Mysql 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 01數據庫的用途
    • 02 娛樂化講解表關系
    • 03.mysql 數據庫安裝
    • 04數據語句操作類型
    • 05. 連接數據庫
    • 06. 數據庫結構定義語句
    • 07. 類型、字符集、引擎和索引
    • 08. 增刪改查
    • 09. DCL語句
    • 10. 常用工具簡介
    • 附錄1 . 學習MySQL常用的英文單詞

01數據庫的用途

  • 身份證信息放在公安部的系統
  • 銀行卡的余額和交易記錄、轉帳信息
  • 酒店的開房信息(所有出現了某些方面的數據庫被盜和信息泄漏)
  • 飛機、火車、汽車聯網購票記錄
  • 各個不同的網站、QQ、網上購物、貼吧、喜歡聽的音樂、電影的收藏信息
  • 手機電話機錄、余額、公交卡余額、水費、電費、彩票的購買記錄
  • 打游戲的裝備、等級、魔力、力量、攻擊能力等信息
  • 美國航空母艦也在使用mysql數據庫在管理航母的相關信息

┌──────────────┐
│ application │
└──────────────┘
▲│
││
read││write
││
│▼
┌──────────────┐
│ database │
└──────────────┘

數據模型
數據庫按照數據結構來組織、存儲和管理數據,實際上,數據庫一共有三種模型:

  • 層次模型
  • 網狀模型
  • 關系模型
    層次模型就是以“上下級”的層次關系來組織數據的一種方式,層次模型的數據結構看起來就像一顆
    網狀模型把每個數據節點和其他很多節點都連接起來,它的數據結構看起來就像很多城市之間的路
    關系模型把數據看作是一個二維表格,任何數據都可以通過行號+列號來唯一確定,它的數據模型看起來就是一個Excel表
    我們以學校班級為例,一個班級的學生就可以用一個表格存起來,并且定義如下:

ID 姓名 班級ID 性別 年齡
1 小明 201 M 9
2 小紅 202 F 8
3 小軍 202 M 8
4 小白 201 F 9
其中,班級ID對應著另一個班級表:

ID 名稱 班主任
201 二年級一班 王老師
202 二年級二班 李老師
通過給定一個班級名稱,可以查到一條班級記錄,根據班級ID,又可以查到多條學生記錄,這樣,二維表之間就通過ID映射建立了“一對多”關系。

數據類型
對于一個關系表,除了定義每一列的名稱外,還需要定義每一列的數據類型。關系數據庫支持的標準數據類型包括數值、字符串、時間等:

名稱類型說明
INT整型4字節整數類型,范圍約+/-21億
BIGINT長整型8字節整數類型,范圍約+/-922億億
REAL浮點型4字節浮點數,范圍約+/-1038
DOUBLE浮點型8字節浮點數,范圍約+/-10308
DECIMAL(M,N)高精度小數由用戶指定精度的小數,例如,DECIMAL(20,10)表示一共20位,其中小數10位,通常用于財務計算
CHAR(N)定長字符串存儲指定長度的字符串,例如,CHAR(100)總是存儲100個字符的字符串
VARCHAR(N)變長字符串存儲可變長度的字符串,例如,VARCHAR(100)可以存儲0~100個字符的字符串
BOOLEAN布爾類型存儲True或者False
DATE日期類型存儲日期,例如,2018-06-22
TIME時間類型存儲時間,例如,12:20:59
DATETIME日期和時間類型存儲日期+時間,例如,2018-06-22 12:20:59

上面的表中列舉了最常用的數據類型。很多數據類型還有別名,例如,REAL又可以寫成FLOAT(24)。還有一些不常用的數據類型,例如,TINYINT(范圍在0~255)。各數據庫廠商還會支持特定的數據類型,例如JSON。

選擇數據類型的時候,要根據業務規則選擇合適的類型。通常來說,BIGINT能滿足整數存儲的需求,VARCHAR(N)能滿足字符串存儲的需求,這兩種類型是使用最廣泛的。

主流關系數據庫
目前,主流的關系數據庫主要分為以下幾類:
商用數據庫,例如:Oracle,SQL Server,DB2等;
開源數據庫,例如:MySQL,PostgreSQL等;
桌面數據庫,以微軟Access為代表,適合桌面應用程序使用;
嵌入式數據庫,以Sqlite為代表,適合手機應用和桌面程序。

02 娛樂化講解表關系

學計算機的男孩、女孩現在都挺多。特別是80、90后互聯網原住民,很多人都特別愛玩游戲。我們通過游戲里面的用戶裝備信息講解表的關系。

銀行取錢、轉賬、發紅包也是我們日常中最常用銀行卡操作,我們還用銀行卡的存取講解表的關系。

游戲里裝備和用戶的關系
在游戲里面的某個人物有頭盔、衣服、靴子、武器、項鏈。
并且,每一個不同的武器會增加上不同的攻防值。那我們就可以這么來模擬游戲的表設計。

注:以下僅為了讓大家更加理解游戲里、用戶和裝備的關系。


用戶表中骷髏王帶上了裝備表中編號為1(死亡面具)和使用了編號為6(魔棒)的武器。

而用戶3(半人馬),使用了裝備表中編號為3(的速度之靴)和7(幽魂權杖)。
這樣就實現了游戲中某些用戶戴上了裝備。如果用戶的行和列數據里面沒有這個選項的話,則沒有這個數據。
通過裝備的屬性值,與用戶等級屬性值相加就實現了用戶穿上裝備好的回血、防御值增加等不同的效果。

03.mysql 數據庫安裝

XAMPP中的MySQL
若你不是使用的XAMPP安裝包安裝的MySQL服務器請略過此塊。看一塊的《全新安裝MySQL服務器》。

如果你通過《PHP入門圣經》來學習的,我們在安裝時教大家安裝的是XAMPP集成環境包。

在環境包中大家已經將MySQL數據庫服務器安裝好了。不需要再進行安裝。

全新安裝MySQL服務器
MySQL是跨平臺的服務器,windows操作系統下的使用與linux下的使用幾乎一模一樣。
我們將會以windows平臺為基礎來講解MySQL 服務器的安裝。

注:Linux操作系統對很多初學者有困難。并且windows具有最廣泛的用戶,本章講解以windows安裝為主。若您熟悉Linux操作系統,也可自行安裝后接著下面課程的學習。

一、下載安裝包

  • 百度搜索關鍵詞:mysql server下載
  • 訪問官網下載:http://dev.mysql.com/downloads/mysql/

二、打開安裝包,同意協議,下一步

三、選擇服務器安裝
develop 是指服務器為開發機【推薦】
server only只安裝服務器
client only 只安裝客戶操作端
full 全部安裝
custom 自定義




五、服務器參數修改
這一步MySQL server會在界面中顯示,由用戶勾選完成最后的安裝配置文件的自動配置。

其中:Config Type(配置文件類型)
Development Machine 是指開發服務器
Server Machine 服務器
Dedicated Machine 專用服務器僅作為數據庫服務器使用
TCP/IP 是指開放的端口mysql 默認的端口是3306

六、設置密碼
會提示密碼的安全狀態


七、日志文件存放位置確認

  • Bin log是二進制文件
  • Error Log 是指錯誤文件
  • slow Query Log 是慢查詢日志

八、啟動服務

04數據語句操作類型

學習數據庫安裝后,最重要的就是學習SQL語句。
SQL是操作數據庫的核心,也是本章開始的一句話:MySQL對于PHP程序員來說就是將業務轉化成表結構。做好業務中的增、刪、改、查。
結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統;同時也是數據庫腳本文件的擴展名。
SQL是最重要的關系數據庫操作語言,并且它的影響已經超出數據庫領域,得到其他領域的重視和采用,如人工智能領域的數據檢索等。
SQL是關系模型的數據庫應用語言,由IBM在20世紀70年代為其關系型數據庫 System R 所開發。
SQL 是1986年10 月由美國國家標準局(ANSI)通過的數據庫語言美國標準,接著,國際標準化組織(ISO)頒布了SQL正式國際標準。1989年4月,ISO提出了具有完整性特征的SQL89標準,1992年11月又公布了SQL92標準。
雖然各個數據庫系統略有不同,但是他們基本均遵循SQL 92標準。或者在SQL 92上做了一些簡單的擴展和變化。
學好了MySQL 的SQL 語法,其他的SQL語法學習起來均是萬變不離其中。
SQL語句按照其功能范圍不同可分為3個類別:

  • 數據定義語言(DDL ,Data Defintion Language)語句:數據定義語句,用于定義不同的數據段、數據庫、表、列、索引等。常用的語句關鍵字包括create、drop、alter等。
  • 數據操作語言(DML , Data Manipulation Language)語句:數據操縱語句,用于添加、刪除、更新和查詢數據庫記錄,并檢查數據的完整性。常用的語句關鍵字主要包括insert、delete、update和select等。
  • 數據控制語言(DCL, Data Control Language)語句:數據控制語句,用于控制不同數據段直接的許可和訪問級別的語句。這些語句定義了數據庫、表、字段、用戶的訪問權限和安全級別。主要的語句關鍵字包括grant、revoke等。

05. 連接數據庫

方法一
安裝后,可以在開始菜單的列表中找到MySQL Command Line 點擊操作的命令行終端操作。效果如圖:

方法二
如果加入到了windows的環境變量中,可以在命令行下直接操作。
在命令行下,通過以下命可以連接到數據庫服務器:

mysql -h localhost -u root -p

密碼是之前設置的密碼 。 ( -h localhost 參數非必選)
如果沒有什么別的問題,登陸成功之后會出現下面內容:

mysql -u root -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 7Server version: 5.6.25 MySQL Community Server (GPL)Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

06. 數據庫結構定義語句

DDL是數據定義語言,簡單來說,就是對數據庫、數據表、數據字段進行創建、刪除、修改和操作語言,它和數據操作語句(DML)最大的區別在于DML(數據操作語句)是對表內部數據的操作,不涉及表的定義、結構的修改,也不涉及其他對象。

我們在本章在講解這一塊時將其分為了三塊:
數據庫操作
數據表操作
數據字段操作
06.1
創建數據庫
類別 詳細解示
基本語法

create database 數據庫名;

示例

create database liwenkai;

示例說明:創建一個數庫,數據庫的名字為liwenkai
示例:

mysql> create database liwenkai; Query OK, 1 row affected (0.00 sec)

“Query OK” 表示上面的命令執行成功,所有的 DDL 和 DML(不包 括 SELECT)操作執行成功后都顯示“Query OK”,這里理解為執行成功就可以了;“1 row affected” 表示操作只影響了數據庫中一行的記錄,“0.00 sec”則記錄了操作執行的時間。
如果已經創建過會報錯。

查看數據庫
基本語法:
類別 詳細解示
基本語法

show databases;

示例說明 顯示當前服務器的所有數據庫

注意:show是指顯示database 是指數據庫databases 是數據庫的復數形式,指全部數據庫。

示例:

mysql> show databases; +——————————+| Database |+——————————+| information_schema || mysql || performance_schema || user |+——————————+ 4 rows in set (0.00 sec)

選中數據庫
基本語法:

use 庫名;

示例

use liwenkai;

示例說明: 使用數據庫liwenkai
注意:use 是指使用;庫名 是存在當前數據庫系統中的具體的數據庫的名稱;

示例:

mysql> use liwenkai;Database changed

這樣就進入到了 liwenkai 數據庫中了。當然你可以使用 use 語句隨時切換要操作的數據庫,剛剛選中了liwenkai ,現在我們切換到mysql內容的 mysql 數據庫看看:

mysql> use mysql; Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changed

出現 ” Database changed“ 表示切換成功。然后,看看 mysql數據庫里面有什么內容(和查看當前數據庫服務器數據庫一樣使用 show 語句)

查看數據庫中的表
進入到庫后我們可以看這個庫里面有多少個數據表。
基本語法:

show tables;

示例說明 顯示當前數據庫下所有的表
使用use 進入到某個數據庫后可以使用show tables

示例,查看當前數據庫的表:

mysql> show tables; +—————————————-+| Tables_in_mysql |+—————————————-+| columns_priv || db || event || func || general_log | | help_category || help_keyword || help_relation | | help_topic || innodb_index_stats || innodb_table_stats | | ndb_binlog_index || plugin || proc || procs_priv || proxies_priv | | servers || slave_master_info || slave_relay_log_info || slave_worker_info || slow_log || tables_priv || time_zone || time_zone_leap_second || time_zone_name || time_zone_transition || time_zone_transition_type || user |+—————————————-+ 28 rows in set (0.00 sec)

這些表里面的內容是關系數據庫服務器相關的用戶、權限、數據庫狀態、設置等相關的信息數據。

刪除數據庫

基本語法

drop database 庫名;

示例

drop database liwenkai;

示例說明: 刪除一個數庫,數據庫的名字為liwenkai
注意:drop 是漢語可以翻譯為指掉下來,不要了的意思database 是指庫庫名 是指要刪掉的庫的名稱

示例:

mysql> drop database liwenkai; Query OK, 0 rows affected (0.01 sec)

06.2
創建表
基本語法

create table 表名(字段名1 字段類型,.字段名n 字段類型n);

示例

create table user(username varchar(20),password varchar(32));

示例說明 創建一個表名叫user的表,第一個字段為username、表的字段類型為varchar長度為32個長度。第二個字段為password,類型也為varchar,長度也為32個長度。
注意:

快速學習數據庫的管理和操作語句非常的重要,數據類型、字段、字符集、引擎都屬于了解的知識點。
.字段類型大家現在只需要學會int,代表整型。float,代表浮點。char和varchar代表字符串即可。
我們可以在類型后接上長度如:varchar(20)。
其他示例:

mysql> create table emp(ename varchar(10),hiredate date,sal float(10,2),deptno int(2));Query OK, 0 rows affected (0.63 sec)
mysql> create table dept( deptno int(4), deptname varchar(20)); Query OK, 0 rows affected (0.12 sec)

查看表字段結構信息
基本語法

desc 表名;

示例

desc emp

示例說明 查看emp表的表結構
操作顯示如下:

mysql> desc emp;+—————+———————-+———+——-+————-+———-+| Field | Type | Null | Key | Default | Extra |+—————+———————-+———+——-+————-+———-+| ename | varchar(10) | YES | | NULL | || hiredate | date | YES | | NULL | || sal | decimal(10,2) | YES | | NULL | || deptno | int(2) | YES | | NULL | |+—————+———————-+———+——-+————-+———-+4 rows in set (0.39 sec)

查看表的創建SQL語句查看表創建語句
基本語法

show create table 表名 \G;

示例 show create table emp \G;
示例說明 查看表emp的創建語句
執行完整示例:

mysql> show create table emp \G;Table: empCreate Table: CREATE TABLE emp (ename varchar(10) DEFAULT NULL,hiredate date DEFAULT NULL,sal decimal(10,2) DEFAULT NULL,deptno int(2) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;1 row in set (0.00 sec)ERROR:No query specified

上面表的創建 SQL 語句中,除了可以看到表定義以外,還可以看到表的 engine(存儲引擎) 和 charset(字符集)等信息。“\G”選項的含義是使得記錄能夠按照字段豎著排列,對于內 容比較長的記錄更易于顯示。

刪除表

基本語法

drop table 表名;

示例

drop table emp;

示例說明 刪除表emp
mysql> drop table emp;Query OK, 0 rows affected (0.34 sec)
注:刪除表。表和數據均會丟失,請勿必刪除重要表之前備份數據。

指定表引擎和字符集
在創建表最后,我們常用MyISAM或者InnoDB引擎。在指定引擎時,我們可以使用:

ENGINE=InnoDB
指定表默認字符集:
DEFAULT CHARSET=utf8
效果如下:

CREATE TABLE emp (useraname varchar(10) DEFAULT NULL,password date DEFAULT NULL,)ENGINE=InnoDB DEFAULT CHARSET=utf8;

06.3
假設我們存在user表,user結構如下:

mysql> desc user;+—————+———————-+———+——-+————-+———-+| Field | Type | Null | Key | Default | Extra |+—————+———————-+———+——-+————-+———-+| username | varchar(10) | YES | | NULL | || password | varchar(32) | YES | | NULL | || createtime | int(10) | YES | | NULL | || createip | int(10) | YES | | NULL | |+—————+———————-+———+——-+————-+———-+4 rows in set (0.01 sec)

修改表字段類型 modify

基本語法

alter table 表名 modify 字段名 varchar(20);

示例

alter table user modify username varchar(20);

示例說明 將user表的username的類型改為varchar(20)
我們執行一下,看看結果:

mysql> alter table user modify username varchar(20);Query OK, 0 rows affected (0.48 sec)Records: 0 Duplicates: 0 Warnings: 0 mysql> desc user;+—————+———————-+———+——-+————-+———-+| Field | Type | Null | Key | Default | Extra |+—————+———————-+———+——-+————-+———-+| username | varchar(20) | YES | | NULL | || password | varchar(32) | YES | | NULL | || createtime | int(10) | YES | | NULL | || createip | int(10) | YES | | NULL | |+—————+———————-+———+——-+————-+———-+4 rows in set (0.01 sec)

增加表字段
基本語法

alter table 表名 add column 字段名 類型;

示例

alter table user add column age int(3);`

示例說明 添加一個字段為age,類型為整型長度為3
mysql> alter table emp add column age int(3);Query OK, 0 rows affected (0.40 sec)Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;+—————+———————-+———+——-+————-+———-+| Field | Type | Null | Key | Default | Extra |+—————+———————-+———+——-+————-+———-+| username | varchar(20) | YES | | NULL | || password | varchar(32) | YES | | NULL | || createtime | int(10) | YES | | NULL | || createip | int(10) | YES | | NULL | || age | int(3) | YES | | NULL | |+—————+———————-+———+——-+————-+———-+5 rows in set (0.00 sec)

增加字段時控制字段順序
我們剛剛學了增加字段。如果你仔細實驗發現每次都是增加在最后面,如何在第一個增加或者在指字字段之后增加呢?

基本語法

ALTER TABLE 表名 ADD 字段名 字段類型 AFTER 字段名;

示例

ALTER TABLE user ADD email VARCHAR(60) AFTER createip;

示例說明 user表中,在createip后增加一個字段為email,類型為varchar,長度為60

基本語法

ALTER TABLE 表名 ADD 字段名 字段類型;

示例

ALTER TABLE user ADD id INT(10) FIRST;

示例說明 user表中在最開始的位置增加一個字段為id,類型為int,長度為10
mysql>ALTER TABLE user ADD email VARCHAR(60) AFTER createip;Query OK, 0 rows affected (0.40 sec)Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;+—————+———————-+———+——-+————-+———-+| Field | Type | Null | Key | Default | Extra |+—————+———————-+———+——-+————-+———-+| username | varchar(20) | YES | | NULL | || password | varchar(32) | YES | | NULL | || createtime | int(10) | YES | | NULL | || createip | int(10) | YES | | NULL | || email | varchar(60) | YES | | NULL | || age | int(3) | YES | | NULL | |+—————+———————-+———+——-+————-+———-+6 rows in set (0.00 sec)

刪除表字段

基本語法

alter table 表名 drop column 字段名;

示例

alter table user drop column age;

示例說明 在user表中刪除字段age
mysql> alter table user drop column age;Query OK, 0 rows affected (0.27 sec)Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;+—————+———————-+———+——-+————-+———-+| Field | Type | Null | Key | Default | Extra |+—————+———————-+———+——-+————-+———-+| username | varchar(20) | YES | | NULL | || password | varchar(32) | YES | | NULL | || createtime | int(10) | YES | | NULL | || createip | int(10) | YES | | NULL | || email | varchar(60) | YES | | NULL | |+—————+———————-+———+——-+————-+———-+5 rows in set (0.00 sec)

表字段改名

基本語法

alter table 表名 change 字段原名 字段新名 字段類型;

示例

alter table user change email em varchar(60);

示例說明 在user表中將字段中的email字段名字為em
詳細示例:

mysql> alter table user change email em varchar(60);Query OK, 0 rows affected (0.38 sec)Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;+—————+———————-+———+——-+————-+———-+| Field | Type | Null | Key | Default | Extra |+—————+———————-+———+——-+————-+———-+| username | varchar(20) | YES | | NULL | || password | varchar(32) | YES | | NULL | || createtime | int(10) | YES | | NULL | || createip | int(10) | YES | | NULL | || em | varchar(60) | YES | | NULL | |+—————+———————-+———+——-+————-+———-+5 rows in set (0.00 sec)

修改表字段排列順序
在前的字段增加和修改語句(add/change/modify)中,最后都可以加一個可選項 first|after。
增加表字段時我們已經學過了如何調整順序。我們現在在來看看另外的change或modify如何來調整順序。
我們用first做個小實驗。
使用modify調整順序
mysql> alter table user modify em varchar(60) first;Query OK, 0 rows affected (0.41 sec)Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;+—————+———————-+———+——-+————-+———-+| Field | Type | Null | Key | Default | Extra |+—————+———————-+———+——-+————-+———-+| em | varchar(60) | YES | | NULL | || username | varchar(20) | YES | | NULL | || password | varchar(32) | YES | | NULL | || createtime | int(10) | YES | | NULL | || createip | int(10) | YES | | NULL | |+—————+———————-+———+——-+————-+———-+5 rows in set (0.00 sec)

修改表名
基本語法

alter table 舊表名 rename 新的表名;

示例

alter table user rename new_user;

示例說明 將user表名改為new_user
mysql> alter table user rename new_user;Query OK, 0 rows affected (0.35 sec)
mysql> desc new_user;+—————+———————-+———+——-+————-+———-+| Field | Type | Null | Key | Default | Extra |+—————+———————-+———+——-+————-+———-+| em | varchar(60) | YES | | NULL | || username | varchar(20) | YES | | NULL | || password | varchar(32) | YES | | NULL | || createtime | int(10) | YES | | NULL | || createip | int(10) | YES | | NULL | |+—————+———————-+———+——-+————-+———-+5 rows in set (0.00 sec)

07. 類型、字符集、引擎和索引

7.1 數據類型
類型使用
我們學習了這么多類型,在創建表的語句的時候使用對應的類型即可。

舉例如下:

CREATE TABLE IF NOT EXISTS demo (id int(11) NOT NULL, username varchar(50) NOT NULL,password char(32) NOT NULL, content longtext NOT NULL,createtime datetime NOT NULL,s ex tinyint(4) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

字段其他屬性設置
UNSIGNED(無符號)主要用于整型和浮點類型,使用無符號。即,沒有前面面的-(負號)。存儲位數更長。tinyint整型的取值區間為,-128~127。而使用無符號后可存儲0-255個長度。

創建時在整型或浮點字段語句后接上:

unsigned
ZEROFILL(0填充)0(不是空格)可以用來真補輸出的值。使用這個修飾符可以阻止 MySQL 數據庫存儲負值。

創建時在整型或浮點字段語句后接上:

zerofill
defaultdefault屬性確保在沒有任何值可用的情況下,賦予某個常量值,這個值必須是常量,因為MySQL不允許插入函數或表達式值。此外,此屬性無法用于BLOB或TEXT列。如果已經為此列指定了NULL屬性,沒有指定默認值時默認值將為NULL,否則默認值將依賴于字段的數據類型。

創建時在整型或浮點字段語句后接上:

default '值’
not null如果將一個列定義為not null,將不允許向該列插入null值。建議在重要情況下始終使用not null屬性,因為它提供了一個基本驗證,確保已經向查詢傳遞了所有必要的值。

創建時在整型或浮點字段語句后接上:

not null
null為列指定null屬性時,該列可以保持為空,而不論行中其它列是否已經被填充。記住,null精確的說法是“無”,而不是空字符串或0。

創建時在整型或浮點字段語句后不要聲明not null即可。
7.2 字符集
為了更好的識別中文、日文、英文、希臘語。對于常用的符號進行了編碼,這個編碼就是字符集。

我們只需要了解:

常用字符集
數據庫中我們用什么字符集
英文字符集:

ASCII 美國標準信息交換代碼 單字節 GBK 漢字內碼擴展規范 雙字節
unicode 萬國碼 4字節 UTF-8
Unicode的可變長度字符編碼 1到6個字節

實際工作中要使用的編碼
在中文中常用的字符集分為utf-8和GBK。
實際使用的如下:
gbk_chinese_ci 簡體中文, 不區分大小寫
utf8_general_ci Unicode (多語言), 不區分大小寫

7.3 表引擎
在mysql命令中使用:

show engines;

可以查看到當前服務器支持的所有引擎。

我們介紹幾種常用的引擎和了解幾個不常用的引擎。避免未來在實際工作中看到一些引擎不知道概念。
MyISAM 常用。讀取效率很高的引擎
InnoDB 常用。寫入,支持事處等都支持
Archive 不常用。歸檔引擎,壓縮比高達1:10,用于數據歸檔
NDB 不常用。主要在MySQL 集群服務器中使用,不做介紹
MyISAM
不支持事務,表鎖(表級鎖,加鎖會鎖住整個表),支持全文索引,操作速度快。常用于讀取多的業務。
myisam存儲引擎表由myd和myi組成。
.myd用來存放數據文件,
.myi用來存放索引文件。
對于myisam存儲引擎表,mysql數據庫只緩存其索引文件,數據文件的緩存由操作系統本身來完成。

InnoDB
支持事務,主要面向在線事務處理(OLTP)方面的應用。

行鎖設計,支持外鍵,即默認情況下讀取操作不加鎖。
InnoDB是為處理巨大數據量時的最大性能設計。

注:行鎖:寫入、更新操作的時候將這一行鎖起來,不讓其他人再操作了。表鎖:寫入、更新操作時,將表給鎖起來不讓其他人再操作了。事務:同時操作多個數據,若其中的一個數據操作失敗。可回滾到操作之前。常用于銀行、電商、金融等系統中。

7.4 索引
索引用于快速找出在某個列中有一特定值的行。

索引類型功能說明
普通索引最基本的索引,它沒有任何限制
唯一索引某一行企用了唯一索引則不準許這一列的行數據中有重復的值。針對這一列的每一行數據都要求是唯一的
主鍵索引它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引,常用于用戶ID。類似于書中的頁碼
全文索引對于需要全局搜索的數據,進行全文索引

普通索引
基本語法

alter tableadd index(字段)

示例

ALTER TABLE money ADD INDEX(username);

示例解釋 為money表的username字段增加索引

唯一索引
基本語法

alter tableadd UNIQUE(字段);

示例

ALTER TABLE money ADD UNIQUE(email);

示例解釋 為money表的email字段增加唯一索引

全文索引
基本語法

alter tableadd FULLTEXT(字段);

示例

ALTER TABLE money ADD FULLTEXT(content);

示例解釋 為money表的content字段增加唯一索引

主鍵索引
基本語法

alter tableadd PRIMARY KEY(字段);

示例

ALTER TABLE money ADD PRIMARY KEY(id);

示例解釋 為money表的id字段增加主鍵索引
創建表時也可以聲明索引
創建表時可在創建表語句后加上對應的類型即可聲明索引:

PRIMARY KEY(字段)INDEX [索引名] (字段)FULLTEXT [索引名] (字段)UNIQUE[索引名] (字段)
注:中括號中的索引名,代表可選。

整體示例如下:

CREATE TABLE test (id INT NOT NULL ,username VARCHAR(20) NOT NULL
,password INT NOT NULL ,content INT NOT NULL ,PRIMARY KEY (id),INDEX
pw (password),UNIQUE (username),FULLTEXT (content)) ENGINE = InnoDB;

08. 增刪改查

插入記錄有兩種個基本語法

插入基本語法一
類別 詳細解示
基本語法

insert intovalues(1,2,值n);

示例

insert into user values(2,'李文凱','男');

示例說明 向user表中插入值id為2,姓名為李文凱,性別為男
插入基本語法二
基本語法

insert into(字段1,字段2,字段n) values(1,2,值n);

示例

insert into user(id,username,sex) values(213,'小沈陽',1);

示例說明 向user表中插入id為213,username為小沈陽,性別為1
說明基本語法1和基本語法2的區別是:
基本語法1的插入語句,表中有多少個字段就必須要插入多少個值。一個不能多,一個也不能少。若有默認值,不想傳,可以寫上null。
基本語法2中,除非有必填字段必須要寫入值外。如果有默認值的不想寫可以忽略不寫。mysql會自動補主默認值。
基本語法2中,以user(id,username,sex)字段順序為值的順序。
假設有一張表為user表,我們對字段、字段說明、類型和字段選填和必須狀態進行說明,表結構如下:
字段 id username email password sex
中文說明 編號 用戶名 郵箱 密碼 性別
類型說明 int varchar(50) varchar(60) varchar(32) tinyint
默認值說明 自增 必填 選填字段,默認值為123@phpxy.com 選填字段 必填字段
按照基本語法一寫上表中的插入語句:
insert into user values(null,‘李文凱’,‘liwenkai@phpxy.com’,null ,1);

注意:可以不指定字段名稱,但是 values 后面的順序應該和表字段的排序一致。 有默認值的字段可以不寫,則為默認值。
如果有默認值或者可空字段不想傳入具體值,可寫入null。 數據格式必須要與表規定的數據格式一致。 按照基本語法二寫上表中的插入語句:

insert into user(username,sex) values('李文凱',1);

注意

ID為自增的自段可以不用傳入值,每插入一次這個字段的值會自動向上加1。
有默認值和可為空的字段可不傳
以表user(username,sex)的插入順序為準
基本語法二為更常用的用法
基本語法變形:一次插入多條記錄

insert into user(username,password,sex)values('黃曉明', 'abcdef', 1),( 'angelababy', 'bcdeef', 0),( '陳赫', '123456', 1),('王寶強', '987654', 1);

在講解查詢前,我為大家準備了一個數據表。這個表中存放著銀行的余額和用戶的基本信息。

我們定義了一個表結構,表名為money。

創建表的語句如下:

CREATE TABLE money (id INT NOT NULL AUTO_INCREMENT , username VARCHAR(50) NOT NULL , balance FLOAT NOT NULL , province VARCHAR(20) NOT NULL , age TINYINT UNSIGNED NOT NULL , sex TINYINT NOT NULL ,PRIMARY KEY (id(10))) ENGINE = InnoDB CHARACTER SET utf8;

表結構和數據展示如下:

id username balance province age sex
1 李文凱 120.02 湖北 29 1
2 范冰冰 260.23 山東 40 0
3 黃曉明 150.86 山東 40 1
4 井柏然 810 遼寧 27 1
5 李冰冰 20.15 黑龍江 43 0
6 成龍 313 山東 63 1
7 楊冪 123 北京 30 0
8 劉詩詩 456 北京 29 1
9 柳巖 23.4 湖南 36 0
10 趙本山 3456 遼寧 63 1
11 汪峰 34.32 北京 44 1
12 郭德綱 212 天津 43 1

注:balance 是指余額province 是指省份

基礎查詢
類別 詳細解示
基本語法

select * from;

示例

select * from money;

示例說明 查詢money表中所有字段中的所有結果

注:”*” 是一種正則表達式的寫法,表示匹配所有,上面的查詢語句和下面的是等價:

mysql> select * from money;+——+—————-+————-+—————-+——-+——-+| id | username | balance | province | age | sex |+——+—————-+————-+—————-+——-+——-+| 1 | 李文凱 | 120.02 | 湖北 | 29 | 1 || 2 | 范冰冰 | 260.23 | 山東 | 40 | 0 || 3 | 黃曉明 | 150.86 | 山東 | 40 | 1 || 4 | 井柏然 | 810 | 遼寧 | 27 | 1 || 5 | 李冰冰 | 20.15 | 黑龍江 | 43 | 0 || 6 | 成龍 | 313 | 山東 | 63 | 1 || 7 | 楊冪 | 123 | 北京 | 30 | 0 || 8 | 劉詩詩 | 456 | 北京 | 29 | 1 || 9 | 柳巖 | 23.4 | 湖南 | 36 | 0 || 10 | 趙本山 | 3456 | 遼寧 | 63 | 1 || 11 | 汪峰 | 34.32 | 北京 | 44 | 1 || 12 | 郭德綱 | 212 | 天津 | 43 | 1 |+——+—————-+————-+—————-+——-+——-+12 rows in set (0.00 sec)

指定字段查詢
基本語法

select 字段 from;

示例

select id,username, balance from money;

示例說明 查詢money表中id,username, balance字段中的所有結果
mysql> select id,username, balance from money;+——+—————-+————-+| id | username | balance |+——+—————-+————-+| 1 | 李文凱 | 120.02 || 2 | 范冰冰 | 260.23 || 3 | 黃曉明 | 150.86 || 4 | 井柏然 | 810 || 5 | 李冰冰 | 20.15 || 6 | 成龍 | 313 || 7 | 楊冪 | 123 || 8 | 劉詩詩 | 456 || 9 | 柳巖 | 23.4 || 10 | 趙本山 | 3456 || 11 | 汪峰 | 34.32 || 12 | 郭德綱 | 212 |+——+—————-+————-+12 rows in set (0.00 sec)

查詢單個字段不重復記錄 distinct
基本語法

select distinct 字段 from;

示例

select distinct age deptno from money;

示例說明 查詢money表中年齡唯一的所有結果
mysql> select distinct age deptno from money;+————+| deptno |+————+| 29 || 40 || 27 || 43 || 63 || 30 || 36 || 44 |+————+8 rows in set (0.00 sec)

條件查詢 where
基本語法

select 字段 fromwhere where條件;

示例

select * from money where age = 29;

示例說明 查詢money表中年齡為29的所有結果
mysql> select * from money where age = 29;+——+—————-+————-+—————+——-+——-+| id | username | balance | province | age | sex |+——+—————-+————-+—————+——-+——-+| 1 | 李文凱 | 120.02 | 湖北 | 29 | 1 || 8 | 劉詩詩 | 456 | 北京 | 29 | 1 |+——+—————-+————-+—————+——-+——-+2 rows in set (0.00 sec)

where后可接的條件
比較運算符結果集中將符合條件的記錄列出來。上面的例子中,where 后面的條件是一個字段的 ‘=’。
除此之外,還可以使用>、<、>=、<=、!=等比較運算符;
符號 說明

大于
< 小于
= 大于等于
<= 小于等于
!= 不等于
= 等于
邏輯運算符

多個條件還可以使用 or 、 and 等邏輯運算符進行多條件聯合查詢

符號 說明
or 或者
and 并且
我們來看一下多個條件的例子:

示例 :

select * from money where id <10 and province ='湖北'

說明 查詢所有字段 要求id小于10 并且province=‘湖北’
mysql> select * from money where id <10 and province='湖北';+——+—————-+————-+—————+——-+——-+| id | username | balance | province | age | sex |+——+—————-+————-+—————+——-+——-+| 1 | 李文凱 | 120.02 | 湖北 | 29 | 1 |+——+—————-+————-+—————+——-+——-+1 row in set (0.00 sec)

結果集排序
基本語法

select 字段 fromorder by 字段 排序關鍵詞

示例

select id,username, balance from money order by balance desc;

示例說明 查詢money表中的id,username,balance字段,按照余額進行降序排序
排序用到的關鍵詞:

asc 升序排列,從小到大(默認)
desc 降序排列,從大到小
在 select 出來之后的結果集中排序使用 order by ,其中 desc 和 asc 是排序順序中的關鍵字。desc 表示按照字段進行降序排列,asc 表示升序排列,如果不寫關鍵字默認升序排列。

mysql> select id,username, balance from money order by balance desc;+——+—————-+————-+| id | username | balance |+——+—————-+————-+| 10 | 趙本山 | 3456 || 4 | 井柏然 | 810 || 8 | 劉詩詩 | 456 || 6 | 成龍 | 313 || 2 | 范冰冰 | 260.23 || 12 | 郭德綱 | 212 || 3 | 黃曉明 | 150.86 || 7 | 楊冪 | 123 || 1 | 李文凱 | 120.02 || 11 | 汪峰 | 34.32 || 9 | 柳巖 | 23.4 || 5 | 李冰冰 | 20.15 |+——+—————-+————-+12 rows in set (0.00 sec)

多字段排序
order by 后面可以跟多個不同的字段排序,并且排序字段的不同結果集的順序也不同,如果排序字段的值一樣,則值相同的字段按照第二個排序字段進行排序。
基本語法

select 字段 fromorder by 字段1 排序關鍵詞,… …字段n desc asc;

示例

select id,username, balance from money order by balance desc,age asc;

示例說明 查詢money表中的id,username,balance字段,按照余額進行降序排序,若余額全都一樣,則再使用age進行升序排序

注:如果第一個字段已經將結果給排好。第二個字段排序字段不生效。本例中,第二個字段無效。

mysql> select id,username, balance from money order by balance desc,age asc;+——+—————-+————-+| id | username | balance |+——+—————-+————-+| 10 | 趙本山 | 3456 || 4 | 井柏然 | 810 || 8 | 劉詩詩 | 456 || 6 | 成龍 | 313 || 2 | 范冰冰 | 260.23 || 12 | 郭德綱 | 212 || 3 | 黃曉明 | 150.86 || 7 | 楊冪 | 123 || 1 | 李文凱 | 120.02 || 11 | 汪峰 | 34.32 || 9 | 柳巖 | 23.4 || 5 | 李冰冰 | 20.15 |+——+—————-+————-+12 rows in set (0.00 sec)

結果集限制
對于查詢或者排序后的結果集,如果希望只顯示一部分而不是全部,則可以使用 limit 關鍵字對結果集進行數量限制。
基本語法

select 字段 fromlimit 數量;

示例

select id,username, balance from money limit 5;

示例說明 顯示前五個用戶
mysql> select * from money limit 5;+——+—————-+————-+—————-+——-+——-+| id | username | balance | province | age | sex |+——+—————-+————-+—————-+——-+——-+| 1 | 李文凱 | 120.02 | 湖北 | 29 | 1 || 2 | 范冰冰 | 260.23 | 山東 | 40 | 0 || 3 | 黃曉明 | 150.86 | 山東 | 40 | 1 || 4 | 井柏然 | 810 | 遼寧 | 27 | 1 || 5 | 李冰冰 | 20.15 | 黑龍江 | 43 | 0 |+——+—————-+————-+—————-+——-+——-+5 rows in set (0.00 sec)

限制結果集并排序
基本語法

select 字段 fromorder by 字段 關鍵詞 limit 數量

示例

select id,username, balance from money order by balance desc limit 5;

示例說明 按照錢來排序,顯示前五個最有錢的用戶
mysql> select id,username, balance from money order by balance desc limit 5;+——+—————-+————-+| id | username | balance |+——+—————-+————-+| 10 | 趙本山 | 3456 || 4 | 井柏然 | 810 || 8 | 劉詩詩 | 456 || 6 | 成龍 | 313 || 2 | 范冰冰 | 260.23 |+——+—————-+————-+5 rows in set (0.00 sec)

結果集區間選擇
假設我從第0條開始取了3條記錄。又想再從第3條開始取3條記錄。再想從第6條開始取4條記錄怎么辦?

這時候就需要使用到結果集區間選擇。
基本語法

select 字段 fromlimit 偏移量,數量

示例

select id,username, balance from money limit 0,3;

示例說明 從第一條開始取三條記錄

注:第一條記錄為0。

·mysql> select id,username, balance from money limit 0,3;+——+—————-+————-+| id | username | balance |+——+—————-+————-+| 1 | 李文凱 | 120.02 || 2 | 范冰冰 | 260.23 || 3 | 黃曉明 | 150.86 |+——+—————-+————-+3 rows in set (0.00 sec)·
從第三條開始再取三條呢?

·mysql> select id,username, balance from money limit 3,3;+——+—————-+————-+| id | username | balance |+——+—————-+————-+| 4 | 井柏然 | 810 || 5 | 李冰冰 | 20.15 || 6 | 成龍 | 313 |+——+—————-+————-+3 rows in set (0.00 sec)·
通過上面的這個思路,顯示就完成了分頁。每頁顯示10條記錄,那么:

第1頁為 limit 0,10第2頁為 limit 10,10第3頁為 limit 20,10

依此類推… …

統計類函數使用
如果我們想知道總用戶數怎么辦?
查詢誰是數據表里的首富怎么辦?
如果我們想知道用戶的平均金額怎么辦?
如果我們想知道所有用戶的總金額怎么辦?

統計類函數最常用的我們有五個:
sum 求和
count 統計總數
max 最大值
min 最小值
avg 平均值

注:當然你知道其他的mysql函數也可以使用。不過,在實際工作中,大公司的很多大中型項上很少使用,他們都有專門的計數服務器。因為,mysql的計算量本身很大,為了減少壓力通常我們將實際的計算任務交給業務服務器或其他服務器來完成。

基本語法

select 函數(字段) from

示例

select count(id) from money

示例說明 查詢money表的id總數
mysql> select count(id) from money;+—————-+| count(id) |+—————-+| 12 |+—————-+1 row in set (0.00 sec)
你還可以給字段取別名喲!使用as關鍵字。
mysql> select count(id) as zongshu from money;+————-+| zongshu |+————-+| 12 |+————-+1 row in set (0.00 sec)
查詢平均金額
mysql> select avg(balance) from money;+——————————+| avg(balance) |+——————————+| 498.24833393096924 |+——————————+1 row in set (0.00 sec)
查詢總金額
mysql> select sum(balance) from money;+—————————-+| sum(balance) |+—————————-+| 5978.980007171631 |+—————————-+1 row in set (0.00 sec)
查詢最大金額
mysql> select max(balance) from money;+———————+| max(balance) |+———————+| 3456 |+———————+1 row in set (0.00 sec)
查詢最小金額
mysql> select min(balance) from money;+——————————+| min(balance) |+——————————+| 20.149999618530273 |+——————————+1 row in set (0.00 sec) 分組 group by
我們拿金額表里面的省份進行分組數據,分組數據后你會發現。有相同的省份會去掉。即,一個省份為一個組。

基本語法

select * fromgroup by 字段

示例

select * from money group by province;

示例說明 按照地區進行分組
mysql> select * from money group by province;+——+—————-+————-+—————-+——-+——-+| id | username | balance | province | age | sex |+——+—————-+————-+—————-+——-+——-+| 7 | 楊冪 | 123 | 北京 | 30 | 0 || 12 | 郭德綱 | 212 | 天津 | 43 | 1 || 2 | 范冰冰 | 260.23 | 山東 | 40 | 0 || 1 | 李文凱 | 120.02 | 湖北 | 29 | 1 || 9 | 柳巖 | 23.4 | 湖南 | 36 | 0 || 4 | 井柏然 | 810 | 遼寧 | 27 | 1 || 5 | 李冰冰 | 20.15 | 黑龍江 | 43 | 0 |+——+—————-+————-+—————-+——-+——-+

統計分組(分類)各總數:
mysql> select deptno, count(1) from emp group by deptno;+————+—————+| deptno | count(1) |+————+—————+| 1 | 1 || 2 | 5 || 3 | 1 || 5 | 4 |+————+—————+4 rows in set (0.04 sec)

統計省份數量后再進行分組顯示
mysql> select count(province),province from money group by province;+————————-+—————-+| count(province) | province |+————————-+—————-+| 3 | 北京 || 1 | 天津 || 3 | 山東 || 1 | 湖北 || 1 | 湖南 || 2 | 遼寧 || 1 | 黑龍江 |+————————-+—————-+7 rows in set (0.00 sec)

在分組基礎上進行統計
with rollup用的很少。這個知識點設置為了解級別。
它的主要功能是對于分組的數據進行統計后,再進行一次總數統計。
基本語法

select * fromgroup by 字段 with rollup;

示例

select count(province),province from money group by province with rollup;

示例說明 對分組的數再次進行統計
在上面的基礎上統計總數,下例結果中,最后多了一個12 NULL。

mysql> select count(province),province from money group by province with rollup;+————————-+—————-+| count(province) | province |+————————-+—————-+| 3 | 北京 || 1 | 天津 || 3 | 山東 || 1 | 湖北 || 1 | 湖南 || 2 | 遼寧 || 1 | 黑龍江 || 12 | NULL |+————————-+—————-+8 rows in set (0.00 sec)
結果再過濾having
having子句與where有相似之處但也有區別,都是設定條件的語句。
having 是篩選組 而where是篩選記錄。

基本語法

select * fromgroup by 字段 having 條件;

示例

select count(province) as result ,province from money group by province having result >2;

示例說明 對地區分組并統計總數,將分組結果中大于2的分組地區顯示出來
mysql> select count(province) as result ,province from money group by province having result >2;+————+—————+| result | province |+————+—————+| 3 | 北京 || 3 | 山東 |+————+—————+2 rows in set (0.00 sec)

整體使用SQL
我們在上面的語句中都是單一使用的某些語句,沒有整體使用過。

我們現在將語句進行整合后,配合使用一次。整體的SQL語句配合使用的語法結構如下:

SELECT[字段1 [as 別名1],[函數(字段2) ,]……字段n]FROM 表名
[WHERE where條件]
[GROUP BY 字段]
[HAVING where_contition]
[order 條件]
[limit 條件]

注:上面的語句中可以[] 代表可選。

最終的語法總結如下:
select 選擇的列–>from 表–>where 查詢的條件–>group by 分組屬性–>having 分組過濾的條件
–>order by 排序屬性–>limit 起始記錄位置,取記錄的條數
我們進行一次整體的給合使用,查詢money表字段:id,username,balance,province 要求id>1 余額大于50,使用地區進行分組。我們使用用戶id進行降序,要求只準顯示3條。

最后將SQL語句寫成,查詢出來的結果如下:

mysql> select id,username,balance,province from money where id > 1 and balance > 50 group by province order by id desc limit 3;+——+—————-+————-+—————+| id | username | balance | province |+——+—————-+————-+—————+| 12 | 郭德綱 | 212 | 天津 || 7 | 楊冪 | 123 | 北京 || 4 | 井柏然 | 810 | 遼寧 |+——+—————-+————-+—————+3 rows in set (0.00 sec)

很多時候在實際的業務中我們不只是查詢一張表。
在電子商務系統中,查詢哪些用戶沒有購買過產品。
銀行中可能查詢違規記錄,同時查詢出用戶的
查詢中獎信息和中獎人員的基本信息。

以上只是列的情況我們就需要把兩張表在一起進行查詢。
而上述業務中需要多表聯合在一起查詢才能有結果,而多表聯合查詢的本質是:表連接
表連接
當需要查詢多個表中的字段時,就可以使用表連接來實現。表聯接分為內連接和外連接。
內聯結:將兩個表中存在聯結關系的字段符合聯結關系的那些記錄形成記錄集的聯結。
外連接:會選出其他不匹配的記錄,分為外左聯結和外右聯結。

在學習實驗前,我為大家準備了兩個模擬的數據表:

用戶表,存放用戶信息
訂單表,存放哪個用戶購買過哪個商品
user表創建語句

CREATE TABLE IF NOT EXISTS user (uid int(11) NOT NULL, username varchar(30) NOT NULL, password char(32) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS order_goods (oid int(11) NOT NULL, uid int(11) NOT NULL, name varchar(50) NOT NULL, buytime int(11) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

user表數據如下:

uidusernamepassword
1景甜123456
2王小二245667
3李文凱1235531
4井柏然123455
5范冰冰5abcwa
6黃曉明abcdeef
7anglebabycaption
8TFBOYSabcdwww
9安小超12tfddwd
10高小峰3124qwqw
11李小強323fxfvdvd
12李小超311aqqee
13韓小平121rcfwrfq
14宋小康123123tcsd
15佟小剛3cxvdfs

order_goods數據如下:

oid uid name buytime
1 10 蘋果鼠標 1212313
2 3 iphone 12s 123121241
3 12 雪碧 13232333
4 15 34242123
5 3 iphone 鍵盤 12123413

注意:在上表order_goods表中uid是指user表中的uid字段。上表中oid為1的數據行,uid為10的用戶。為user表中uid為10的用戶:高小峰。該用戶購買了商品為蘋果鼠標。購買時間buytime為一個unix時間戳。

內連接
基本語法一:

類別 詳細解示
基本語法 select 表1.字段 [as 別名],表n.字段 from 表1 [別名],表n where 條件;
示例

select user.uid ,user.username as username, order_goods.oid,order_goods.uid, order_goods.name as shopname from user, order_goods where user.uid = order_goods.uid;

示例說明 查詢商品表中哪些用戶購買過商品,并將用戶信息顯示出來
注:下例中from 表使用到了表別名。

由于表名太長,每次寫的時候容易寫錯。我們可以在表后直接跟上一個簡寫英文字符串。在前面拼接字段時,直接使用簡寫字符串.字段即可。

mysql> select u.uid ,u.username as username,o.oid,o.uid,o.name as shopname from user u,order_goods o where u.uid = o.uid;+——-+—————-+——-+——-+———————-+| uid | username | oid | uid | shopname |+——-+—————-+——-+——-+———————-+| 10 | 高小峰 | 1 | 10 | 蘋果鼠標 || 3 | 李文凱 | 2 | 3 | iphone 12s || 12 | 李小超 | 3 | 12 | 雪碧 || 15 | 佟小剛 | 4 | 15 | || 3 | 李文凱 | 5 | 3 | iphone 鍵盤 |+——-+—————-+——-+——-+———————-+5 rows in set (0.00 sec)
基本語法二:
類別 詳細解示
基本語法 select 表1.字段 [as 別名],表n.字段 from 表1 INNER JOIN 表n on 條件;
示例

select user.uid ,user.username as username, order_goods.oid,order_goods.uid, order_goods.name as shopname from user inner join order_goods on user.uid = order_goods.uid;

示例說明 查詢商品表中哪些用戶購買過商品,并將用戶信息顯示出來
結果與基本語法1中一致。

mysql> select user.uid ,user.username as username,order_goods.oid,order_goods.uid,order_goods.name as shopname from user inner join order_goods on user.uid = order_goods.uid;+——-+—————-+——-+——-+———————-+| uid | username | oid | uid | shopname |+——-+—————-+——-+——-+———————-+| 10 | 高小峰 | 1 | 10 | 蘋果鼠標 || 3 | 李文凱 | 2 | 3 | iphone 12s || 12 | 李小超 | 3 | 12 | 雪碧 || 15 | 佟小剛 | 4 | 15 | || 3 | 李文凱 | 5 | 3 | iphone 鍵盤 |+——-+—————-+——-+——-+———————-+5 rows in set (0.00 sec)

外連接

基本語法

select1.字段 [as 別名],表n.字段 from1 LEFT JOIN 表n on 條件;

示例

select * from user left join order_goods on user.uid = order_goods.uid;

示例說明 以左邊為主,查詢哪些用戶未購買過商品,并將用戶信息顯示出來

外連接又分為左連接和右鏈接,具體定義如下。

左連接:包含所有的左邊表中的記錄甚至是右邊表中沒有和它匹配的記錄
mysql> select * from user left join order_goods on user.uid = order_goods.uid;+——-+—————-+——————+———+———+———————-+—————-+| uid | username | password | oid | uid | name | buytime |+——-+—————-+——————+———+———+———————-+—————-+| 10 | 高小峰 | 3124qwqw | 1 | 10 | 蘋果鼠標 | 1212313 || 3 | 李文凱 | 1235531 | 2 | 3 | iphone 12s | 123121241 || 12 | 李小超 | 311aqqee | 3 | 12 | 雪碧 | 13232333 || 15 | 佟小剛 | 3cxvdfs | 4 | 15 | | 34242123 || 3 | 李文凱 | 1235531 | 5 | 3 | iphone 鍵盤 | 12123413 || 1 | 景甜 | 123456 | NULL | NULL | NULL | NULL || 2 | 王小二 | 245667 | NULL | NULL | NULL | NULL || 4 | 井柏然 | 123455 | NULL | NULL | NULL | NULL || 5 | 范冰冰 | 5abcwa | NULL | NULL | NULL | NULL || 6 | 黃曉明 | abcdeef | NULL | NULL | NULL | NULL || 7 | anglebaby | caption | NULL | NULL | NULL | NULL || 8 | TFBOYS | abcdwww | NULL | NULL | NULL | NULL || 9 | 安小超 | 12tfddwd | NULL | NULL | NULL | NULL || 11 | 李小強 | 323fxfvdvd | NULL | NULL | NULL | NULL || 13 | 韓小平 | 121rcfwrfq | NULL | NULL | NULL | NULL || 14 | 宋小康 | 123123tcsd | NULL | NULL | NULL | NULL |+——-+—————-+——————+———+———+———————-+—————-+16 rows in set (0.00 sec)

右連接:包含所有的右邊表中的記錄甚至是右邊表中沒有和它匹配的記錄
基本語法

select1.字段 [as 別名],表n.字段 from1 right JOIN 表n on 條件;

示例 select * from user right join order_goods on user.uid = order_goods.uid;
示例說明 查詢商品表中哪些用戶購買過商品,并將用戶信息顯示出來
mysql> select * from user right join order_goods on user.uid = order_goods.uid;+———+—————-+—————+——-+——-+———————-+—————-+| uid | username | password | oid | uid | name | buytime |+———+—————-+—————+——-+——-+———————-+—————-+| 10 | 高小峰 | 3124qwqw | 1 | 10 | 蘋果鼠標 | 1212313 || 3 | 李文凱 | 1235531 | 2 | 3 | iphone 12s | 123121241 || 12 | 李小超 | 311aqqee | 3 | 12 | 雪碧 | 13232333 || 15 | 佟小剛 | 3cxvdfs | 4 | 15 | | 34242123 || 3 | 李文凱 | 1235531 | 5 | 3 | iphone 鍵盤 | 12123413 |+———+—————-+—————+——-+——-+———————-+—————-+5 rows in set (0.00 sec)

子查詢
有時候,當我們查詢的時候,需要的條件是另外一個select語句的結果,這時就需要使用子查詢。用于子查詢的關鍵字包括in、not in、=、!=、exists、not exists等。

類別 詳細解示
基本語法

select 字段 fromwhere 字段 in(條件);

示例1

select * from user where uid in (1,3,4);

示例1說明 按照id 查詢指定用戶

示例2

select * from user where uid in (select uid from order_goods);

示例2說明 將購買過商品的用戶信息顯示出來

示例1:
mysql> select * from user where uid in (1,3,4);+——-+—————-+—————+| uid | username | password |+——-+—————-+—————+| 1 | 景甜 | 123456 || 3 | 李文凱 | 1235531 || 4 | 井柏然 | 123455 |+——-+—————-+—————+3 rows in set (0.00 sec)
示例2:
mysql> select * from user where uid in (select uid from order_goods);+——-+—————-+—————+| uid | username | password |+——-+—————-+—————+| 10 | 高小峰 | 3124qwqw || 3 | 李文凱 | 1235531 || 12 | 李小超 | 311aqqee || 15 | 佟小剛 | 3cxvdfs |+——-+—————-+—————+4 rows in set (0.00 sec)
mysql> select * from emp where deptno in (select deptno from dept);

記錄聯合
使用 union 和 union all 關鍵字,將兩個表的數據按照一定的查詢條件查詢出來后,將結果合并到一起顯示。兩者主要的區別是把結果直接合并在一起,而 union 是將 union all 后的結果進行一次distinct,去除重復記錄后的結果。
基本語法

select語句1 union[all] select語句2

示例

select * from user where uid in (1,3,4);

示例說明 將商品表中的用戶信息和用戶表中的用戶信息的結果組合在一起
mysql> select uid from user union select uid from order_goods;+——-+| uid |+——-+| 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 |+——-+15 rows in set (0.00 sec)

更新記錄
更新數據我們已經說過。需要修改內容,修改銀行卡余額,修改裝備信息的時候都需要使用到update,修改語句。

修改(也叫更新)語句的基本語法如下:

update 表名 set 字段1=1,字段2=2,字段n=值n where 條件;

示例

update money set balance=balance-500 where userid = 15;

示例說明 修改money表,將balance余額減500。要求userid為15
假設我們有下面這一個表,表結構如下:

iduesrnamebalance
1李文凱50000.00
2黃曉明150000000.00
15馬云15000.00
16陳赫1234131.00

mysql> select * from emp where deptno=15;+———+—————+—————+| userid |username| balance |+———+—————+—————+| 15 | 馬云 | 15000.00 |+———+———-+——————-+1 row in set (0.00 sec)

使用 update 語句進行記錄更新
mysql> update money set balance=balance-500 where userid = 15;Query OK, 1 row affected (0.35 sec)Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from emp where deptno=15;+———+—————+—————+| userid |username| balance |+———+—————+—————+| 15 | 馬云 | 14500.00 |+———+———-+——————-+1 row in set (0.00 sec)

修改多個字段
mysql> update money set balance=balance-500,username='李文凱' where userid = 15;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from emp where deptno=15;+———+—————+—————+| userid |username| balance |+———+—————+—————+| 15 |李文凱 | 14500.00 |+———+———-+——————-+1 row in set (0.00 sec)

同時對兩個表進行更新
基本語法

update1,2 set 字段1=1,字段2=2,字段n=值n where 條件;

示例

update money m,user u m.balance=m.balance*u.age where m.userid=u.id;

示例說明 修改money,將money表的別名設置為m;user表的別名設置為u;將m表的余額改為m表的balance*用戶表的age。執行條件是:m.userid = u.id
mysql> update money m,user u m.balance=m.balance*u.age where m.userid=u.id;

使用 delete 刪除記錄
基本語法

delete from[where 條件];

示例

delete from user where id > 10;

示例說明 刪除掉用戶表中id大于10的所有用戶
user表,表結構如下:

iduesrnamebalance
1李文凱50000.00
2黃曉明150000000.00
15馬云15000.00
16陳赫1234131.00

mysql> delete from user where id = 1;Query OK, 1 row affected (0.08 sec)
刪除掉了id為1的,李文凱這一行的記錄。

清空表記錄
delete和truncate是一樣的,但它們有一點不同,那就是DELETE可以返回被刪除的記錄數,而TRUNCATE TABLE返回的是0。
如果一個表中有自增字段,使用truncate table 這個自增字段將起始值恢復成1.
基本語法

TRUNCATE TABLE 表名;

示例

TRUNCATE TABLE user;

示例說明 清空表的數據,并且讓自增的id從1開始自增

【切記】
刪除時一定要記住加上where條件,不然會清空掉整個表的記錄。
刪除重要數據前一定要備份、備份、備份。

09. DCL語句

創建庫用戶

添加權限
基本語法

grant 權限 on.to '用戶'@'主機' identified by '密碼';

示例

grant select, insert on test.* to 'liwenkai'@'localhost' identified by '4311';

示例說明 給予liwenkai用戶,在本機連接test庫所有表的權限。操作的這些表具有查詢和寫入權限
注:可以針對一個用戶增加多條權限。

刪除權限
基本語法

revoke 權限 on.from '用戶'@'主機';

示例

grant select, insert on test.* to 'liwenkai'@'localhost' identified by '4311';

示例說明 給予liwenkai用戶,在本機連接test庫所有表的權限。操作的這些表具有查詢和寫入權限

參數說明
grant all 在grant后接all說明給予所有權限
revoke all 在revoke后接all說明刪除所有權限
權限 on . . 所明給予所有庫所有表的操作權限
‘用戶’@‘主機’ 主機里面若為%。任意來源的主機均可以使用這個用戶來訪問
創建數據庫用戶liwenkai ,具有對test數據庫中所有標的 select / insert 權限

示例:增加權限

mysql> grant select, insert on test.* to 'liwenkai'@'localhost' identified by '4311';Query OK, 0 rows affected (0.00 sec)
示例:移除權限

mysql> revoke insert on test.* from 'liwenkai'@'localhost';Query OK, 0 rows affected (0.30 sec)
注:上面的一些語句用的較少。你可以將知識點的掌握級別設置為了解級別。更多的時候,權限設置項特別多,人們往往記不住具體的命令。更多 的時候人們使用專門的工具來操作權限。

10. 常用工具簡介

常用的工具有:

  • phpMyAdmin(中文,推薦)
  • Navicat(中文,推薦)
  • mysql workbench(英文,官方出品,在設計E-R圖時推薦)
  • 附錄1 . 學習MySQL常用的英文單詞

    select update delete drop where insert order by order by limit
    database table function sql language script API office word html web
    server windows back next cancel folder choose setup install
    administrator/root/admin finish stop start config log/logs help quit
    module service port Explorer linu mac os studio zend studio eclipse
    notepad note pad vim gvim down download code info phpinfo dollar
    var/variable echo int integer bool boolearn string title float
    double if else null result dump set unset object array resource
    call back callback type is get numeric mixed auto check define line
    method class version dir name space include user my test demo password
    text get post submit value input body address file request fire fox
    bug action software content home role length protocol interface status
    time connection remote switch case default break date while go to goto
    count table continue declare function plus cookie session static match
    max min rand year uninx timezone secnods minutes hours day weekday
    month mirco first end tags replace encoding pop push list each key
    prev reset current sort regex read create write move copy data exists
    clear cache able lock seek close group own owner path base build parse
    discuz upload size limit memory enabled progress temp done error field
    style png jpeg/jpg gif header width height ascii display report level
    notice warning all core STRICT DEPRECATED trigger mysql command
    monitor or oracle Copyright engine index charset execute fetch row
    assoc db database edit delete update alter modify change add unsigned
    ZEROFILL enum stamp union order goods left right join from inner outer
    shop cms system manger money access agent token thread thread-safe
    throw video

    總結

    以上是生活随笔為你收集整理的一篇文章入门Mysql的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。