MySQL的庫表詳細操作

来源:https://www.cnblogs.com/changxin7/archive/2019/09/19/11550121.html
-Advertisement-
Play Games

一 庫操作 1、創建資料庫 1.1 語法 CREATE DATABASE 資料庫名 charset utf8; 1.2 資料庫命名規則 可以由字母、數字、下劃線、@、#、$ 區分大小寫 唯一性 不能使用關鍵字如 create select 不能單獨使用數字 最長128位 基本上跟python或者js ...


一 庫操作

1、創建資料庫

    1.1 語法

      CREATE DATABASE 資料庫名 charset utf8;

    1.2 資料庫命名規則

      可以由字母、數字、下劃線、@、#、$

      區分大小寫

      唯一性

      不能使用關鍵字如 create select

      不能單獨使用數字

      最長128位

基本上跟python或者js的命名規則一樣

2、資料庫相關操作

    也是一些基本操作,和我們之前說的差不多。

1 查看資料庫
show databases;
show create database db1;
select database();

2 選擇資料庫
USE 資料庫名

3 刪除資料庫
DROP DATABASE 資料庫名;

4 修改資料庫
alter database db1 charset utf8;

  關於庫的內容,咱們就說這些吧,哈哈,有點少是吧,不是咱們的重點,來看下麵的表操作~~~

二 表操作

1、存儲引擎

    存儲引擎即表類型,mysql根據不同的表類型會有不同的處理機制,關於存儲引擎的介紹看我這篇博客:https://www.cnblogs.com/changxin7/p/11525457.html

2、表介紹

    表相當於文件,表中的一條記錄就相當於文件的一行內容,表中的一條記錄有對應的標題,稱為表的欄位

    img

    第一行的id、name2、age是欄位,,其餘的,一行內容稱為一條記錄。

3、創建表

    3.1 建表語法   

#語法:
create table 表名(
欄位名1 類型[(寬度) 約束條件],
欄位名2 類型[(寬度) 約束條件],
欄位名3 類型[(寬度) 約束條件]
);

#註意:
1. 在同一張表中,欄位名是不能相同
2. 寬度和約束條件可選、非必須,寬度指的就是欄位長度約束,例如:char(10)裡面的10
3. 欄位名和類型是必須的
mysql> create database db1 charset utf8;

mysql> use db1;

mysql> create table t1(  
    -> id int, 
    -> name varchar(50),
    -> sex enum('male','female'),
    -> age int(3)
    -> );

mysql> show tables; #查看db1庫下所有表名

mysql> desc t1;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(50)           | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+

mysql> select id,name,sex,age from t1;
Empty set (0.00 sec)

mysql> select * from t1;
Empty set (0.00 sec)

mysql> select id,name from t1;
Empty set (0.00 sec)
mysql> insert into t1 values
    -> (1,'chao',18,'male'),
    -> (2,'sb',81,'female')
    -> ;
mysql> select * from t1;
+------+------+------+--------+
| id   | name | age  | sex    |
+------+------+------+--------+
|    1 | chao |   18 | male   |
|    2 | sb |   81 | female |
+------+------+------+--------+



mysql> insert into t1(id) values 
    -> (3),
    -> (4);
mysql> select * from t1;
+------+------+------+--------+
| id   | name | age  | sex    |
+------+------+------+--------+
|    1 | chao |   18 | male   |
|    2 | sb |   81 | female |
|    3 | NULL | NULL | NULL   |
|    4 | NULL | NULL | NULL   |
+------+------+------+--------+

4、查看表結構

mysql> describe t1; #查看表結構,可簡寫為:desc 表名
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(50)           | YES  |     | NULL    |       |
| sex   | enum('male','female') | YES  |     | NULL    |       |
| age   | int(3)                | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+


mysql> show create table t1\G; #查看表詳細結構,可加\G

5、MySQL的基礎數據類型

    關於數據類型,看我這篇博客:https://www.cnblogs.com/changxin7/p/11528101.html

6、表的完整性約束

    關於表的完整性約束,看我這篇博客:https://www.cnblogs.com/changxin7/p/11535976.html

    

7、修改表 alter table

    下麵的內容就不帶著大家演示了,簡單帶大家看一下,都是固定的語法格式,按照這個寫就行了,毫無邏輯可言,所以不做太多的演示,大家自己回去練一下:

    

語法:
1. 修改表名
      ALTER TABLE 表名 
                          RENAME 新表名;

2. 增加欄位
      ALTER TABLE 表名
                          ADD 欄位名  數據類型 [完整性約束條件…], #註意這裡可以通過逗號來分割,一下添加多個約束條件
                          ADD 欄位名  數據類型 [完整性約束條件…];
      ALTER TABLE 表名
                          ADD 欄位名  數據類型 [完整性約束條件…]  FIRST; #添加這個欄位的時候,把它放到第一個欄位位置去。
      ALTER TABLE 表名
                          ADD 欄位名  數據類型 [完整性約束條件…]  AFTER 欄位名;#after是放到後的這個欄位的後面去了,我們通過一個first和一個after就可以將新添加的欄位放到表的任意欄位位置了。
                            
3. 刪除欄位
      ALTER TABLE 表名 
                          DROP 欄位名;

4. 修改欄位
      ALTER TABLE 表名 
                          MODIFY  欄位名 數據類型 [完整性約束條件…];
      ALTER TABLE 表名 
                          CHANGE 舊欄位名 新欄位名 舊數據類型 [完整性約束條件…];  #change比modify還多了個改名字的功能,這一句是只改了一個欄位名
      ALTER TABLE 表名 
                          CHANGE 舊欄位名 新欄位名 新數據類型 [完整性約束條件…];#這一句除了改了欄位名,還改了數據類型、完整性約束等等的內容

    給一個欄位添加外鍵屬性的語句:alter table 表2名 add foreign key(表2的一個欄位) references 表1名(表1的一個欄位);

    註意一點:在mysql裡面表名是不區分大小寫的,如果你將一個名為t1的(小寫的t1)改名為一個T1(大寫的T1),是完全沒用的,因為在資料庫裡面表名都是小寫的。

示例:
1. 修改存儲引擎
mysql> alter table service 
    -> engine=innodb;

2. 添加欄位
mysql> alter table student10
    -> add name varchar(20) not null,
    -> add age int(3) not null default 22;
    
mysql> alter table student10
    -> add stu_num varchar(10) not null after name;                //添加name欄位之後

mysql> alter table student10                        
    -> add sex enum('male','female') default 'male' first;          //添加到最前面

3. 刪除欄位
mysql> alter table student10
    -> drop sex;

mysql> alter table service
    -> drop mac;

4. 修改欄位類型modify
mysql> alter table student10
    -> modify age int(3);
mysql> alter table student10
    -> modify id int(11) not null primary key auto_increment;    //修改為主鍵

5. 增加約束(針對已有的主鍵增加auto_increment)
mysql> alter table student10 modify id int(11) not null primary key auto_increment;
ERROR 1068 (42000): Multiple primary key defined

mysql> alter table student10 modify id int(11) not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

6. 對已經存在的表增加複合主鍵
mysql> alter table service2
    -> add primary key(host_ip,port);        

7. 增加主鍵
mysql> alter table student1
    -> modify name varchar(10) not null primary key;

8. 增加主鍵和自動增長
mysql> alter table student1
    -> modify id int not null primary key auto_increment;

9. 刪除主鍵
a. 刪除自增約束
mysql> alter table student10 modify id int(11) not null; 

b. 刪除主鍵
mysql> alter table student10                                 
    -> drop primary key;

    img

8、複製表

    

    我們通過select查詢出來的結果既有表結構又有表記錄(數據),我們在重新創建一個和它一樣的表的時候,之前用create還需要自己將表結構寫好,然後把那些數據插入到新建的表中,很麻煩,那麼我們就可以直接使用mysql提供的複製表的功能:(複製表用的很少昂,瞭解一下就行了)

    語法:複製表結構+記錄 (key不會複製: 主鍵、外鍵和索引)
    mysql> create table new_service select * from service;#這句話的意思是你從service表裡面查詢出來的數據不要在屏幕上列印了,你直接給我的新表new_service

    我們自己寫個例子:

      img

      雖然我們不能複製key,但是我們可以給他加回去啊:alter table xxx

      img

    只複製表結構,不要數據
    mysql> select * from service where 1=2; //條件為假,查不到任何記錄,所以我們可以通過它來只複製表結構,看下麵一句
    Empty set (0.00 sec)
    mysql> create table new1_service select * from service where 1=2; #篩選數據的條件為假,那麼只拿到了結構,並沒有查詢出任何的數據,所以做到了只複製表結構
    Query OK, 0 rows affected (0.00 sec)
    Records: 0 Duplicates: 0 Warnings: 0

    mysql> create table t4 like employees; #獲取用like可以達到這個效果


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

-Advertisement-
Play Games
更多相關文章
  • 這三個不同的數據模型之間既相互獨立,又存在著關聯。從現實世界到概念 模型的轉換是由資料庫設計人員完成的;從概念模型到邏輯模型的轉換可以 由資料庫設計人員完成,也可以用資料庫設計工具協助設計人員完成;從邏 輯模型到物理模型的轉換主要是由資料庫管理系統完成的。 ...
  • [20190918]shrink space與ORA-08102錯誤.txt1.環境:SCOTT@test01p> @ ver1PORT_STRING VERSION BANNER CON_ID IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c ...
  • 1、將命令寫在文件中 數據量比較大的話,建議用程式去生成文件。例如: 生成的文件可能是這樣的: 接下來,命令行執行 這個例子比較簡單,可以這麼做,如果命令比較多的話可以寫成shell腳本 2、grep命令 ...
  • 記錄工作中遇到的問題,分享出來: 原博客地址:https://blog.csdn.net/weixin_40782680/article/details/85038281 今天遇到一個比較鬱悶的問題,如下圖: 點擊庫存或者點擊銷售,查詢數據很慢,有的將近幾十秒,查詢數據用的是存儲過程,在資料庫中執行 ...
  • sqlserver存儲過程入門 1. 輸入/輸出參數定義 @object_name varchar(50) //定義一個varchar類型的輸入參數 @object_index int @isUpdate int =0 output //定義一個輸出參數 2.游標使用步驟 1、定義游標 DECLAR ...
  • Windows下Redis安裝配置和使用註意事項 一:下載 下載地址: https://github.com/microsoftarchive/redis/releases 文件介紹: 本文以3.2.100為例 Redis-x64-3.2.100.msi是在windows下,最簡單的安裝文件,方便, ...
  • Redis 事務 == [toc] Redis操作時支持事務的。事務具有原子性atomic,包含在事務中的操作要麼都執行成功,要麼都執行失敗。但是redis不支持回滾,但是可以在測試開發環節避免錯誤操作。可以說原子性上是半支持的,看後面原因。 很多時候我們需要進行事務操作。 翻譯官檔:https:/ ...
  • 本來這一節想寫Hadoop的分散式高可用環境的搭建,寫到一半,發現還是有必要先介紹一下ZooKeeper這個東西。 ZooKeeper理念介紹 ZooKeeper是為分散式應用來提供協同服務的,而且ZooKeeper本身也是分散式的,由分佈在至少三台機器上,這幾台機器形成一個Quorum,就像一個劇 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...