mysql建立表約束

1:主鍵約束
可以肯定一張表中的一條記錄,經過給某一字段添加約束,就能夠使得該字段不重複且不爲空。
spa

create table user(
    -> id int primary key,
    -> name varchar(20)
    -> );

咱們使用了主鍵元素;看下這個表信息。code

MariaDB [helloworld]> describe user;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

咱們能夠看到這個Key值是PRI,咱們這時候插入一個元素。rem

nsert into user value(1,'zhangsan');
Query OK, 1 row affected (0.00 sec)

繼續插入相同元素就會出現報錯table

insert into user value(1,'zhangsan');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

咱們添加的時候得更改ID才能進行添加;由於ID有了主鍵約束;class

insert into user value(2,'zhangsan');
Query OK, 1 row affected (0.00 sec)

查看哈:test

select *from user;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | zhangsan |
+----+----------+

注意ID不能爲NULL
聯合主鍵:只要聯合的主鍵值加起來不出重複就能夠
select

create table user2( id int,
    -> name vaechar(20).
    -> password varchar(20),
    -> primary key(id,name)
    -> );
insert into user2 values(1,'zhangsan','610722200101555546');
insert into user2 values(2,'zhangsan','610722200101555546');

能夠插入的引用

select *from user2;
+----+----------+--------------------+
| id | name     | password           |
+----+----------+--------------------+
|  1 | zhangsan | 610722200101555546 |
|  2 | zhangsan | 610722200101555546 |
+----+----------+--------------------+

2:外鍵約束
一個是父表,一個是字表
例子:

im

create table classes( id int primary key, name varchar(20));
create table students( id int primary key, name varchar(20), class_id int, foreign key(class_id) references classes(id));
desc classes;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
desc students;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| name     | varchar(20) | YES  |     | NULL    |       |
| class_id | int(11)     | YES  | MUL | NULL    |       |
+----------+-------------+------+-----+---------+-------+

外鍵做用:
主表中沒有的數據在父表中是不能夠使用的,
主表中的記錄被父表引用,是不能夠被刪除的。
在添加數據或者是刪除數據的時候是會被限制的。
3:惟一約束
約束該字段的值不能夠重複




handlebars

create table user5( id int, name varchar(20) );
alter table user5 add unique(name);
desc user5;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+

惟一約束脩飾的字段不能夠重複
如何刪除惟一約束?

alter table user7 drop index name;
desc user5;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

4:非空約束

create table user7( id int, name varchar(20) not null);
Query OK, 0 rows affected (0.01 sec)

MariaDB [helloworld]> desc user7;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

不傳id是能夠的

insert into user7(name) values('lisi');
desc user7;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

5:自增約束

create table user3(
    -> id int primary key auto_increment,
    -> name varchar(20));

自增約束和主鍵約束搭配在一塊兒使用

insert into user3 (name) values('libai');

咱們能夠看到,咱們插入時並無寫ID號,咱們來看結果

select *from user3;
+----+-------+
| id | name  |
+----+-------+
|  1 | libai |
+----+-------+
1 row in set (0.00 sec)

建立過程當中忘了加主鍵怎麼辦
添加主鍵:

create table user4( id int, name varchar(20));
desc user4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | 0       |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

刪除主鍵:

alter table user4 drop primary key;
desc user4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | 0       |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

修改主鍵約束:

alter table user4 modify id int primary key;

6:默認約束
當咱們插入字段值的時候,若是沒有傳值就會使用默認值。

create table test1(
    -> id int,
    -> name varchar(20),
    -> age int default 10);
desc test1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | 10      |       |
+-------+-------------+------+-----+---------+-------+
insert into test1(id,name) values(1,'zhangsan');
select *from test1;
+------+----------+------+
| id   | name     | age  |
+------+----------+------+
|    1 | zhangsan |   10 |
+------+----------+------+
===========================================================

總結: 添加約束: 1:建立表的時候添加約束, 2:使用 alter添加…add…, 3:使用 alter…modif…, 4: alter…drop…進行刪除。

相關文章
相關標籤/搜索