MySQL系列——2020.7.21——更新至“唯一約束”
阿新 • • 發佈:2020-07-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;