資料庫系統原理(第四章:SQL與關係資料庫基本操作 )

来源:https://www.cnblogs.com/jalja/archive/2019/09/29/11605648.html
-Advertisement-
Play Games

嵌入式和動態SQL規則:規定了SQL語句在高級語言程式設計中 使用的規範方法,以便適應較為複雜的應用 ...


一、SQL概述

sql是結構化查詢語言(Structured Query Language,SQL)是專門用來與數 據庫通信的語言,它可以幫助用戶操作關係資料庫。

SQL的特點:

SQL不是某個特定資料庫供應商專有的語言; SQL簡單易學 ;SQL強大、靈活,可以進行非常複雜和高級的資料庫操作

SQL的組成:

  • 數據查詢
  • 數據定義語言(Data Definition Language,DDL)
  • 數據操縱(DML)
  • 數據控制(DCL)

*******************數據定義語言**********************

CREATE 創建資料庫或資料庫對象

ALTER 對資料庫或資料庫對象進行修改

DROP 刪除資料庫或資料庫對象

************數據操縱語言(Data Manipulation Language,DML)***********

SELECT 從表或視圖中檢索數據

INSERT 將數據插入到表或視圖中

UPDATE 修改表或視圖中的數據

DELETE 從表或視圖中刪除數據

***************數據控制語言(Data Control Language,DCL)****************

GRANT 用於授予許可權

REVOKE 用於收回許可權

 

二、MySQL預備知識

嵌入式和動態SQL規則:規定了SQL語句在高級語言程式設計中 使用的規範方法,以便適應較為複雜的應用

SQL 調 用(以便提高SQL的靈活性、有效性、共用性以及使SQL具有更多的高級語言的特征):SQL 例 程、調 用 規 則  

MySQL使用基礎:LAMP模式 、WAMP模式   L(Linux) A(Apache)M(MySQL) P(PHP、Perl、Python)

 

 

關係資料庫管理系統(RDBMS):優點:體積小、速度快、開放源代碼、遵循GPL

MySQL擴展語言要素

常量:也稱字面值或標量值 

  • 字元串常量:用單引號或雙引號括起來的字元序列,分為ASCII字元串常量和Unicode字元串常量
  • 數值常量:整數常量、  浮點數常量
  • 十六進位常量:每對十六進位數字被轉換為一個字元,其最前面有一個字母“X”(或“x”)
  • 時間日期常量:用單引號將表示日期時間的字元串括起來而構成的 例如:’2018-06-05’
  • 位欄位值
  • 布爾值:TRUE:1  ;FALSE: 0
  • NULL值

變數:

  • 用戶變數:用戶變數前常添加一個符號@,用於將 其與列名區分開
  • 系統變數:大多數系統變數應用於其他SQL語句中 時,必須在系統變數前添加兩個@

 

 

 表達式 表達式是常量、變數、列名、複雜計算、運算符和函數的組合。

  • 字元型表達式
  • 數值型表達式
  • 日期型表達式

 

 

 三、數據定義(DDL)

創建資料庫(CREATE):使用CREATE  DATABASE 或  CREATE SCHEMA語句

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
 [DEFAULT]CHARACTER SET[=]charset_name
 |[DEFAULT]COLLATE[=]collation_name

例句:create DATABASE test_sy CHARACTER SET ="UTF8" COLLATION ="utf8_general_ci";     CREATE DATABASE mysql_test;

  1. 字元集(character set):定義了字元以及字元的編碼。
  2. 字元序(collation):指定字元集的 校對規則。

查看資料庫(SHOW):查看資料庫的所有表

SHOW {DATABASES | SCHEMAS}
 [LIKE’pattern’ | WHERE expr]

Like關鍵字用於匹配指定的資料庫名稱; Where從句用於指定資料庫名稱查詢範圍的條件

例句:SHOW DATABASES;  SHOW DATABASES LIKE "%test%";

SHOW TABLES:查看資料庫非系統表

 

選擇資料庫(USE):USE db_name;  從一個資料庫“跳轉”到另一個資料庫。

修改資料庫:alert

mysql>ALTER DATABASE mysql_test
 -> DEFAULT CHARACTER SET gb2312
 -> DEFAULT COLLATE gb2312_chinese_ci;

刪除資料庫:

DROP{DATABASE|SCHEMA}[IF EXISTS]db_name

例句:DROP DATABASE hahaha;   DROP DATABASE IF EXISTS hahaha;

*****************************表定義**********************************

創建表:數據表是關係資料庫中最重要、最基本的數據對象, 也是數據存儲的基本單位。

數據表, 被定義為欄位的集合 按(行 )和(列 )的格式來存儲的, 每一( 行)代表一條記錄, 每一(列 )代表記錄中一個欄位的取值。

CREATE[TEMPORARY]TABLE tbl_name
 (
 欄位名1 數據類型 [列級完整性約束條件][預設值]
 [,欄位名2 數據類型 [列級完整性約束條件][預設值]]
 [,……]
 [,表級完整性約束條件]
 )[ENGINT=引擎類型]

若添加“TEMPORARY”,則為臨時表

在一個已有資料庫mysql_test中新建一個包含客戶姓名、性別、地址、 聯繫方式等內容的客戶基本信息表,要求將客戶的id號指定為該表的 主鍵。

 

 

PRIMARY KEY(cust_id):指定主鍵

數據類型:

  • 整型int
  • 浮點型double
  • 布爾型bool
  • 日期型date
  • 時間戳timestamp
  • 時間型time 定長
  • 字元類型char
  • 可變長字元varchar

更新表(ALTER):使用ALTER TABLE語句,增加或刪減列、創建或取消索引、更改原有列的 數據類型、重新命名列或表,更改表的評註和表的引擎類型,為表重新創 建觸發器、存儲過程、索引和外鍵等。

1、ADD COLUMN 

例如:向資料庫mysql_test的表customers中添加一列,並命名為 cust_city,要求其不能為NULL,預設值為字元串“Wuhan”,且該列位 於原表cust_sex列之後。

ALTER TABLE mysql_test.customers ->ADD COLUMN cust_city char(10)NOT NULL DEFAULT ‘Wuhan’ AFTER cust_sex;

2、CHANGE[COLUMN]子句 修改表中列的名稱或數據類型

 

 3、ALTER[COLUMN]子句 修改或刪除表中指定列的預設值

  ALTER TABLE mysql_test.customers ->ALTER COLUMN cust_city SET DEFAULT ‘Beijing’;

4、MODIFY[COLUMN]子句 只修改指定列的數據類型,不會幹涉它的列名

  ALTER TABLE mysql_test.customers ->MODIFY COLUMN cust_name char(20) FIRST;

5、DROP[COLUMN]子句 刪除表中多餘的列

ALTER TABLE mysql_test.customers ->DROP COLUMN cust_contact;

6、RENAME[TO]子句 為表重新賦予一個表名

ALTER TABLE mysql_test.customers ->RENAME TO mysql_test.backup_customers;

給表重命名錶的第二種寫法:RENAME TABLE db_a.old_table TO db_b.new_table;

7、DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [ ,tbl_name ] … [RESTRICT | CASCADE]

 

查看表結構:

SHOW [FULL] COLUMNS {FROM | IN} tbl_name[{FROM | IN} db_name] [LIKE’pattern’ | WHERE expr]

例如:SHOW COLUMNS FROM t_role;

{DESCRIBE | DESC} tbl_name [col_name | wild]

例如:DESC t_role;

********************************************索引****************************************

 索引:索引是提高數據文件訪問效率的有效方法

 索引存在的弊端: 1)索引是以文件的形式存儲的,如果有大量的索引,索引文件可能比數據 文件更快達到最大的文件尺寸; 2)索引在提高查詢速度的同時,會降低更新表的速度。

 索引的分類:索引通常被創建成單列索引和組合索引

  • 普通索引 INDEX或KEY
  • 唯一性索引 UNIQUE
  • 主鍵 PRIMARY KEY

索引的創建 Create index

 

 

 例如:在資料庫mysql_test的表customers上,根據客戶姓名列的前三個 字元創建一個升序索引index_customers。

create index  index_customers  on mysql_test.customers (name(3) ASC);

在資料庫mysql_test的表customers上,根據客戶姓名列和客戶id 號創建一個組合索引index_cust。

create index index_cust on mysql_test.customers (cust_name,cust_id);


2、語法項[CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,…),
用於表示在創建新表的同時創建該表的唯一性索引;
3、語法項[CONSTRAINT[symbol]] FOREIGN KEY [index_name] (index_col_name,…),
用於表示在創建新表的同時創建該表的外鍵;

 索引的創建:使用ALTER TABLE語句創建

  • 1)語法項ADD {INDEX|KEY} [index_name](index_col_name,…), 用於表示在修改表的同時為該表添加索引;
  • 2)語法項ADD [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,…), 用於表示在創建新表的同時為該表添加主鍵; 
  • 3)語法項ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,…), 用於表示在修改表的同時為該表添加唯一性索引;
  • 4)語法項ADD [CONSTRAINT [symbol]] FOREIGN KEY (index_col_name,…), 用於表示在創建新表的同時為該表添加外鍵

例如:使用ALTER TABLE語句在資料庫mysql_test中表seller的姓名上添加一列 非唯一的索引,取名為index_seller_name。

 ALTER TABLE mysql_test.seller   ADD INDEX index_seller_name(seller_name);

 索引的查看(SHOW INDEX )

SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name ] [WHERE expr]

 SHOW index FROM t_test.tb_dept;

索引的刪除:使用DROP INDEX語句

DROP INDEX index_name ON tbl_name;

索引的刪除:使用ALTER TABLE語句

  • 1)選用DROP PRIMARY KEY子句用於刪除表中的主鍵,由於一個表中只有 一個主鍵,其也是一個索引;
  • 2)選用DROP INDEX子句用於刪除各種類型的索引;
  • 3)選用DROP FOREIGN KEY子句用於刪除外鍵。

例如:使用ALTER TABLE語句刪除資料庫mysql_test中表customers的主鍵和索引 index_customers。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

數據更新

 

數據查詢

 

 

視圖


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

-Advertisement-
Play Games
更多相關文章
  • 1) SIGHUP 本信號在用戶終端連接(正常或非正常)結束時發出, 通常是在終端的控制進程結束時, 通知同一session內的各個作業, 這時它們與控制終端不再關聯.2) SIGINT 程式終止(interrupt)信號, 在用戶鍵入INTR字元(通常是Ctrl+C)時發出3) SIGQUIT 和 ...
  • 說明:最近特別忙,都沒有時間寫blog,好多遇到的問題都沒能記下來,下麵是PA1的報告主要記錄了nemu debuger一些功能的實現方式和實現中遇到的問題,代替一下blog ...
  • 1. 文件名含有特殊字元,直接使用 rm 可能刪除不了,可以使用如下方法: 1) 使用 ls -i 查處該文件的 inode 號,假設為123 2) 使用find命令刪除: rm `find ./ -inum 123` 2. 如果文件名是以 - 連字元開頭的,可以使用如下方法來刪除,如刪除 "-fi ...
  • 一般情況下,安裝好的Ubuntu系統中預設是只安裝了 ,此時只能通過此系統連接訪問其他系統,但不具有讓其他系統訪問的許可權。在終端查看ssh進程,輸入 ,如果有安裝 只會出現 ,不會出現 (因為博主已經安裝 ,所以會出現 )。 此時要想開放本機SSH服務以便其他系統登陸訪問,就必須安裝 ,安裝過程如下 ...
  • xfs分區格式調整分區大小 調整前備份: mkdir /tmp/home cp -r /home/* /tmp/home/ umount /home 卸載時報錯有占用 fuser -m -v -i -k /home 解除占用 umount /home lvremove /dev/cl/home lv ...
  • ls | xargs catls | xargs -I {} cat {} 大寫I,指定參數的替換符號為{} 自定義 ...
  • 1.vim /etc/my.cnf 2.service mysqld restart 3.進入 Mysql 4.進入從伺服器 5.vim /etc/my.cnf 6.進入從Mysql 配置主主,從第6步在主伺服器上重覆操作 ...
  • 1.tree 2.cal 3.passwd 4.ssh 5.scp 6.ifconfig 7.wget 8.mount 9.umount 10.fdisk 11.w 12.bc 13.mkfs 14.crontab 15.chmod 16.chown 17.chgrp 18.tar 19.vim 2 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...