MySQL資料庫之列屬性
阿新 • • 發佈:2020-12-15
列屬性
是否為空
- 是否為空
- null 表示欄位值可以為null
- not null欄位值不能為空
預設值
- 預設值
- 如果一個欄位沒有插入值,可以預設插入一個指定的值
default
關鍵字用來插入預設值
mysql> create table stu19( -> name varchar(20) not null default '姓名不詳', -> addr varchar(50) not null default '地址不詳' -> ); # `Query OK, 0 rows affected (0.05 sec)` mysql> insert into stu19(name) values ('tom'); # `Query OK, 1 row affected (0.00 sec)` mysql> insert into stu19 values (default,default); # `Query OK, 1 row affected (0.00 sec)` mysql> select * from stu19; +----------+----------+ | name | addr | +----------+----------+ | tom | 地址不詳 | | 姓名不詳 | 地址不詳 | +----------+----------+ # `2 rows in set (0.00 sec)`
自動增長
- 自動增長
- 欄位值從1開始,每次遞增1,自動增長的值就不會有重複,適合用來生成唯一的id
- 在MySQL中只要是自動增長列必須是主鍵
auto_increment
關鍵字用來設定自動增長
主鍵
-
概念
- 唯一標識表中的記錄的一個或一組列稱為主鍵
primary key
關鍵字用來設定主鍵
-
特點
- 不能重複、不能為空
- 一個表只能有一個主鍵
-
作用
- 保證資料完整性
- 加快查詢速度
-
原則
- 最少性:儘量選擇單個鍵作為主鍵
- 穩定性:儘量選擇數值更新少的列作為主鍵
- 比如:
學號 姓名 地址
這三個欄位都不重複- 選哪個做主鍵?
- 選學號,因為學號最穩定
-
應用
- 只要是auto_increment必須是主鍵,但是主鍵不一定是auto_increment
- 主鍵特點是不能重複不能為空
- 一個表只能有一個主鍵,但是一個主鍵可以有多個欄位組成
- 自動增長列通過插入null值讓其遞增
- 自動增長列的資料被刪除,預設不再重複使用。
- truncate table刪除資料後(清空表格),再次插入從1開始
-
練習
- 在主鍵列輸入的數值,允許為空嗎?
false
- 一個表可以有多個主鍵嗎?
false
- 在一個學校資料庫中,如果一個學校內允許重名的學員,但是一個班級內不允許學員重名,可以組合班級和姓名兩個欄位一起來作為主鍵嗎?
true
- 標識列(自動增長列)允許為字元資料型別嗎?
false
- 一個自動增長列中,插入3行,刪除2行,插入3行,刪除2行,插入3行,刪除2行,再次插入是多少?
10
- 在主鍵列輸入的數值,允許為空嗎?
建立主鍵
mysql> create table stu20(
-> id int auto_increment primary key,
-> name varchar(20)
-> );
# `Query OK, 0 rows affected (0.04 sec)`
mysql> create table stu21(
-> id int auto_increment,
-> name varchar(20),
-> primary key(id)
-> );
# `Query OK, 0 rows affected (0.02 sec)`
建立組合主鍵
mysql> create table stu22(
-> classname varchar(20),
-> stuname varchar(20),
-> primary key(classname,stuname)
-> );
# `Query OK, 0 rows affected (0.00 sec)`
mysql> desc stu22;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| classname | varchar(20) | NO | PRI | | |
| stuname | varchar(20) | NO | PRI | | |
+-----------+-------------+------+-----+---------+-------+
# `2 rows in set (0.00 sec)`
更改表新增主鍵
-- 建立表
mysql> create table stu23(
-> id int,
-> name varchar(20)
-> );
# `Query OK, 0 rows affected (0.05 sec)`
-- 新增主鍵
mysql> alter table stu23 add primary key(id);
# `Query OK, 0 rows affected (0.09 sec)`
# `Records: 0 Duplicates: 0 Warnings: 0`
刪除主鍵
mysql> alter table stu23 drop primary key;
# `Query OK, 0 rows affected (0.03 sec)`
# `Records: 0 Duplicates: 0 Warnings: 0`
插入資料
mysql> create table stu25(
-> id tinyint unsigned auto_increment primary key,
-> name varchar(20)
-> );
# `Query OK, 0 rows affected (0.05 sec)`
-- 插入資料
mysql> insert into stu25 values (3,'tom'); -- 可以直接插入數字
# `Query OK, 1 row affected (0.06 sec)`
-- 自動增長列可以插入null,讓列的值自動遞增
mysql> insert into stu25 values (null,'berry');
# `Query OK, 1 row affected (0.00 sec)`
唯一鍵
-
唯一鍵與主鍵的區別
- 主鍵
- 不能重複,不能為空
- 一個表只能有一個主鍵
- 唯一鍵
- 不能重刻,可以為空
- 一個表可以有多個唯一鍵
- 主鍵
-
關鍵字
unique
unique key
建立唯一鍵
mysql> create table stu26(
-> id int auto_increment primary key,
-> name varchar(20) unique
-> );
# `Query OK, 0 rows affected (0.05 sec)`
mysql> create table stu27(
-> id int primary key,
-> name varchar(20),
-> unique(name)
-> );
# `Query OK, 0 rows affected (0.05 sec)`
修改表新增唯一鍵
-- 將name設為唯一鍵
mysql> alter table stu28 add unique(name);
-- 將name,addr設為唯一鍵
mysql> alter table stu28 add unique(name),add unique(addr);
# `Query OK, 0 rows affected (0.00 sec)`
# `Records: 0 Duplicates: 0 Warnings: 0`
mysql> desc stu28;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | UNI | NULL | |
| addr | varchar(20) | YES | UNI | NULL | |
+-------+-------------+------+-----+---------+-------+
# `3 rows in set (0.02 sec)`
檢視唯一鍵的名
mysql> show create table stu28\G;
通過唯一鍵的名字刪除唯一鍵
mysql> alter table stu28 drop index name;
# `Query OK, 0 rows affected (0.00 sec)`
# `Records: 0 Duplicates: 0 Warnings: 0`
備註
- 備註
- 說明性文字
- 備註屬於SQL程式碼的一部分
- 通過關鍵字comment設定
mysql> create table stu29(
-> id int primary key comment '學號',
-> name varchar(20) not null comment '姓名'
-> );
# `Query OK, 0 rows affected (0.03 sec)`