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…進行刪除。