改資料庫鍵值
Ⅰ sql的鍵值類型的主屬性怎麼設置
sql的鍵值類型的主屬性怎麼設置?sql要怎麼設置主鍵呢?本文以sql server資料庫為例,講解幾種設置方式:
1)新建表時設置主鍵
2)修改表主鍵
3)sql語句刪除主鍵
4)sql語句添加主鍵
5)sql語句修改主鍵
方法/步驟分步閱讀
1
/8
打開【SQL Server Management Studio】管理工具,連接資料庫
2
/8
【新建表時設置主鍵】- 打開新建表界面
1)展開要新建表的資料庫
2)右鍵【表】菜單,依次選擇【新建】->【表】
3
/8
【新建表時設置主鍵】- 設置主鍵
1)在「新建表界面」,加入兩個測試列的行
2)選擇任何一行,右鍵選擇【設置主鍵】
3)聯合主鍵設置:按住ctrl鍵,配合滑鼠左鍵,可以多選幾行,然後右鍵選擇【設置主鍵】
4)添加列後,點擊【保存】按鈕,在彈出框中輸入「表名稱」,點擊確定按鈕即可
4
/8
【修改表主鍵】- 打開設計表界面
右鍵選擇要修改的表,選擇【設計】菜單,即可打開此表的設計界面,此時,可以修改列名、列類型、長度等等
5
/8
【修改表主鍵】- 修改主鍵
1)在「表設計」界面,右鍵任何一行,選擇「設置主鍵」
2)調整好表屬性後,點擊「保存」按鈕即可
3)聯合主鍵設置:按住ctrl鍵,配合滑鼠左鍵,可以多選幾行,然後右鍵選擇【設置主鍵】
4)對於有數據的表,如果修改後的主鍵存在數據重復行,則會提示修改失敗,此時,需要視具體業務場景刪除重復記錄或者更改另外的列作為主鍵
6
/8
【sql語句刪除主鍵】
1)點擊sql server管理工具的菜單【新建查詢】,打開查詢窗口
2)在查詢窗口中輸入截圖的命令刪除主鍵
ALTER TABLE 表名 DROP CONSTRAINT [鍵名];
7
/8
【sql語句添加主鍵】
1)點擊sql server管理工具的菜單【新建查詢】,打開查詢窗口
2)在查詢窗口中輸入截圖的命令添加主鍵
ALTER TABLE 表名 ADD CONSTRAINT 鍵名 PRIMARY KEY ( 列名,多個列名用逗號分隔 );
3)添加主鍵之前,如果該表原來有主鍵,需要先刪除主鍵,再添加,就等同於修改主鍵了
8
/8
【sql語句修改主鍵】
1)點擊sql server管理工具的菜單【新建查詢】,打開查詢窗口
2)在查詢窗口中輸入截圖的命令修改主鍵
3)如果表存在主鍵,需要先刪除原主鍵。
Ⅱ Hive 資料庫表的基本操作,必須掌握的基本功
說明:hive 的表存放位置模式是由 hive-site.xml 當中的一個屬性指定的,默認是存放在該配置文件設置的路徑下,也可在創建資料庫時單獨指定存儲路徑。
資料庫有一些描述性的屬性信息,可以在創建時添加:
查看資料庫的鍵值對信息
修改資料庫的鍵值對信息
與mysql查詢語句是一樣的語法
刪除一個空資料庫,如果資料庫下面有數據表,那麼就會報錯
強制刪除資料庫,包含資料庫下面的表一起刪除(請謹慎操作)
[]里的屬性為可選屬性,不是必須的,但是如果有可選屬性,會使 sql 語句的易讀性更好,更標准與規范。
例如:[comment '欄位注釋信息'][comment '表的描述信息']等,[external]屬性除外
1. CREATE TABLE
創建一個指定名字的表,如果相同名字的表已存在,則拋出異常提示:表已存在,使用時可以使用IF NOT EXISTS語句來忽略這個異常。
如果創建的表名已存在,則不會再創建,也不會拋出異常提示:表已存在。否則則自動創建該表。
2. EXTERNAL
顧名思義是外部的意思,此關鍵字在建表語句中讓使用者可以創建一個外部表,如果不加該關鍵字,則默認創建內部表。
外部表在創建時必須同時指定一個指向實際數據的路徑(LOCATION),Hive在創建內部表時,會將數據移動到數據倉庫指向的路徑;
若創建外部表,僅記錄數據所在的路徑,不對數據的位置作任何改變。
內部表在刪除後,其元數據和數據都會被一起刪除。
外部表在刪除後,只刪除其元數據,數據不會被刪除。
3. COMMENT
用於給表的各個欄位或整張表的內容作解釋說明的,便於他人理解其含義。
4. PARTITIONED BY
區分表是否是分區表的關鍵欄位,依據具體欄位名和類型來決定表的分區欄位。
5. CLUSTERED BY
依據column_name對表進行分桶,在 Hive 中對於每一張表或分區,Hive 可以通過分桶的方式將數據以更細粒度進行數據范圍劃分。Hive採用對列值哈希,然後除以桶的個數求余的方式決定該條記錄存放在哪個桶當中。
6. SORTED BY
指定表數據的排序欄位和排序規則,是正序還是倒序排列。
7. ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
指定表存儲中列的分隔符,這里指定的是' ',也可以是其他分隔符。
8. STORED AS SEQUENCEFILE|TEXTFILE|RCFILE
指定表的存儲格式,如果文件數據是純文本格式,可以使用STORED AS TEXTFILE,如果數據需要壓縮,則可以使用STORED AS SEQUENCEFILE。
9. LOCATION
指定 Hive 表在 hdfs 里的存儲路徑,一般內部表(Managed Table)不需要自定義,使用配置文件中設置的路徑即可。
如果創建的是一張外部表,則需要單獨指定一個路徑。
1. 使用create table語句創建表
例子:
2. 使用create table ... as select...語句創建表
例子:
使用 create table ... as select ...語句來創建新表sub_student,此時sub_student 表的結構及表數據與 t_student 表一模一樣, 相當於直接將 t_student 的表結構和表數據復制一份到 sub_student 表。
注意:
(1). select 中選取的列名(如果是 * 則表示選取所有列名)會作為新表 sub_student 的列名。
(2). 該種創建表的方式會改變表的屬性以及結構,例如不能是外部表,只能是內部表,也不支持分區、分桶。
如果as select後的表是分區表,並且使用select *,則分區欄位在新表裡只是作為欄位存在,而不是作為分區欄位存在。
在使用該種方式創建時,create 與 table 之間不能加 external 關鍵字,即不能通過該種方式創建外部目標表,默認只支持創建內部目標表。
(3). 該種創建表的方式所創建的目標表存儲格式會變成默認的格式textfile。
3.使用like語句創建表
例子:
注意:
(1). 只是將 t_student 的表結構復制給 sub1_student 表。
(2). 並不復制 t_student 表的數據給 sub1_student 表。
(3). 目標表可以創建為外部表,即:
Ⅲ 關於資料庫存儲鍵值對的問題
這是前端(應用端)和後端(服務端)的問題,這個應該是每個用戶的單獨配置,那麼應該放在前端而是不是放在後端,如果放在後端,那麼每個用戶都要讀取,那麼體驗一定不好。
對於前端來說,只要加一個「配置文件」(其實就是一段代碼)就可以,然後通過服務端的程序讀取這個「配置文件」,就知道相應的順序了,這樣總比,連通伺服器讀取相應的表,來的要快。
如果非要用資料庫解決,那我們做一個假設,有100項,某人將所有的項目變成了從後往前倒著寫的,也就是第100項與第1項位置互換,第99項與第2項位置互換,這樣,那麼最後是第50項與第51項調換,也就是100項完全變換了位置,那麼不管你怎麼存儲,怎麼讀取,這些項都必須全部保存起來,因為每一項的順序都變了,所以這個方案並不是十分好。
當然,如果非要這么做的話,那麼有一個稍微簡單一點的辦法,不過也需要前端的配合而且,很可能出現徵用的情況,使用效果也不一定能太好。
我的辦法是建立userid 10001 10002 10003 這樣一張表,說白了就是一張以默認順序MoleID(個人覺得這個可能是你的表頭代碼,如果不是不要介意)為欄位名的表,然後每條用戶id,對應一組編號比如(默認編號為1,2,3,4):
userid 10001 10002 10003 10004
1 4 3 1 2
2 2 1 4 3
3 1 2 3 4
類似於這樣就能直接得到用戶的編號順序了,不過這種還是不如在前端一個配置文件來的舒服(用戶修改配置文件後,服務端也會備份(類似於上表這種也可以作為一個客戶端配置的備份),但是這種備份比直接修改資料庫要要省事不少,至少節省了資料庫的資源),而且可能出現徵用的問題,比如兩個人或更多的人同時修改代碼,那麼一張表不可能讓這么多人同時update,肯定要出現徵用,那麼服務體驗就不會太好(備份的話,不用那麼及時,所以徵用的可能性不大,即使出現也是發生在後端,用戶的體驗並沒有什麼影響)。
以上均為個人理解,共同探討。