mysql資料庫知識點總結

来源:https://www.cnblogs.com/RomanticLife/archive/2017/12/30/8138285.html
-Advertisement-
Play Games

一.資料庫的基本操作 資料庫的安裝以後更新 在Linux系統下: 1.啟動資料庫服務:sudo service mysql start 2.停止資料庫服務:sudo service mysql stop 3.重啟資料庫服務:sudo service mysql restart 4.進入MySQL數據 ...


一.資料庫的基本操作

--------------------------------------------------------------資料庫的安裝以後更新----------------------------------------------------------------------------------

在Linux系統下:

1.啟動資料庫服務:sudo service mysql start

2.停止資料庫服務:sudo service mysql stop

3.重啟資料庫服務:sudo service mysql restart

4.進入MySQL資料庫:mysql -u用戶名 -p密碼

5.創建一個資料庫:create database 資料庫名 charset='utf8';  註意:一定要寫上資料庫編碼方式。否則會出現一系列的麻煩。

6.查看創建資料庫的語句:show create database 資料庫名;

7.查看當前所有資料庫:show databases;  註意:這裡沒有小括弧

8.進入一個資料庫:use 資料庫名;

9.查看當前正在用的資料庫:select database();  註意:這裡有小括弧

10.查看當前時間:select now();

11.刪除資料庫:drop database 資料庫名;

二.數據的完整性

數據類型:

1.整數:int、bit

2.小數:decimal  說明:decimal(5,2)表示該小數一共有五位數,其中小數占兩位。

3.字元串:varchar、char  說明:varchar(3)輸入'ab',實際存儲為'ab',輸入'abcd',實際存儲為'abc'。char(3)輸入'ab',實際存儲為'ab ',輸入'abcd',實際存儲為'abc'

4.時間:date(2017-12-12)、time(12:30:54)、datetime(2017-12-12  12:30:54)

5.枚舉:enum

數據的約束:

1.主鍵:primary key  說明:primary key 相當於 not null 和 unique

2.外鍵:foreign key

3.非空:not null

4. 唯一性:unique

5.預設值:default

6.取正數:unsigned

7.主鍵自增:auto_increment

三.表結構的基本操作

1.創建一個student學生表:

create table student(
    id int unsigned primary key auto_increment,  unsigned只能放在數據類型(int)的後面,放在約束後面直接報錯,不要問我為什麼,記住就行了。
    name varchar(10) not null,
    age int unsigned not null,
    height decimal(5,2) default 0,     寫了預設值就不需要再寫not null。
    gender enum("男","女") default "男",  這裡預設值只能寫enum中的漢字,不能寫索引。
    birth date,
    is_delete bit default 0  bit只有兩個取值0和1。這裡不要再寫逗號
);  最後必須分號結束

 

2.查看表格的創建語句:show create table student;

3.查看表結構:desc student;

4.查看所有的表格:show tables;

5.刪除表格:drop table student;

6.添加一個addr欄位,varchar(20),非空:alter table student add addr varchar(20) not null ;

7.將addr改為address:alter table student change addr address varchar(20) not null;

8.將address的varchar(20)改為varchar(50):alter table student modify address varchar(50) not null;

9.刪除address欄位:alter table student drop address;

四.數據的CRUD(create增加、retrieve檢索、update更新、delete刪除 )

-------------------------------------------------------------------------待更新-----------------------------------------------------------------------------------

五.SQL語句的強化

準備數據:

-- 創建 "京東" 資料庫
create database jing_dong charset=utf8;

-- 使用 "京東" 資料庫
use jing_dong;

-- 創建一個商品goods數據表
create table goods(
    id int unsigned primary key auto_increment not null,
    name varchar(150) not null,
    cate_name varchar(40) not null,
    brand_name varchar(40) not null,
    price decimal(10,3) not null default 0,
    is_show bit not null default 1,
    is_saleoff bit not null default 0
);
-- 向goods表中插入數據

insert into goods values(0,'r510vc 15.6英寸筆記本','筆記本','華碩','3399',default,default); 
insert into goods values(0,'y400n 14.0英寸筆記本電腦','筆記本','聯想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戲本','游戲本','雷神','8499',default,default); 
insert into goods values(0,'x550cc 15.6英寸筆記本','筆記本','華碩','2799',default,default); 
insert into goods values(0,'x240 超極本','超級本','聯想','4880',default,default); 
insert into goods values(0,'u330p 13.3英寸超極本','超級本','聯想','4299',default,default); 
insert into goods values(0,'svp13226scb 觸控超極本','超級本','索尼','7999',default,default); 
insert into goods values(0,'ipad mini 7.9英寸平板電腦','平板電腦','蘋果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板電腦','平板電腦','蘋果','3388',default,default); 
insert into goods values(0,'ipad mini 配備 retina 顯示屏','平板電腦','蘋果','2788',default,default); 
insert into goods values(0,'ideacentre c340 20英寸一體電腦 ','台式機','聯想','3499',default,default); 
insert into goods values(0,'vostro 3800-r1206 台式電腦','台式機','戴爾','2899',default,default); 
insert into goods values(0,'imac me086ch/a 21.5英寸一體電腦','台式機','蘋果','9188',default,default); 
insert into goods values(0,'at7-7414lp 台式電腦 linux )','台式機','巨集碁','3699',default,default); 
insert into goods values(0,'z220sff f4f06pa工作站','伺服器/工作站','惠普','4288',default,default); 
insert into goods values(0,'poweredge ii伺服器','伺服器/工作站','戴爾','5388',default,default); 
insert into goods values(0,'mac pro專業級台式電腦','伺服器/工作站','蘋果','28888',default,default); 
insert into goods values(0,'hmz-t3w 頭戴顯示設備','筆記本配件','索尼','6999',default,default); 
insert into goods values(0,'商務雙肩背包','筆記本配件','索尼','99',default,default); 
insert into goods values(0,'x3250 m4機架式伺服器','伺服器/工作站','ibm','6888',default,default); 
insert into goods values(0,'商務雙肩背包','筆記本配件','索尼','99',default,default);

 

 

+----+---------------------------------------+---------------------+------------+-----------+---------+------------+
| id | name                                  | cate_name           | brand_name | price     | is_show | is_saleoff |
+----+---------------------------------------+---------------------+------------+-----------+---------+------------+
|  1 | r510vc 15.6英寸筆記本                 | 筆記本              | 華碩       |  3399.000 |        |            |
|  2 | y400n 14.0英寸筆記本電腦              | 筆記本              | 聯想       |  4999.000 |        |            |
|  3 | g150th 15.6英寸游戲本                 | 游戲本              | 雷神       |  8499.000 |        |            |
|  4 | x550cc 15.6英寸筆記本                 | 筆記本              | 華碩       |  2799.000 |        |            |
|  5 | x240 超極本                           | 超級本              | 聯想       |  4880.000 |        |            |
|  6 | u330p 13.3英寸超極本                  | 超級本              | 聯想       |  4299.000 |        |            |
|  7 | svp13226scb 觸控超極本                | 超級本              | 索尼       |  7999.000 |        |            |
|  8 | ipad mini 7.9英寸平板電腦             | 平板電腦            | 蘋果       |  1998.000 |        |            |
|  9 | ipad air 9.7英寸平板電腦              | 平板電腦            | 蘋果       |  3388.000 |        |            |
| 10 | ipad mini 配備 retina 顯示屏          | 平板電腦            | 蘋果       |  2788.000 |        |            |
| 11 | ideacentre c340 20英寸一體電腦        | 台式機              | 聯想       |  3499.000 |        |            |
| 12 | vostro 3800-r1206 台式電腦            | 台式機              | 戴爾       |  2899.000 |        |            |
| 13 | imac me086ch/a 21.5英寸一體電腦       | 台式機              | 蘋果       |  9188.000 |        |            |
| 14 | at7-7414lp 台式電腦 linux )          | 台式機              | 巨集碁       |  3699.000 |        |            |
| 15 | z220sff f4f06pa工作站                 | 伺服器/工作站       | 惠普       |  4288.000 |        |            |
| 16 | poweredge ii伺服器                    | 伺服器/工作站       | 戴爾       |  5388.000 |        |            |
| 17 | mac pro專業級台式電腦                 | 伺服器/工作站       | 蘋果       | 28888.000 |        |            |
| 18 | hmz-t3w 頭戴顯示設備                  | 筆記本配件          | 索尼       |  6999.000 |        |            |
| 19 | 商務雙肩背包                          | 筆記本配件          | 索尼       |    99.000 |        |            |
| 20 | x3250 m4機架式伺服器                  | 伺服器/工作站       | ibm        |  6888.000 |        |            |
| 21 | 商務雙肩背包                          | 筆記本配件          | 索尼       |    99.000 |        |            |
+----+---------------------------------------+---------------------+------------+-----------+---------+------------+

我們發現該資料庫設計的有一些問題,是什麼呢?

電腦的每種類型(cate_name)對應好多種款式的電腦,每種品牌(brand_name)也對應好多種款式,顯然不符合資料庫設計的三範式。

下麵將goods表再拆分出兩個表,分別是goods_cates商品類型表和goods_brands品牌表。

------------------------------------------------資料庫的三範式以後更新----------------------------------------------------------------------------

商品類型表的創建:

1.創建goods_cates表:

-- 創建商品分類表
create table if not exists goods_cates(
    id int unsigned primary key auto_increment,
    name varchar(40) not null
);

 

 2.將goods表中的cate_name同步到goods_cates表中的name:

insert goods_cates(name) select cate_name from goods group by cate_name;(第一種插入方式)

解釋:先將goods表中的cate_name查詢出來分好組,然後插入到goods_cates表中欄位為name下。

註意:必須指定good_cates中的欄位,否則程式不知道把查詢出來的cate_name插入到什麼欄位中。

3.將goods_cates中的id同步到goods中:

update goods join goods_cates on goods.cate_name = goods_cates.name set goods.cate_name = goods_cates.id;

解釋:可以將goods join goods_cates on goods.cate_name = goods_cates.name 這段代碼看作一個整體,就是說先將goods表和goods_cates通過內連接建立一個虛表,然後更改goods.cate_name為goods_cates.id。

商品品牌表的創建:

1.創建goods_brands表同時插入數據:

-- 在創建數據表的時候一起插入數據
-- 註意: 需要對brand_name 用as起別名,否則name欄位就沒有值
create table goods_brands (
    id int unsigned primary key auto_increment,
    name varchar(40) not null) select brand_name as name from goods group by brand_name;(第二種插入方式)

 

 2.同步goods中的數據(原理同上):

update goods join goods_brands on goods.brand_name = goods_brands.name set goods.brand_name = goods_brands.id;

最後的最後修改表結構,將cate_name改為cate_id,brand_name改為brand_id,這是一波新操作,瞧好:

alter table goods change cate_name cate_id int unsigned not null,change brand_name brand_id int unsigned not null;

最後goods表結果:

----+---------------------------------------+---------+----------+-----------+---------+------------+
| id | name                                  | cate_id | brand_id | price     | is_show | is_saleoff |
+----+---------------------------------------+---------+----------+-----------+---------+------------+
|  1 | r510vc 15.6英寸筆記本                 |       5 |        2 |  3399.000 |        |            |
|  2 | y400n 14.0英寸筆記本電腦              |       5 |        7 |  4999.000 |        |            |
|  3 | g150th 15.6英寸游戲本                 |       4 |        9 |  8499.000 |        |            |
|  4 | x550cc 15.6英寸筆記本                 |       5 |        2 |  2799.000 |        |            |
|  5 | x240 超極本                           |       7 |        7 |  4880.000 |        |            |
|  6 | u330p 13.3英寸超極本                  |       7 |        7 |  4299.000 |        |            |
|  7 | svp13226scb 觸控超極本                |       7 |        6 |  7999.000 |        |            |
|  8 | ipad mini 7.9英寸平板電腦             |       2 |        8 |  1998.000 |        |            |
|  9 | ipad air 9.7英寸平板電腦              |       2 |        8 |  3388.000 |        |            |
| 10 | ipad mini 配備 retina 顯示屏          |       2 |        8 |  2788.000 |        |            |
| 11 | ideacentre c340 20英寸一體電腦        |       1 |        7 |  3499.000 |        |            |
| 12 | vostro 3800-r1206 台式電腦            |       1 |        5 |  2899.000 |        |            |
| 13 | imac me086ch/a 21.5英寸一體電腦       |       1 |        8 |  9188.000 |        |            |
| 14 | at7-7414lp 台式電腦 linux )          |       1 |        3 |  3699.000 |        |            |
| 15 | z220sff f4f06pa工作站                 |       3 |        4 |  4288.000 |        |            |
| 16 | poweredge ii伺服器                    |       3 |        5 |  5388.000 |        |            |
| 17 | mac pro專業級台式電腦                 |       3 |        8 | 28888.000 |        |            |
| 18 | hmz-t3w 頭戴顯示設備                  |       6 |        6 |  6999.000 |        |            |
| 19 | 商務雙肩背包                          |       6 |        6 |    99.000 |        |            |
| 20 | x3250 m4機架式伺服器                  |       3 |        1 |  6888.000 |        |            |
| 21 | 商務雙肩背包                          |       6 |        6 |    99.000 |        |            |
+----+---------------------------------------+---------+----------+-----------+---------+------------+

 

六.MySQL高級

 -----------------------------------------------------------------------待更新-------------------------------------------------------------------------------------------------------------

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 操作系統版本:CentOS Linux release 7.2.1511 (Core) SSH版本:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 1.打開Xshell工具,點擊“工具”,選擇“新建用戶密鑰生成嚮導”,如圖所示: 2.選擇密鑰類型為“RSA”,密鑰長度為“1 ...
  • 新建文本文檔,更改尾碼為“.bat”,寫入以下代碼: netsh interface ip set address name="本地連接" source=static 192.168.1.110 255.255.255.0 192.168.1.1 1 name是網卡的名字。 在WIN10中測試,要右 ...
  • Last login: Sun Dec 24 04:55:59 2017 1、安裝依賴 [root@node001 ~]# yum install -y perlLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfi ...
  • 一:什麼是 KVM KVM 是指基於 Linux 內核的虛擬機(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的 Qumranet 組織開發的一種新的“虛擬機”實現方案。 2007 年 2 月發佈的 Linux 2.6.20 內核第一次包含了 KVM  ...
  • 問題: sudo apt-get install vim E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)E: Unable to lock the administratio ...
  • 前幾天由於工作上的事耽誤了幾天,特來追加更新 第1章 ansible軟體概念說明 python語言是運維人員必會的語言,而ansible是一個基於Python開發的自動化運維工具 (saltstack)。其功能實現基於SSH遠程連接服務;ansible可以實現批量系統配置、批量軟體部署、批量文件拷貝 ...
  • win10點擊滑鼠右鍵調出菜單時,看不到菜單的文字,只顯示了小圖標這種問題的修複方法。 ...
  • 靜態散列要求桶的數目始終固定,那麼在確定桶數目和選擇散列函數時,如果桶數目過小,隨著數據量增加,性能會降低;如果留一定餘量,又會帶來空間的浪費;或者定期重組散列索引結構,但這是一項開銷大且耗時的工作。為了應對這些問題,為此提出了幾種動態散列(dynamic hashing)技術,可擴展動態散列(ex ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...