1. 程式人生 > 實用技巧 >MySQL系列——2020.7.21——更新至“唯一約束”

MySQL系列——2020.7.21——更新至“唯一約束”

一天學會My SQL

1 基本操作

1.1 登入與退出資料庫

開啟 cmd 輸入命令

mysql -uroot -p123456

退出 以下三種命令

\q
quit
exit

1.2 三種命令狀態

-> 當前命令為等待確認狀態
'> 輸入的命令缺少單引號
"> 輸入的命令缺少雙引號

1.3 查詢資料庫命令

show databases;

2 表的操作

2.1 基本概念

  • 記錄 元組 就是一行
  • 欄位 一列就是一個欄位
    • 每個欄位是一個屬性
    • 每個欄位都有相應的描述資訊:欄位名/資料型別/資料寬度/數值型資料的小數位

2.2 建立表的語句

建立表的過程就是建立表名和欄位的過程

Creat table 表名(

	屬性名 資料型別 [約束條件],

	屬性名 資料型別 [約束條件],

	屬性名 資料型別 [約束條件]

)
  • 約束條件可選
  • 最後一個屬性沒有逗號
2.2.1 【例項】建立第一張表 student

務必要在某庫下建立,否則報錯1406

  • 要求欄位:姓名、學號、性別、年齡

2.3 查詢表

SELECT * FROM student;

3 MySQL資料型別

3.1 數值型

型別 大小 範圍(有符號) 範圍(無符號) 用途
TINYINT 1 byte (-128,127) (0,255) 小整數值
SMALLINT 2 bytes (-32 768,32 767) (0,65 535) 大整數值
MEDIUMINT 3 bytes (-8 388 608,8 388 607) (0,16 777 215) 大整數值
INT或INTEGER 4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整數值
BIGINT 8 bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數值
FLOAT 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 單精度 浮點數值
DOUBLE 8 bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 雙精度 浮點數值
DECIMAL 對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2 依賴於M和D的值 依賴於M和D的值 小數值

3.2 時間、日期

型別 大小 ( bytes) 範圍 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 時間值或持續時間
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和時間值
TIMESTAMP 4 1970-01-01 00:00:00/2038結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和時間值,時間戳

3.3 字串

型別 大小 用途
CHAR 0-255 bytes 定長字串
VARCHAR 0-65535 bytes 變長字串
TINYBLOB 0-255 bytes 不超過 255 個字元的二進位制字串
TINYTEXT 0-255 bytes 短文字字串
BLOB 0-65 535 bytes 二進位制形式的長文字資料
TEXT 0-65 535 bytes 長文字資料
MEDIUMBLOB 0-16 777 215 bytes 二進位制形式的中等長度文字資料
MEDIUMTEXT 0-16 777 215 bytes 中等長度文字資料
LONGBLOB 0-4 294 967 295 bytes 二進位制形式的極大文字資料
LONGTEXT 0-4 294 967 295 bytes 極大文字資料

用法:


4 資料完整性

資料完整性是指儲存在資料庫中的資料應該保持準確性和可靠性。如果出現學號相同的資料是不準確的。

完整性 實施物件
實體完整性 關係中的記錄唯一性、定義表中所有行能唯一的標識、主屬性不能為NULL且不能有相同值、一般用主鍵、唯一索引、unique關鍵字實現
域完整性
參照完整性
自定義完整性 /////

4.1 實體完整性

4.1.1 主鍵約束(非NULL)

主關鍵字(primary key)就是主鍵,它是表中的一個或多個欄位,它是值用於唯一表示某條記錄

建立表時指定主鍵

案例:

建立student表,主鍵為學號

  • 手動方式:

    • 在navicat的設計表中,右擊目標欄位,點選主鍵
  • 程式碼方式

    • 案例如下

    • CREATE TABLE student
      (
      	id INT(10) PRIMARY KEY, //這裡的primary key字尾就是指定該欄位為主鍵
      	sname VARCHAR(5)
      );
      
4.1.1 修改主鍵約束

通過ALTER語句可以實現對錶的主鍵約束脩改

4.1.1.1 增

方式一 ADD

ALTER TABLE t_user ADD	PRIMARY KEY(user_id);

方式二 ADD CONSTRAINT PK_ID

ALTER TABLE t_user
ADD CONSTRAINT PK_ID PRIMARY KEY(user_id);

方式三 MODIFY

ALTER TABLE t_user MODIFY user_id INT(10) PRIMARY_KEY
4.1.1.2 刪

DROP關鍵字

ALTER TABLE t_user DROP PRIMARY KEY;

4.1.2 唯一約束(可NULL)

用來限制不受主鍵約束,但是仍需要限制唯一性的欄位,一個表可以有多個唯一約束

唯一約束的作用物件可以是單一欄位,也可以是多個欄位組合

唯一約束名稱預設和欄位名相同

MySQL會給唯一約束的欄位預設建立唯一索引

4.1.2.1 建立唯一約束
4.1.2.1.1 自定義約束名

使用constarint關鍵字

4.1.2.1.2 組合唯一約束

unique(A,B)可對AB進行新增組合唯一約束

constarint uk_name_pwd unique(username,passwrod)

以上程式碼段是使用constarint關鍵字對username和password新增名為uk_name_pwd的組合唯一約束

4.1.2.1.3 建立唯一約束例項
  • 給teach的id新增非空約束

  • 給teach的username和password新增名為uk_name_pwd的組合唯一約束

  • 建表完成後給id新增主鍵約束

CREATE TABLE teach
(
	id INT NOT NULL,
	username VARCHAR(10),
	password VARCHAR(16),
	CONSTARINT uk_name_pwd UNIQUE(username,password)
);
ALTER TABLE teach ADD PRIMARY KEY(id);
4.1.2.1.4 新增唯一約束
alter table temp add unique(name,id);

or

alter table temp modify name varchar(25) unique;

4.1.2.1.4 刪除約束
alter table temp drop index name;