博文大綱:
- 一、約束條件相關語句
- 主鍵約束
- 非空約束
- 設置值的唯一性
- 設置列的默認值
- 設置自增值
- 二、ALTER指令的使用
- 修改列值的數據長度
- 修改字段名
- 向表中插入一個新的字段
- 添加字段時添加約束
- 添加一個外鍵
- 刪除外鍵
- 刪除列
- 修改列的順序
- 刪除表
一、約束條件相關語句
1、主鍵約束(主鍵約束要求主鍵列的數據唯一,並且不允許爲空)
<!--創建庫-->
mysql> create database test01;
<!--切換至新庫-->
mysql> use test01;
<!--創建一個帶有主鍵約束的表-->
mysql> create table t1(
-> id int(10),
-> name varchar(10) primary key,
-> sex varchar(5),
-> info varchar(200)
-> );
確定創建的是否爲主鍵(該列是否有PRI字樣):
上述方法,是在定義列的同時定義主鍵,下面來寫一下定義完所有列之後指定主鍵:
mysql> create table t2(
-> id int(10),
-> name varchar(10),
-> sex varchar(5),
-> primary key(id)
-> );
確認是否有主鍵:
2、非空約束(不允許列的值爲空)
mysql> create table t3(
-> id int(6) not null,
-> name varchar(10)
-> );
查看錶信息確認:
3、設置值的唯一性(不允許重複數據,可以爲空,但只能有一個空,否則就會被視爲重複)
mysql> create table t7(
-> id int not null unique,
-> name varchar(20)
-> );
查看其表結構:
可以看到其被標識爲了主鍵,但是在創建時並沒有指定它是主鍵,而是這一列的屬性基本滿足了主鍵的要求,如唯一、不可以爲空。
4、設置列的默認值(如果該列爲空,則寫入默認值)
mysql> create table t4(
-> id int(2) not null,
-> name varchar(20),
-> project varchar(20) default 'mysql'
-> );
查看確認:
5、設置自增值(一般用於id列,自增列必須設置爲主鍵)
注:mysql只允許設置初始值,而不允許設置自增值,也就是說,可以設置爲第一個值爲5,然後依次遞增,如:5、6、7.....但不可以設置其一次遞增2個數,比如:5、7、9......
mysql> create table t5(
-> id int not null primary key auto_increment,
-> name varchar(20)
-> );
查看錶結構進行確認:
測試其自增效果:
mysql> insert into t5(name) values('zhangsan'),('lisi');
mysql> select * from t5;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | lisi |
+----+----------+
從上面的測試可以看出,只插入了兩個name的值,並沒有插入id的值,但是查看錶數據時,id已經有值了,說明自增生效。
設置自增的起始值
#定義初始值爲5
mysql> create table t6(
-> id int primary key auto_increment,
-> name varchar(20)
-> ) auto_increment=5;
#插入數據進行測試
mysql> insert into t6(name) values('zhangsan'),('lisi');
驗證其自增值:
二、ALTER指令的使用
1、修改列值的數據長度
mysql> desc t1; <!--查看t1表的結構-->
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| name | varchar(10) | NO | PRI | NULL | |
| sex | varchar(5) | YES | | NULL | |
| info | varchar(200) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table t1 modify name varchar(20); <!--修改其name字段的長度爲20-->
確認修改後的表結構:
2、修改字段名(在修改字段名的同時,還可以修改其新字段名的數據類型及數據長度)
mysql> desc t1; <!--查看其info列-->
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| name | varchar(20) | NO | PRI | NULL | |
| sex | varchar(5) | YES | | NULL | |
| info | varchar(200) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
mysql> alter table t1 change info infofo char(20); <!--修改其info列的名字及數據類型-->
驗證修改後的結果:
3、向表中插入一個新的字段
1)在最後一列插入新列:
mysql> desc t3; <!--確認t3列當前的字段-->
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(6) | NO | | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> alter table t3 add tel int(13); <!--插入一個tel列-->
查看插入後的列:
2)在表格開頭插入新列:
mysql> alter table t3 add sex char(1) first;
3)在指定的列後面插入新列:
mysql> alter table t3 add loc varchar(255) after name;
4、添加字段時添加約束
mysql> alter table t3 add hobyy varchar(255) default 'work';
5、添加一個外鍵
進行此操作前,需要自行找一個有主鍵的表(我這裏t1表的name列是主鍵)。
現在t1表的結構如下:
t3表的結構如下:
現在將t3表的name列添加爲t1表的name列的外鍵(其中t3_t1_name爲自定義的約束名稱):
mysql> alter table t3 add constraint t3_t1_name foreign key(name) references t1(name);
查看t3表的變化:
6、刪除外鍵
將上面添加的外鍵刪除,t3_t1_name是外鍵的名稱。
mysql> alter table t3 drop foreign key t3_t1_name;
mysql> alter table t3 drop key t3_t1_name;
7、刪除列
mysql> alter table t3 drop tel; <!--刪除t3表的tel列-->
注意:如果要刪除的列和其他表中的列有關聯關係,則需要先刪除關係,再刪除列。否則當以後再創建了相同名稱的列時,會自動將其建立關係。
8、修改列的順序
<!--將name字段移動到表的第一列-->
mysql> alter table t3 modify name varchar(10) first;
9、刪除表
mysql> drop table t5; <!--直接刪除-->
Query OK, 0 rows affected (0.00 sec)
mysql> drop table t5; <!--再次刪除,由於已經刪除了,所以表不存在,會報錯-->
ERROR 1051 (42S02): Unknown table 'test01.t5'
mysql> drop table if exists t5; <!--進行判斷後刪除,if exists表示如果存在就刪除-->
Query OK, 0 rows affected, 1 warning (0.00 sec)
<!--可以看到上述返回的信息有1個warning事項,可以執行以下命令進行查看-->
mysql> show warnings; <!--記錄的信息時不知道test01庫中的t5表-->
+-------+------+---------------------------+
| Level | Code | Message |
+-------+------+---------------------------+
| Note | 1051 | Unknown table 'test01.t5' |
+-------+------+---------------------------+
1 row in set (0.00 sec)
同樣,當執行刪除表操作時,如果存在關聯關係,則需要先刪除關聯關係,再刪除表。
———————— 本文至此結束,感謝閱讀 ————————