數據庫之數據表控制語句

1、約束條件相關語句

一、主鍵約束(主鍵約束要求主鍵列的數據惟一,不容許爲空)mysql

#建立庫
mysql> create database test1;
#進入到庫中
mysql> use test1;
#建立一個帶有主鍵約束的表
mysql> create table tab1(
    -> id int(10),
    -> name varchar(10) primary key,
    -> sex varchar(5),
    -> info varchar(200)
    -> );
Query OK, 0 rows affected (0.01 sec)

肯定建立的是否爲主鍵(該列是否有PRI字樣):
數據庫之數據表控制語句
上述是在定義列的同時定義主鍵,下面來寫一下定義完全部列以後指定主鍵:sql

mysql> create table tab2(
    -> id int(10),
    -> name varchar(10),
    -> sex varchar(10),
    -> primary key(id)                       # 括號裏定義主鍵的列
    -> );

數據庫之數據表控制語句
二、非空約束(不容許列的值爲空)數據庫

mysql> create table tab3(
    -> id int(6) not null,                # not null :不容許爲空
    -> name varchar(10)
    -> );

數據庫之數據表控制語句
三、設置值的惟一性(不容許重複數據,能夠爲空,但只能有一個空,不然就會被視爲重複)ide

mysql> create table tab4(
    -> id int not null unique,
    -> name varchar(20)
    -> );

數據庫之數據表控制語句
能夠看到其被標識爲了主鍵,可是在建立時並無指定它是主鍵,而是這一列的屬性基本知足了主鍵的要求,如惟1、不能夠爲空
四、設置列的默認值(若是該列爲空,則寫入默認值)測試

mysql> create table tab5(
    -> id int(2) not null,
    -> name varchar(20),
    -> project varchar(20) default 'mysql'
    -> );

數據庫之數據表控制語句
五、設置自增值(通常用於id列,自增列必須設置爲主鍵)
注:mysql只容許設置初始值,而不容許設置自增值,也就是說,能夠設置爲第一個值爲5,而後依次遞增,如:五、六、7.....但不能夠設置其一次遞增2個數,好比:五、七、9......ui

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

數據庫之數據表控制語句
測試其自增效果:設計

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

從上面的測試能夠看出,只插入了兩個name的值,並無插入id的值,可是查看錶數據時,id已經有值了,說明自增生效
設置自增的起始值3d

mysql> create table tab7(
    -> id int primary key auto_increment,
    -> name varchar(20)
    -> )auto_increment=6;
#插入數據驗證
mysql> insert into tab7(name) values('zyz'),('lisi'),('zhangsan');

mysql> select * from tab7;
+----+----------+
| id | name     |
+----+----------+
|  6 | zyz      |
|  7 | lisi     |
|  8 | zhangsan |
+----+----------+

2、ALTER指令的使用

一、修改列值的數據長度code

mysql> desc tab1;
+-------+--------------+------+-----+---------+-------+
| 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    |       |
+-------+--------------+------+-----+---------+-------+
#修改name 字符長度爲20
mysql> alter table tab1 modify name varchar(20);

數據庫之數據表控制語句
二、修改字段名(在修改字段名的同時,還能夠修改其新字段名的數據類型及數據長度)blog

mysql> desc tab1;
+-------+--------------+------+-----+---------+-------+
| 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 tab1 change info info2 char(20);

數據庫之數據表控制語句
三、向表中插入一個新的字段
1)在最後一列插入新列:

mysql> desc tab3;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(6)      | NO   |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
#插入一個  zuihou  列
mysql> alter table tab3 add zuihou int(10);

數據庫之數據表控制語句
2)在表格開頭插入新列:

mysql> alter table tab3 add sex char(10) first;

3)在指定的列後面插入新列:

mysql> alter table tab3 add local varchar(255) after name;

四、添加字段時添加約束

mysql> alter table tab3 add hello varchar(20) default 'work';

五、添加一個外鍵
進行此操做前,須要自行找一個有主鍵的表(我這裏tab1表的name列是主鍵)
tab1表結構:
數據庫之數據表控制語句
tab3表結構:
數據庫之數據表控制語句
如今將t3表的name列添加爲t1表的name列的外鍵(其中t3_t1_name爲自定義的約束名稱):

mysql> alter table tab3 add constraint tab3_tab1_name foreign key(name) references tab1(name);

查看tab3表的變化:
數據庫之數據表控制語句
六、刪除外鍵
將上面添加的外鍵刪除,tab3_tab1_name是外鍵的名稱。

mysql> alter table tab3 drop foreign key tab3_tab1_name;
mysql> alter table tab3 drop key tab3_tab1_name;

——————————

說到了外鍵,這裏就要談談什麼是外鍵了
查詢相關資料都是講一些術語。說外鍵的主要做用是:保持數據的一致性、完整性。聽得我是一頭霧水,表示沒有聽懂。
這裏我也是借鑑一位大佬的話來解釋的,能夠看到下方小表
+-------+ ref +-------+
| sub | ------> | main |
+-------+ +-------+

從表(sub)的某列引用(ref)主表(main)的某列的值。

比方學生表有個學生編號(sid),分數表中的學生列(stu)引用學生表的學 生編號,此時對於分數表的 stu 來講。學生表的 sid 就是外鍵。

從表也叫外鍵表,主表也叫主鍵表、外表,列也叫字段。

因此在設計的時候。就給表1加入一個外鍵,這個外鍵就是表2中的學號字段。那麼這樣表1就是主表,表2就是子表。

你的主從關係理解顛倒了。你的圖中,表1的確是主表。表2是子表,但不是叫作給表1加入一個外鍵,而是給表2加入一個外鍵,表2中的學號 字段就叫外鍵,它是表1學號字段的主鍵。

你可以這樣說:表1的學號字段是表2的外鍵

————————外鍵解釋結束——————
七、刪除列

mysql> alter table tab3 drop zuihou;

注意:若是要刪除的列和其餘表中的列有關聯關係,則須要先刪除關係,再刪除列。不然當之後再建立了相同名稱的列時,會自動將其創建關係。
八、修改列的順序

mysql> alter table tab3 modify name varchar(10) first;

九、刪除表

#直接刪除
mysql> drop table tab6;
Query OK, 0 rows affected (0.01 sec)
#再次刪除這個表,能夠看到已經提示說沒有這個表了,說明已經刪除
mysql> drop table tab6;
ERROR 1051 (42S02): Unknown table 'test1.tab6'
#進行判斷後刪除,if exists表示若是存在就刪除
mysql> drop table if exists tab6;
Query OK, 0 rows affected, 1 warning (0.00 sec)
#能夠看到上述返回的信息有1個warning事項,能夠執行如下命令進行查看
mysql> show warnings;               # 返回的信息顯示不知道test1庫中的tab6表
+-------+------+----------------------------+
| Level | Code | Message                    |
+-------+------+----------------------------+
| Note  | 1051 | Unknown table 'test1.tab6' |
+-------+------+----------------------------+
1 row in set (0.00 sec)

一樣,當執行刪除表操做時,若是存在關聯關係,則須要先刪除關聯關係,再刪除表
一樣,當執行刪除表操做時,若是存在關聯關係,則須要先刪除關聯關係,再刪除表
一樣,當執行刪除表操做時,若是存在關聯關係,則須要先刪除關聯關係,再刪除表

相關文章
相關標籤/搜索