1. 程式人生 > 其它 >MySql的初學習 -- 第五章 -- 瞭解約束

MySql的初學習 -- 第五章 -- 瞭解約束

技術標籤:MySql學習資料庫mysqlsql

MySql的初學習 -- 第五章 -- 瞭解約束


部落格說明

文章所涉及的資料來自網際網路整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯絡本人刪除,謝謝!

什麼是約束

  1. 約束的作用:
    對錶中的資料進行進一步的限制,從而保證資料的正確性、有效性、完整性. 違反約束的不正確資料,將無法插入到表中
  2. 常見的約束
約束名約束關鍵字
主鍵約束primary key
唯一約束unique
非空約束not null
外來鍵約束foreign key

主鍵約束

特點:不可重複、唯一、不可為空
作用:用來表示資料庫中的每一條資料(類似人的身份證,因此可以通過主鍵來找到相應的資料)

主鍵約束的新增與刪除

-- 方法一:建立表時新增主鍵
-- 格式:欄位名稱 欄位型別 PRIMARY KEY;
CREATE TABLE test1(
	id INT PRIMARY KEY,
	name VARCHAR(20)
);

-- 方法二:建立表時新增主鍵
-- 格式:PRIMARY KEY(欄位名稱);
CREATE TABLE test2(
id INT, name VARCHAR(20), PRIMARY KEY(id) ); -- 方法三:建立表之後,再新增主鍵 -- 通過DDL語句新增主鍵約束 #第一步,建立一個沒有主鍵的表 CREATE TABLE test3( id INT, name VARCHAR(20), ); #第二步,使用DDL語句新增主鍵約束 ALTER TABLE test3 ADD PRIMARY KEY(id); -- 刪除主鍵約束 -- 通過DDL語句刪除主要約束 -- 格式:ALTER TABLE 表名 DROP PRIMARY KEY; ALTER TABLE test3 DROP PRIMARY
KEY;

主鍵的自增 與 修改自增初始值

主鍵如果讓自己新增很有可能重複,通常希望在每次插入新記錄時,資料庫自動生成主鍵欄位的值.但主鍵的欄位型別必須是整數型別

-- 建立表時新增主鍵自增
-- 格式:欄位名稱 欄位型別 PRIMARY KEY AUTO_INCREMENT;
CREATE TABLE test1(
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20)
);

-- 修改自增的起始值(預設是1)
-- 重新建立自增主鍵的表,自定義自增的起始位置
-- 格式:在建表SQL後加上AUTO_INCREMENT = 開始位置;
CREATE TABLE test1(
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20)
)AUTO_INCREMENT = 100;

delete(DELETE)和truncate(TRUNCATE)對自增長的影響

方法執行流程
delete刪除表中資料,將表中的資料逐條刪除
truncate將整個表刪除後,重新建立一個結構相同的新表

結論

方法結果
delete對自增是沒有影響,刪除資料後自增不會恢復初始則會一直自增下去
truncate對自增有影響,刪除資料後自增會恢復初始,從初始值開始自增

非空約束

特點:不可為空
作用:用來約束資料不能為空

-- 建立表時新增非空約束
-- 格式:欄位名稱 欄位型別 NOT NULL;
CREATE TABLE test(
	id INT NOT NULL,
	name VARCHAR(20)
);

唯一約束

特點:不可重複
補充:對null值不做唯一判斷
作用:用來約束資料不能重複

-- 建立表時新增唯一約束
-- 格式:欄位名稱 欄位型別 UNIQUE;
CREATE TABLE test(
	id INT UNIQUE,
	name VARCHAR(20)
);

主鍵約束和唯一約束的區別

約束區別
主鍵約束唯一,且不能為空(null)
唯一約束唯一,但可以為空(null)
補充一個表中只能有一個主鍵約束,但可以有多個唯一約束

外來鍵約束

等到學習多表後附上鍊接

預設值

作用:如果資料為null時,預設給予的值

-- 格式:欄位名 欄位型別 DEFAULT 預設值
CREATE TABLE test(
	id INT PRIMARY KEY,
	name VARCHAR(20),
	sex CHAR(1) DEFAULT '男'
);

-- 使用預設值
INSERT INTO test(id,name) VALUE (1,"張三");
INSERT INTO test(id,name) VALUE (2,"李四");
-- 不使用預設值時,直接自定義值既可
INSERT INTO test VALUE (3,"小紅",'女');