溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL之數(shù)據(jù)表控制語句

發(fā)布時間:2020-06-29 03:39:33 來源:網(wǎng)絡 閱讀:290 作者:warrent 欄目:MySQL數(shù)據(jù)庫

博文大綱:

  • 一、約束條件相關語句
    • 主鍵約束
    • 非空約束
    • 設置值的唯一性
    • 設置列的默認值
    • 設置自增值
  • 二、ALTER指令的使用
    • 修改列值的數(shù)據(jù)長度
    • 修改字段名
    • 向表中插入一個新的字段
    • 添加字段時添加約束
    • 添加一個外鍵
    • 刪除外鍵
    • 刪除列
    • 修改列的順序
    • 刪除表

一、約束條件相關語句

1、主鍵約束(主鍵約束要求主鍵列的數(shù)據(jù)唯一,并且不允許為空)
<!--創(chuàng)建庫-->
mysql> create database test01; 
<!--切換至新庫-->
mysql> use test01;
<!--創(chuàng)建一個帶有主鍵約束的表-->
mysql> create table t1(
    -> id int(10),
    -> name varchar(10) primary key,
    -> sex varchar(5),
    -> info varchar(200)
    -> );

確定創(chuàng)建的是否為主鍵(該列是否有PRI字樣):

MySQL之數(shù)據(jù)表控制語句
上述方法,是在定義列的同時定義主鍵,下面來寫一下定義完所有列之后指定主鍵:

mysql> create table t2(
    -> id int(10),
    -> name varchar(10),
    -> sex varchar(5),
    -> primary key(id)
    -> );

確認是否有主鍵:

MySQL之數(shù)據(jù)表控制語句

2、非空約束(不允許列的值為空)
mysql> create table t3(
    -> id int(6) not null,
    -> name varchar(10)
    -> );

查看表信息確認:

MySQL之數(shù)據(jù)表控制語句

3、設置值的唯一性(不允許重復數(shù)據(jù),可以為空,但只能有一個空,否則就會被視為重復)
mysql> create table t7(
    -> id int not null unique,
    -> name varchar(20)
    -> );

查看其表結(jié)構(gòu):

MySQL之數(shù)據(jù)表控制語句

可以看到其被標識為了主鍵,但是在創(chuàng)建時并沒有指定它是主鍵,而是這一列的屬性基本滿足了主鍵的要求,如唯一、不可以為空。

4、設置列的默認值(如果該列為空,則寫入默認值)
mysql> create table t4(
    -> id int(2) not null,
    -> name varchar(20),
    -> project varchar(20) default 'mysql'
    -> );

查看確認:

MySQL之數(shù)據(jù)表控制語句

5、設置自增值(一般用于id列,自增列必須設置為主鍵)

注:mysql只允許設置初始值,而不允許設置自增值,也就是說,可以設置為第一個值為5,然后依次遞增,如:5、6、7.....但不可以設置其一次遞增2個數(shù),比如:5、7、9......

mysql> create table t5(
    -> id int not null primary key auto_increment,
    -> name varchar(20)
    -> );

查看表結(jié)構(gòu)進行確認:

MySQL之數(shù)據(jù)表控制語句

測試其自增效果:

mysql> insert into t5(name) values('zhangsan'),('lisi');
mysql> select * from t5;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
+----+----------+

從上面的測試可以看出,只插入了兩個name的值,并沒有插入id的值,但是查看表數(shù)據(jù)時,id已經(jīng)有值了,說明自增生效。

設置自增的起始值

#定義初始值為5
mysql> create table t6(                                  
    -> id int primary key auto_increment,
    -> name varchar(20)
    -> ) auto_increment=5;
#插入數(shù)據(jù)進行測試
mysql> insert into t6(name) values('zhangsan'),('lisi'); 

驗證其自增值:
MySQL之數(shù)據(jù)表控制語句

二、ALTER指令的使用

1、修改列值的數(shù)據(jù)長度
mysql> desc t1;            <!--查看t1表的結(jié)構(gòu)-->
+-------+--------------+------+-----+---------+-------+
| 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-->

確認修改后的表結(jié)構(gòu):

MySQL之數(shù)據(jù)表控制語句

2、修改字段名(在修改字段名的同時,還可以修改其新字段名的數(shù)據(jù)類型及數(shù)據(jù)長度)
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列的名字及數(shù)據(jù)類型-->

驗證修改后的結(jié)果:

MySQL之數(shù)據(jù)表控制語句

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列-->

查看插入后的列:

MySQL之數(shù)據(jù)表控制語句
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列是主鍵)。

現(xiàn)在t1表的結(jié)構(gòu)如下:
MySQL之數(shù)據(jù)表控制語句
t3表的結(jié)構(gòu)如下:
MySQL之數(shù)據(jù)表控制語句

現(xiàn)在將t3表的name列添加為t1表的name列的外鍵(其中t3_t1_name為自定義的約束名稱):

mysql> alter table t3 add constraint t3_t1_name foreign key(name) references t1(name);

查看t3表的變化:

MySQL之數(shù)據(jù)表控制語句

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列-->

注意:如果要刪除的列和其他表中的列有關聯(lián)關系,則需要先刪除關系,再刪除列。否則當以后再創(chuàng)建了相同名稱的列時,會自動將其建立關系。

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;            <!--再次刪除,由于已經(jīng)刪除了,所以表不存在,會報錯-->
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事項,可以執(zhí)行以下命令進行查看-->
mysql> show warnings;    <!--記錄的信息時不知道test01庫中的t5表-->
+-------+------+---------------------------+
| Level | Code | Message                   |
+-------+------+---------------------------+
| Note  | 1051 | Unknown table 'test01.t5' |
+-------+------+---------------------------+
1 row in set (0.00 sec)

同樣,當執(zhí)行刪除表操作時,如果存在關聯(lián)關系,則需要先刪除關聯(lián)關系,再刪除表。

———————— 本文至此結(jié)束,感謝閱讀 ————————

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI