《深入淺出MySQL》之SQL基礎

来源:http://www.cnblogs.com/liubinsh/archive/2017/09/15/7525514.html
-Advertisement-
Play Games

SQL是Structure Query language(結構化查詢語言)的縮寫,它是使用關係模型的資料庫應用語言。在眾多開源資料庫中,MySQL正是其中最傑出的代表,MySQL是由三個瑞典人於20世紀90年代開發的一個關係型資料庫。並用了創始人之一Michael Widenius女兒的名字My命名 ...


SQL是Structure Query language(結構化查詢語言)的縮寫,它是使用關係模型的資料庫應用語言。在眾多開源資料庫中,MySQL正是其中最傑出的代表,MySQL是由三個瑞典人於20世紀90年代開發的一個關係型資料庫。並用了創始人之一Michael Widenius女兒的名字My命名,這就是MySQL的由來,本次博客使用的是開源資料庫MySQL,版本5.7.19,下麵就開始吧!

 

SQL分類

1.數據定義語句(Data Definition Language,DDL):主要是用來定義資料庫、表、列等對象;

2.數據操作語句(Data Manipulation language,DML):用來添加、更新、刪除和查詢資料庫記錄,並檢查數據完整性;

3.數據控制語句(Data Control language,DCL):定義了資料庫、表、用戶的訪問許可權和安全級別等;

 

DDL語句

 1.創建資料庫

語法:create database dbname; 

舉例:

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

查看當前系統中有哪些資料庫:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

選擇要操作的資料庫:

mysql> use test
Database changed

查看資料庫中所創建的表:

mysql> show tables;
Empty set (0.00 sec)
mysql> use mysql
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| dept                      |
| emp                       |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| 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                      |
+---------------------------+
33 rows in set (0.00 sec)
View Code

 

2.刪除資料庫

語法:drop database dbname;

舉例:

mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)

註意:刪除資料庫後,資料庫下麵的所有的的表就被清空了,再刪除之前記得備份有用的數據。

 

3.創建表

create table tablename(
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
...
column_name_2 column_type_2 constraints,
);

舉例:

mysql> create table emp(name varchar(10),hiredate date,sal decimal(10,2),dept int(2));
Query OK, 0 rows affected (0.04 sec)

查看表:

語法:desc tablename

舉例:

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

查看表的詳細信息:

mysql> show create table emp \G;
*************************** 1. row ***************************
       Table: emp
Create Table: CREATE TABLE `emp` (
  `name` varchar(10) DEFAULT NULL,
  `hiredate` date DEFAULT NULL,
  `sal` decimal(10,2) DEFAULT NULL,
  `dept` int(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR:
No query specified

 

4.刪除表

語法:drop table tablename

舉例:

mysql> drop table emp;
Query OK, 0 rows affected (0.01 sec)

 

5.修改表

(1)修改表類型:

語法:alter table tablename modify column_name column_type_new

舉例:

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

mysql> alter table emp modify name varchar(20);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> alter table emp modify name varchar(20);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| name     | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| dep      | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
View Code

(2)增加表欄位:

語法:alter table tablename add column column_name column_type;

舉例:

mysql> alter table emp add column age int(3);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| name     | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| dep      | int(2)        | YES  |     | NULL    |       |
| age      | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

(3)刪除表欄位:

alter table tablename drop column column_name

舉例:

mysql> alter table emp drop column age;
Query OK, 0 rows affected (0.17 sec)
Records: 0  Duplicates: 0  Warnings: 0

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

(4)欄位改名

語法:alter table tablename change old_column_name new_column_name column_type

舉例:

mysql> alter table emp change dep dept int(3);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| name     | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| dept     | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

change和midify都可以修改表,change可以修改列的名稱和重新定義列的類型,modify卻不能修改列的名稱。

(5)修改欄位排列的順序

語法:alter table tablename change/add/modify column_name column_type first/after column_name

舉例:

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| name     | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| dept     | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql>
mysql>
mysql> alter table emp add column age int(2) after name;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| name     | varchar(20)   | YES  |     | NULL    |       |
| age      | int(2)        | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| dept     | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

(6)修改表名

語法:alter table tablename rename new_tablename

舉例:

mysql> alter table emp rename emp1;
Query OK, 0 rows affected (0.01 sec)
mysql> desc emp1;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| name     | varchar(20)   | YES  |     | NULL    |       |
| age      | int(2)        | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| dept     | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

 

DML語句

DML是對資料庫中的表的操作,是開發人員最長使用的。

1.插入記錄

語法:insert into tablename(column_name1,column_name2,...column_namen) values(value1,value2,...valuen);

舉例:

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| name     | varchar(20)   | YES  |     | NULL    |       |
| age      | int(2)        | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| dept     | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
mysql> insert into emp(name,age,hiredate,sal,dept) values('frank',22,'2017-09-15','10000',1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into emp  values('rose',21,'2017-09-15','10000',1);    #也可以不指定欄位名稱,但是後面的順序必須和欄位保持一致
Query OK, 1 row affected (0.00 sec)
mysql> insert into emp  values('jeff',23,'2017-09-15','10000',2),('mei',21,'2017-09-15','8000',3); #可以同時插入多條記錄
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> insert into emp(name,sal) values('lisa','1000');   #沒寫的欄位預設為NULL
Query OK, 1 row affected (0.00 sec)

查看表emp:

mysql> select * from emp;
+-------+------+------------+----------+------+
| name  | age  | hiredate   | sal      | dept |
+-------+------+------------+----------+------+
| frank |   22 | 2017-09-15 | 10000.00 |    1 |
| rose  |   21 | 2017-09-15 | 10000.00 |    1 |
| jeff  |   23 | 2017-09-15 | 10000.00 |    2 |
| mei   |   21 | 2017-09-15 |  8000.00 |    3 |
| lisa  | NULL | NULL       |  1000.00 | NULL |
+-------+------+------------+----------+------+
5 rows in set (0.00 sec)

 

2.更新記錄

(1)更新單個表

語法:update tablename set column_name1=value1,column_name2=value2,...column_namen=valuen  [where condition]

舉例:

mysql> select * from emp;
+-------+------+------------+----------+------+
| name  | age  | hiredate   | sal      | dept |
+-------+------+------------+----------+------+
| frank |   22 | 2017-09-15 | 10000.00 |    1 |
| rose  |   21 | 2017
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為一個一直使用windows系統的人,還真不知道mac上的svn如何使用,偶然機會下現在需要。 查過後發現 mac 是自帶svn的,在我裝好xcode後,再安裝 Command Line Tools 1.打開終端 輸入 點擊安裝,過幾分鐘就安好了。 2.再輸入此命令查看版本號,有版本號就是安裝好了 ...
  • mysql -h 192.168.1.104 -P3306 -uroot -p 然後輸入你安裝時設置的MySQL密碼 發現Can't connect to MySQL server 你的IP 解決方法: (1)用localhost 登錄 mysql -h localhost -P3306 -uroo ...
  • 一 快速性 如果在記憶體中運行MapRaduce,要比Hadoop快100倍 如果在磁碟中運行,要比Hadoop快10倍 Spark使用先進的有向無環圖執行引擎來支持非迴圈的數據流在記憶體中計算 二 易用性 Spark提供超過80個高階運算元,這些運算元使其很容易構建並行應用 這些運算元支持多種語言 按照切合 ...
  • MySqlInnoDB的事務隔離級別有四個:(預設是可重覆讀repeatable read) 未提交讀 read uncommit : 在另一個事務修改了數據,但尚未提交,在本事務中SELECT語句可能會查詢到這些未被提交的數據,而發生臟讀。 提交讀 read commit : 在一個事務中發生兩次 ...
  • ORACLE虛擬索引(Virtual Index) 虛擬索引概念 虛擬索引(Virtual Indexes)是一個定義在數據字典中的假索引(fake index),它沒有相關的索引段。虛擬索引的目的是模擬索引的存在而不用真實的創建一個完整索引。這允許開發者創建虛擬索引來查看相關執行計劃而不用等到真實... ...
  • 1. 索引的特性 1.1 加快條件的檢索的特性 當表數據量越來越大時查詢速度會下降,在表的條件欄位上使用索引,快速定位到可能滿足條件的記錄,不需要遍歷所有記錄。 #在這個案例中:執行同一條SQL。t2有索引的執行數據是0.052 ms;t1沒有索引的是:5.741 ms; 1.2 有序的特性 索引本 ...
  • 文件和文件組填充策略 文件組對組內的所有文件都使用按比例填充策略。當數據寫入文件組時,SQL Server 資料庫引擎按文件中的可用空間比例將數據寫入文件組中的每個文件,而不是將所有數據都寫入第一個文件直至其變滿為止。然後再寫入下一個文件。例如,如果文件 f1 有 100 MB 可用空間,文件 f2 ...
  • --通過代碼方式新建資料庫create database MyDatabase0911New --(MyDatabase0911New要創建的資料庫名稱)on primary --資料庫文件( --名字 name='MyDatabase0911New_data', --路徑 filename='G: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...