【SQL】(基礎(chǔ)篇):SQL語言、基本操作、創(chuàng)建表、索引

【介紹】數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng)
  • 數(shù)據(jù)庫:
    【概述】:數(shù)據(jù)庫提供 了一個存儲空間用來存儲各種數(shù)據(jù),可以將數(shù)據(jù)庫視為一個 存儲數(shù)據(jù)的容器。
  • 數(shù)據(jù)庫管理系統(tǒng):

專門用于創(chuàng)建和管理數(shù)據(jù)庫的一套 軟件, 介于應(yīng)用程序和操作系統(tǒng)之間,如 MySQL、 Oracle、 SQL Server、 DB2等。結(jié)構(gòu)圖如下所示。

數(shù)據(jù)庫系統(tǒng)架構(gòu)圖


關(guān)于SQL語言

SQL( Structured Query Language) 是 一種數(shù)據(jù)庫查詢語言和程序設(shè)計(jì)語言,主要用于管理數(shù)據(jù)庫中的數(shù)據(jù),如存取數(shù)據(jù)、查詢 數(shù)據(jù)、更新 數(shù)據(jù)等。
由以下四種語言構(gòu)成:

  • (1) 數(shù)據(jù)定義語言( Data Definition Language, DDL)

【用于】數(shù)據(jù)庫定義語言主要用于定義數(shù)據(jù)庫、表等。

【例如】CREATE、ALTER、DROP

  • (2) 數(shù)據(jù)操作語言( Data Manipulation Language, DML)

【用于】數(shù)據(jù)操作語言 主要用于對數(shù)據(jù)庫進(jìn)行添加、修改和刪除操作。

【例如】INSERT、UPDATE、DELETE

  • (3)數(shù)據(jù)查詢語言( Data Query Language, DQL)

【用于】數(shù)據(jù)查詢語言主要用于查詢數(shù)據(jù);

【例如】SELECT

  • (4) 數(shù)據(jù)控制語言( Data Control Language, DCL)

【用于】數(shù)據(jù)控制語言主要用于控制用的訪問權(quán)限。

【例如】GRANT、COMMIT、ROLLBACK


【注釋一下】SQL 對大小寫不敏感!

【編程-好習(xí)慣】分號是在數(shù)據(jù)庫系統(tǒng)中分隔每條 SQL 語句的標(biāo)準(zhǔn)方法,這樣就可以在對服務(wù)器的相同請求中執(zhí)行一條以上的語句。

如果使用的是 MS Access 和 SQL Server 2000,則不必在每條 SQL 語句之后使用分號,不過某些數(shù)據(jù)庫軟件要求必須使用分號。(最好還是寫上)


  • mysql -uroot -p :連接到mysql

  • \s :查看數(shù)據(jù)庫信息

  • set character_ set_ client = gbk:
    設(shè)置數(shù)據(jù)庫編碼集(這種方式只能對當(dāng)前窗口有效);【永久修改】:在my.ini中配置。


數(shù)據(jù)庫和表的基本操作

(1).創(chuàng)建數(shù)據(jù)庫

  • 【格式】:create database 數(shù)據(jù)庫名稱
  • 【格式】:create database user;

(2).查看數(shù)據(jù)庫

  • 【格式】:show databases;

(3).查看某個數(shù)據(jù)庫的創(chuàng)建信息

  • 【格式】:show create database 數(shù)據(jù)庫名稱
  • 【格式】:show create database users;

(4).修改數(shù)據(jù)庫

  • 【格式】:alter database 數(shù)據(jù)庫名 default character set 編碼方式 collate 編碼方式_bin

(5).刪除數(shù)據(jù)庫

  • 【格式】:drop database 數(shù)據(jù)庫名稱

SQL 可以分為兩個部分:數(shù)據(jù)操作語言 (DML) 和 數(shù)據(jù)定義語言 (DDL) 。

(結(jié)構(gòu)化查詢語言 (SQL)是用于執(zhí)行查詢的語法。但是 SQL 語言也包含用于更新、插入和刪除記錄的語法。

查詢和更新指令構(gòu)成了 SQL 的 DML 部分:

    SELECT - 從數(shù)據(jù)庫表中獲取數(shù)據(jù)
    UPDATE - 更新數(shù)據(jù)庫表中的數(shù)據(jù)
    DELETE - 從數(shù)據(jù)庫表中刪除數(shù)據(jù)
    INSERT INTO - 向數(shù)據(jù)庫表中插入數(shù)據(jù)

SQL 的數(shù)據(jù)定義語言 (DDL) 部分使我們有能力創(chuàng)建或刪除表格。我們也可以定義索引(鍵),規(guī)定表之間的鏈接,以及施加表間的約束。

SQL 中最重要的 DDL 語句:

    CREATE DATABASE - 創(chuàng)建新數(shù)據(jù)庫
    ALTER DATABASE - 修改數(shù)據(jù)庫
    CREATE TABLE - 創(chuàng)建新表
    ALTER TABLE - 變更(改變)數(shù)據(jù)庫表
    DROP TABLE - 刪除表
    CREATE INDEX - 創(chuàng)建索引(搜索鍵)
    DROP INDEX - 刪除索引

實(shí)例:

MariaDB [db_student_msg]> show tables;
+--------------------------+
| Tables_in_db_student_msg |
+--------------------------+
| tb_class                 |
| tb_score                 |
| tb_student               |
| tb_subject               |
+--------------------------+
4 rows in set (0.00 sec)

MariaDB [db_student_msg]> desc tb_student;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stu_no    | char(8)     | NO   | PRI | NULL    |       |
| stu_name  | varchar(30) | NO   |     | NULL    |       |
| gender    | tinyint(1)  | NO   |     | NULL    |       |
| brith_day | datetime    | YES  |     | NULL    |       |
| class_no  | int(11)     | NO   | MUL | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
MariaDB [db_student_msg]> desc tb_score;
+------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| stu_no     | char(8) | NO   | PRI | NULL    |       |
| subject_no | int(11) | NO   | PRI | NULL    |       |
| score      | double  | YES  |     | 0       |       |
+------------+---------+------+-----+---------+-------+

數(shù)據(jù)類型

mysql 提供了多種數(shù)據(jù)類型,包括:整數(shù)、浮點(diǎn)數(shù)、定點(diǎn)數(shù)、日期和時間、字符串和二進(jìn)制類型。(這里就不詳細(xì)闡述了...)

數(shù)據(jù)類型 存儲范圍 數(shù)據(jù)類型 存儲范圍
TINYNLOB 1~255字節(jié) MEDIUMBLOB 0~16777215字節(jié)
BLOB 0~65535字節(jié) LONGBLOB 0~4294967295字節(jié)

創(chuàng)建數(shù)據(jù)表
 【格式】:CREATE TABLE 表 名 (
字段 名 1   數(shù)據(jù) 類型[ 完整性 約束 條件],
字段 名 2   數(shù)據(jù) 類型[ 完整性 約束 條件],
...
字段 名 n, 數(shù)據(jù) 類型[ 完整性 約束 條件]
)
  • 查看數(shù)據(jù)表:show create table 表名;

  • 查看表的字段信息:DESC 表名;

修改數(shù)據(jù)表
  • 1) 修改表名

【格式】:alter table 舊表名 rename [to] 新表名

  • 2)修改字段名

【格式】:alter table 表名 change 舊字段名 新字段名 新字段類型

 ALTER TABLE grade CHANGE name username VARCHAR( 20);
  • (3)修改字段的數(shù)據(jù)類型

【格式】:alter table 表名 modify 字段名 數(shù)據(jù)類型;

  • (4)添加字段

【格式】:alter table 表名 add 新字段 數(shù)據(jù)類型[約束條件] [first|after 已存在的字段名]

  • (5) 刪除字段

【格式】:alter table 表名 drop 字段名

  • (6)修改字段的排列位置

【格式】:alter table 表名 modify 字段名1 數(shù)據(jù)類型 first | after 字段2

  • (7)刪除數(shù)據(jù)表

【格式】:drop table 表名


關(guān)于表的約束

為了防止向數(shù)據(jù)庫中插入錯誤的數(shù)據(jù),在mysql中定義了一些約束規(guī)則。


表的約束

(1).【主鍵】:通過primary key 來定義,唯一且非空;

  • 單字段主鍵:
    • 【格式】:字段名 數(shù)據(jù)類型 primary key;
      CREATE TABLE example01( id INT PRIMARY KEY, name VARCHAR( 20), grade FLOAT);
  • 多字段主鍵
    由多個字段組合而成的主鍵。
    • 【格式】:PRIMARY KEY (字段 名 1,…, 字段 名 n)

(2).【 非空約束】

  • 字段值不能為NULL;
  • 【格式】:字段 名 數(shù)據(jù) 類型 NOT NULL;

(3).【唯一約束】

  • 【作用】:保證字段的唯一性;
  • 【格式】:字段 名 數(shù)據(jù) 類型 UNIQUE;

(4).【默認(rèn)約束】

  • 【提示】:插入數(shù)據(jù)時,如果字段沒有被賦值,則給該字段一個默認(rèn)值;
  • 【格式】:字段 名 數(shù)據(jù) 類型 DEFAULT 默認(rèn)值;

關(guān)于表中字段的自動增加
  • 【目的】:為了給新插入的字段一個唯一的ID
  • 【格式】:字段名 數(shù)據(jù)類型 AUTO_ INCREMENT;
例如:
CREATE TABLE example05( id INT PRIMARY KEY AUTO_ INCREMENT, stu_ id INT UNIQUE, grade FLOAT );

索引

【解釋】:索引就好像一本書的目錄,用于快速檢索數(shù)據(jù)。
索引分類:普通索引、唯一索引、全文索引。

  • 普通索引
    【解釋】:由KEY 或 INDEX 定義。是基本的索引類型,可以用于任何數(shù)據(jù)類型 。其值是否唯一或?yàn)榭沼勺侄伪旧砑s束決定

  • 唯一索引
    【解釋】:由Unique 定義的索引,該索引的字段值必須唯一。

  • 全文索引
    【解釋】:只能創(chuàng)建在char、varchar、text字段類型上。只有MyISAM引擎支持。

【提高】:索引也可創(chuàng)建在多列上。


創(chuàng)建索引

在創(chuàng)建表的時候,如果創(chuàng)建索引,結(jié)構(gòu)如下:

 CREATE TABLE 表 名(

字段名 數(shù)據(jù)類型[ 完整性 約束 條件],

字段名 數(shù)據(jù)類型[ 完整性 約束 條件], …

字段名 數(shù)據(jù)類型 [UNIQUE| FULLTEXT| SPATIAL] INDEX| KEY [別名] (字段 名 1 [(長度)]) [ASC|DESC]));

【解釋一下】

  • 【別名】:索引的名稱;
  • 【字段名1】:指定索引字段名稱;
  • 【長度】:表示索引的長度;
  • 【ASC|DESC】: 索引的順序;
分類探討創(chuàng)建索引
  • 1)創(chuàng)建普通索引

【格式】:CREATE TABLE t1( id INT, name VARCHAR( 20), score FLOAT,name VARCHAR( 20), score FLOAT, INDEX (id) );

  • 2)創(chuàng)建唯一索引

【格式】:CREATE TABLE t2( id INT NOT NULL, name VARCHAR( 20) NOT NULL, score FLOAT, UNIQUE INDEX unique_ id( id ASC) );

  • 3)創(chuàng)建多列索引

【格式】:CREATE TABLE t5( id INT NOT NULL, name VARCHAR( 20) NOT NULL,score FLOAT, INDEX multi( id, name( 20)) );


刪除索引
  • 直接操作

【結(jié)構(gòu)】:ALTER TABLE 表名 DROP INDEX 索引;

  • 使用 DROP INDEX 刪除 索引

【結(jié)構(gòu)】:DROP INDEX 索引 名 ON 表 名;


【重點(diǎn)】添加、更新、刪除數(shù)據(jù)
添加數(shù)據(jù)
  • 指定字段添加數(shù)據(jù)

【結(jié)構(gòu)】:INSERT INTO 表 名( 字段 名 1, 字段 名 2,…) VALUES( 值 1, 值 2,…);

  • 不指定字段名的insert

【結(jié)構(gòu)】:INSERT INTO 表 名 VALUES( 值 1, 值 2,…);

  • 同時插入多條數(shù)據(jù)

【結(jié)構(gòu)】:INSERT INTO 表 名[( 字段 名 1, 字段 名 2,…) ] VALUES( 值 1, 值 2,…),( 值 1, 值 2,…), … (值 1, 值 2,…);

更新數(shù)據(jù)

【結(jié)構(gòu)】:UPDATE 表 名 SET 字段 名 1= 值 1[, 字段 名 2 = 值 2,…] [WHERE 條件 表達(dá)式]

刪除數(shù)據(jù)
  • 【結(jié)構(gòu)】:DELETE FROM 表 名 [WHERE 條件 表達(dá)式];

  • 【結(jié)構(gòu)】:TRUNCATE [TABLE] 表 名;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容