MySQL數據表操作

来源:http://www.cnblogs.com/hlwyfeng/archive/2016/11/16/6069738.html
-Advertisement-
Play Games

創建數據表、 打開資料庫、 創建數據表、 查看數據表結構、 插入記錄、 查找表數據、 表創建的基本約束、 欄位的NULL與NOT NULL、 自動編號、 設置主鍵、 唯一約束、 預設值DEFAULT ...


創建數據表

打開資料庫

USE 資料庫名稱

mysql> USE D1;
Database changed

使用 USE D1;表示打開資料庫D1,我們可以通過SELECT DATABASE();來查看當前打開的資料庫:

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| d1         |
+------------+
1 row in set (0.00 sec)

創建數據表

CREATE TABLE [IF NOT EXISTS] table_name (
column_name datatype,
......
)

這個結構很簡單,對於[IF NOT EXISTS],在第一篇 “MySQL基本操作” 已經說明,這裡不贅述。

我們來創建一個數據表 table1

mysql> CREATE TABLE table1(
    -> username VARCHAR(20),
    -> age TINYINT UNSIGNED,
    -> salary FLOAT(8,2) UNSIGNED
    -> );
Query OK, 0 rows affected (0.74 sec)

註意這裡的UNSIGNED,表示無符號值,即是正數,可回顧 “MySQL基本數據類型” 查看,TINYINT UNSIGNED 表示 0 ~ 255 之間的數值。

這裡提示創建成功,我們可以通過以下語句來驗證一下:

SHOW TABLES [FROM db_name][LIKE 'pattern' | WHERE expr]

mysql> SHOW TABLES FROM D1;
+--------------+
| Tables_in_d1 |
+--------------+
| table1       |
+--------------+
1 row in set (0.00 sec)

這裡我們可以看到創建了table1這張表。

查看數據表結構

SHOW COLUMNS FROM tbl_name

mysql> SHOW COLUMNS FROM table1;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | YES  |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
| salary   | float(8,2) unsigned | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.10 sec)

插入記錄

創建完表之後就要寫入數據了,通過以下語句插入記錄:

INSERT [INTO] tbl_name [(col_name,...)] VALUE(val,...)

這裡 [(col_name,...)] 為可選項,如果不添加,那麼在VALUE裡面的值必須一一與數據表的欄位對應,否則無法插入,我們看一下:

mysql> INSERT table1 VALUE("LI",20,6500.50);
Query OK, 1 row affected (0.14 sec)

這裡VALUE括弧裡面與table1的欄位一一對應,分別為username=“LI”,age=20,salary=6500.50

下麵我們再插入一條數據,但是沒有對應:

mysql> INSERT table1 Value("Wang",25);
ERROR 1136 (21S01): Column count doesn't match value count at row 1

無法插入,因為沒有給出salary的值。

通過添加 [(col_name,...)] 即可靈活插入數據:

mysql> INSERT table1(username,age) VALUE("Wang",25);
Query OK, 1 row affected (0.11 sec)

table1 與 VALUE 一一對應。

查找表數據

前面已經插入了兩條數據,可以通過以下語句查找表數據:

SELECT expr,... FROM tbl_name

對於資料庫的查找語句SELECT,內容比較多,後面文章會具體講解,我們用一個簡單的語句來查找表的內容:

mysql> SELECT * FROM table1
    -> ;
+----------+------+---------+
| username | age  | salary  |
+----------+------+---------+
| LI       |   20 | 6500.50 |
| Wang     |   25 |    NULL |
+----------+------+---------+
2 rows in set (0.00 sec)

註意MySQL語句是以“;”結尾,如果忘了寫是無法執行語句的,在箭頭後面添加分號即可;這裡我們可以看到表裡面有兩條剛剛寫入的數據。

表創建的基本約束

欄位的NULL與NOT NULL

在創建表的時候,我們可以設定該欄位是否可為空,如果不可為空,那麼在插入數據時,則不能為空。

我們來創建一個數據表table2

mysql> CREATE TABLE table2(
    -> username VARCHAR(20) NOT NULL,
    -> age TINYINT UNSIGNED NULL,
    -> salary FLOAT(8,2)
    -> );

這裡username為非空,age為NULL,salary不寫,我們來查看表結構:

mysql> SHOW COLUMNS FROM table2;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20)         | NO   |     | NULL    |       |
| age      | tinyint(3) unsigned | YES  |     | NULL    |       |
| salary   | float(8,2)          | YES  |     | NULL    |       |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

從這裡我們可以看到,username的NULL為NO,其他兩個欄位為YES,對於可以為空的欄位,寫不寫NULL都表示可以為空。

自動編號

AUTO_INCREMENT

auto_increment,auto自動,increment是增加的意思,組合起來表示自動增加,也就是可以自動按照從小到大的順序編號。

  • 只能用於主鍵(主鍵表示表中數據的唯一表示,可以通過主鍵來區分表中的數據)
  • 預設情況下為1,增量為1

下麵來操作一下:

mysql> CREATE TABLE table3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT,
    -> username VARCHAR(20)
    -> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

報錯,因為 id 沒有設置為主鍵。

設置主鍵

PRIMARY KEY

  • 主鍵約束
  • 每張表只能存在一個主鍵
  • 主鍵保證記錄的唯一性
  • 主鍵自動為NOT NULL

那麼我們添加主鍵,重新操作一次:

mysql> CREATE TABLE table3(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.42 sec)

註意順序,PRIMARY KEY 要放在最後。

這樣我們就創建成功,下麵依次插入數據,並查看結果:

mysql> INSERT table3(username) VALUES("Zhang");
Query OK, 1 row affected (0.09 sec)

mysql> INSERT table3(username) VALUES("Weng");
Query OK, 1 row affected (0.07 sec)

mysql> INSERT table3(username) VALUES("Chen");
Query OK, 1 row affected (0.09 sec)

mysql> SELECT * FROM table3;
+----+----------+
| id | username |
+----+----------+
|  1 | Zhang    |
|  2 | Weng     |
|  3 | Chen     |
+----+----------+
3 rows in set (0.00 sec)

我們可以看到id自動編號,從小到大一次依次編號。

唯一約束

UNIQUE KEY

  • 唯一約束
  • 唯一約束保證記錄不可重覆(唯一性)
  • 唯一約束可以為空值(NULL)
  • 可以有多個唯一約束
mysql> CREATE TABLE table4(
    -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(20) UNIQUE KEY,
    -> age TINYINT UNSIGNED
    -> );
Query OK, 0 rows affected (0.43 sec)

mysql> INSERT table4(username) VALUE("Li");
Query OK, 1 row affected (0.11 sec)

mysql> INSERT table4(username) VALUE("Li");
ERROR 1062 (23000): Duplicate entry 'Li' for key 'username'

mysql> INSERT table4(username) VALUE("Chen");
Query OK, 1 row affected (0.10 sec)

對於username我們設置為唯一約束,所以Li不可被重覆創建,改為“Chen”即可。註意這裡只是實驗,在實際操作中,名字相同還是常有的,應該根據實際情況建立數據表。

預設值DEFAULT

通過 DEFAULT 來設置預設值,如果在插入數據時沒給給出相應的值,那麼就用預設的,下麵的例子就是設置number的預設值為3,在插入數據的時候,因為沒有給出number,所以預設為3。

mysql> CREATE TABLE table5(
    -> number ENUM("1","2","3") DEFAULT "3",
    -> username VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.41 sec)

mysql> INSERT table5(username) VALUES("Luo");
Query OK, 1 row affected (0.10 sec)

mysql> INSERT table5(username) VALUES("Fang");
Query OK, 1 row affected (0.15 sec)

mysql> SELECT * FROM table5;
+--------+----------+
| number | username |
+--------+----------+
| 3      | Luo      |
| 3      | Fang     |
+--------+----------+
2 rows in set (0.00 sec)

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

-Advertisement-
Play Games
更多相關文章
  • 今天是Android第一天的學習,對於學習任何一門課程時我們都要對該課程要有基本的瞭解和認識,瞭解該課程學點什麼內容,學了這門知識我門能夠做些什麼,這也是對於我們這些剛入門的學習人員來說是一個必須要弄清清楚的,那對於該門課程我們是學習的是Android那安卓到底有什麼用途呢?小編我在這裡簡述一下 第 ...
  • 一、配置jdk環境(學過java的請無視) 1.安裝jdk jdk下載地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html 進去後根據自己的系統位數下載 下載完成後安 ...
  • 一、JDK(不用安裝)1.下載適合的jdk2.配置環境變數 添加一系統邊=變數 JAVA_HOME=D:\Java\jdk1.8.0_91 CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib ...
  • 1.讓其他軟體能調起自己寫的播放器 1.在功能清單文件添加下麵的意圖 2.文件或者圖片瀏覽器 //1.調起系統所有的播放-隱式意圖 Intent intent = new Intent(); intent.setDataAndType(Uri.parse("視頻播放地址"),"video/*"); ...
  • JSON常用與伺服器進行數據交互,JSON中“{}”表示JSONObject,“[]”表示JSONArray 如下json數據: 生成json數據代碼: 解析json數據代碼: ...
  • 轉自:Android View的繪製流程 寫得太好了,本來還想自己寫的,奈何肚裡墨水有限,直接轉吧。正所謂前人種樹,後人乘涼。。 View的繪製和事件處理是兩個重要的主題,上一篇《圖解 Android事件分發機制》已經把事件的分發機制講得比較詳細了,這一篇是針對View的繪製,View的繪製如果你有 ...
  • Android官方文檔介紹的數據存儲方式共有五種,sqlite,SharedPreferences,網路存儲,外儲存儲,文件存儲,但是這些數據都無法進行共用,那麼我們就引入了今天的主角:ContentProvider // 通過隱式意圖打開通訊錄 Intent intent =newIntent(I ...
  • 【RDA】使用RDA(Remote Diagnostic Agent)工具對資料庫進行健康檢查 分類: Linux RDA英文全稱叫做“Oracle Remote Diagnostic Agent”。 這個Oracle診斷工具是用perl編寫的,包含非常豐富的診斷腳本,使用它可以非常便利的採集到Or ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...