1. 程式人生 > >MySql 表的約束、欄位值自動增加

MySql 表的約束、欄位值自動增加

@author StormWangxhu
@data  2017/11/21

(一)資料表的約束

1、約束目的: 為了防止資料庫中插入錯誤的資料。
在設計資料庫時,為了確保資料庫表中資料的質量,需要考慮資料的完整性(資料的完整性是指資料的正確性和一致性)。舉個例子:當你要為學生建立一個基本資訊表StudentInfo時,這個表中學生的名字可以相同但是學號必須不一樣,而他的年齡也得限制在一定範圍內,像這樣類似的“限制”有很多,如果違反了這些限制就製造了與現實不符的失真資料即破壞了資料的完整性。因為資料庫不能自行判斷哪些資料失真,所以需要認為新增一些約束來保證資料的完整性。
2、約束條件:
資料庫中對錶的約束有五種:
–1.主鍵約束(Primary Key constraint):主鍵列資料唯一,並且不允許為空。
主鍵是表中的一列或一組列,它們的值可以唯一地標識表中的每一行。

–2.唯一約束(Unique constraint):該列資料唯一,允許為空,但只能出現一個空值(不重複性)。
唯一性約束保證了除主鍵外的其他一個或一組列的資料具有唯一性,以防止在列中輸入重複的值。(一個表只可以有一個主鍵約束,如果其它列也不希望有重複就可以使用唯一性約束。)

–3.檢查約束(Check constraint):範圍限制、格式限制
檢查約束使指定表中一列或一組列可以接受的資料值或格式。

–4.預設約束(Default constraint):
為指定列定義一個預設值。在輸入資料時,如果沒有輸入該列的值,則將該列的值設定為預設值。

5.外來鍵約束(Foreign Key constraint):表間約束,確保資料的參照完整性
將當前表中的某一列或一組列關聯到另一個表的主鍵列,可建立兩個表之間的連線。當前表中的列就成為外來鍵。外來鍵涉及到兩個表,一個主表,一個從表 ,主表中的外來鍵是從表中的主鍵

1121.1 主鍵約束

作用: 為了快速查詢表中的某條資訊,可以通過設定主鍵來實現。
方式: primary key 定義,唯一標示表中的記錄,好比身份證。

  • 單欄位主鍵

    基本語法

欄位名   資料型別 primary key 

這裡寫圖片描述

  • 多欄位主鍵
    基本語法
primary key(欄位名1,欄位名2...欄位名n)

說明: 欄位名1,欄位名2等指的是構成主鍵的多個欄位的名稱。
這裡寫圖片描述

注意:
每一個數據表中最多隻能有一個主鍵約束,定義為primary key 的欄位不能有重複,且不能為空!

1121.2 非空約束

基本語法:

欄位名  資料型別   not
null

這裡寫圖片描述

非空約束指的是欄位值不能為空

1121.3 唯一約束

唯一約束用於保證資料表中欄位的唯一性,即表中的欄位的值不能重複出現。
基本語法

欄位名   資料型別   unique  ;

這裡寫圖片描述

說明:
id 欄位為主鍵
stu_id 欄位為唯一值,該欄位不能有重複值。
grade 欄位的值有預設值 0。

1121.4 預設約束

基本語法:

欄位名   資料型別   default  預設值  ;

(二)設定表的欄位值會自動增加

定義:
若為表中插入的新紀錄自動生成一個唯一的ID,可以使用 auto increment 約束實現。

基本語法:

欄位名   資料型別   auto_increment ;

這裡寫圖片描述

說明: ID欄位 為主鍵,且每插入一條新紀錄,id值會自動增加。

相關推薦

MySql 約束自動增加

@author StormWangxhu @data 2017/11/21 (一)資料表的約束 1、約束目的: 為了防止資料庫中插入錯誤的資料。 在設計資料庫時,為了確保資料庫表中資料的質量,需要考慮資料的完整性(資料的完整性是指資料的正確性和一致

MySql名區分大小寫

mysql server有個引數叫做 lower_case_table_names,控制表名、欄位名的大小寫 它可以有3個值: 0: 大小寫敏感 1:比較名字時 忽略大小寫,但建立表時,大寫字母也轉為小寫字母。 2:比較名字時 忽略大小寫,建立表時,維持原樣。

oracle 實現中某個自動增加(相當於有些資料庫的自增列)

說明:sqlserver 中設定某個列的自動增加是非常容易的,只需要在列後面加上 auto_increment即可,但是oracle在使用sql語句建立表時時不支援這種自增的。 那麼要實現自增列怎麼辦? 三步搞定 --1.建立表----- CREATE TABLE use

mysql中檢視所有表字段註釋註釋

mysql中檢視所有表、表字段、表註釋、欄位註釋 檢視所有表和表註釋 select TABLE_NAME, TABLE_COMMENT from INFORMATION_SCHEMA.Tables where table_schema = '某資料庫名稱' I

MySQL將一個的某個更新到另外一張

今天,遇到一個需求是要將MySQL的一個表中的欄位更新到另一個表中,開始,我嘗試用以下的SQL解決:   UPDATE t_order_temp SET price=t_order.amount  FROM t_order WHERE t_order_temp

SQL Server 動態行轉列(引數化分組列行轉列

一.本文所涉及的內容(Contents) 二.背景(Contexts)   其實行轉列並不是一個什麼新鮮的話題了,甚至已經被大家說到爛了,網上的很多例子多多少少都有些問題,所以我希望能讓大家快速的看到執行的效果,所以在動態列的基礎上再把表、分組欄位、行轉列欄位、值這四個行轉列固定需要的值變成真正意義的

MYSQL: 加一並對現有記錄賦

加欄位SQL: alter table tasktemplate add TaskType varchar(60);給新加欄位賦值:update tasktemplate set TaskType='AUTOTEST';註釋:給表tasktemplate 加一欄位 T

MySQL資料庫中庫的大小寫問題

在使用MySQL建庫的過程中發現了一個問題,無論怎麼建立庫,創建出來的庫名都是小寫的。然後上網查了一下資料。 在MySQL中,資料庫和表都是對應目錄下的一個或多個檔案。因此,作業系統的大小寫是否敏感

MSSQL和MySQL中,資料兩列互換的問題

MSSQL的處理方法 update table1 set field_1 = field_2, field_2 = field_1 可是MySQL就不能這樣寫,不然一列會覆蓋另一列記錄 MySQL語句如下 update table1 a, table1

oracle中檢視所有註釋註釋

oracle中檢視所有表、欄位、表註釋、欄位註釋 檢視所有表 select table_name from user_tables; //檢視當前使用者擁有的表 select table_name from all_tables; //檢視所有使用者

SQL SERVER新增註釋註釋

--為欄位添加註釋 --Eg. execute sp_addextendedproperty 'MS_Description','欄位備註資訊','user','dbo','table','欄位所屬的表名','column','添加註釋的欄位名'; execute sp_addextendedpro

sql server 新增註釋註釋

--為欄位添加註釋  --格式如右:execute sp_addextendedproperty 'MS_Description','欄位備註資訊','user','dbo','table','欄位所屬的表名','column','添加註釋的欄位名'; execute sp_ad

MySQL 查詢表中某個重複的記錄

MySQL中,查詢表(dat_bill_2018_11)中欄位(product_id)值重複的記錄: SELECT product_id, COUNT(*) AS COUNT FROM dat_bill_201811 GROUP BY product_id HAVING COUNT > 1;

檢視文章 mysql:註釋和註釋

1 建立表的時候寫註釋 create table test1 (     field_name int comment '欄位的註釋' )comment='表的註釋'; 2 修改表的註釋 alter table test1 comment '修改後的表的註釋'

oracle名等物件的命名長度限制

原創作品,出自 “深藍的blog” 部落格,歡迎轉載,轉載時請務必註明出處,否則追究版權法律責任。 今天在為某系統資料庫結構整理升級指令碼時,遇到了“命名位元組過長的錯誤”,類似於下面的截圖語句:         由於升級的結構中對於欄位名的命名根據業務進行了修改,出現

postgresql獲取結構,註釋型別及長度和註釋(轉載)

轉載地址:https://blog.csdn.net/weixin_38924323/article/details/80982760 場景描述:navicate 將postgresql表結構匯出到Excel。 1、查詢表名和表註釋 select relna

如何獲取SQL Server所有的資料庫名名及型別?

解決方案 – 獲取所有資料庫名 select name from master..sysdatabases – 獲取所有表名 select name from YDK..

需求:MYSQL中一個用逗號分隔,需要查出來split拆分並依次存入另一個的一個

 需求:表中一個欄位用逗號分隔,需要查出來split拆分並依次存入另一個表的一個欄位中 假設問題是這丫那個的,table1中id=2的name值為'xiaoming,xiaohua,xiaowang,xiaohui',我們要取出這個name欄位值,並且根據逗號拆分出來,

MYSQL】判斷某個是否包含於某個字串中

SQL函式:INSTR(str1,str2);  //mysql中的語法似乎只支援2個引數 引數說明:str1:在這個字串中查詢、str2:欄位值 舉個例子:查詢出名字在字串“張三王五朱六”出現的記錄 表資料:

Oracle 查詢庫中所有名說明,查詢表的資料條數中文

查詢所有表名: select t.table_name from user_tables t; 查詢所有欄位名: select t.column_name from user_col_comments t; 查詢指定表的所有欄位名: select t.column_nam