mysql學習筆記二 約束

mysql建表約束

主鍵約束
它能夠唯一確定一張表中的一條記錄,也就是我們通過給某個字段添加約束,就可以使的該字段不重複且不爲空。

mysql> create table user(
    -> id int primary key,
    -> name varchar(20)
mysql> insert into user values(1,'zs');
Query OK, 1 row affected (0.00 sec)
mysql> insert into user values(1,'zs');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into user values(2,'zs');
Query OK, 1 row affected (0.00 sec)
mysql> insert into user values(NULL,'zs');
ERROR 1048 (23000): Col
umn 'id' cannot be null

id有主鍵約束,所以不能添加重複的,也不能爲空。

聯合主鍵(兩個加起來不重複就可以)
primary key(id,name)

mysql> create table user2(
    -> id int,
    -> name varchar(20),
    -> passwd varchar(20),
    -> primary key(id,name)
    -> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into user2 values(1,'zs','123');
Query OK, 1 row affected (0.00 sec)

mysql> insert into user2 values(1,'zs','123');
ERROR 1062 (23000): Duplicate entry '1-zs' for key 'PRIMARY'
mysql> insert into user2 values(2,'zs','123');
Query OK, 1 row affected (0.00 sec)

mysql> insert into user2 values(1,'ls','123');
Query OK, 1 row affected (0.01 sec)
mysql> insert into user2 values(1,NULL,'123');
ERROR 1048 (23000): Column 'name' cannot be null

聯合主鍵裏面任何一個字段不能爲空

自增約束
自動生成id,id自動增長

mysql> insert into user3 (name) values('zs');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user3;
+----+------+
| id | name |
+----+------+
|  1 | zs   |
+----+------+
1 row in set (0.00 sec)
mysql> insert into user3 (name) values('zs');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user3;
+----+------+
| id | name |
+----+------+
|  1 | zs   |
|  2 | zs   |
+----+------+
2 rows in set (0.00 sec)

創建表的時候忘記創建主鍵約束了怎麼辦?用alter修改表結構,添加主鍵。

mysql> create table user4( id int, name varchar(20) );

mysql> alter table user4 add primary key(id);

刪除主鍵:

mysql> alter table user4 drop primary key;

修改主鍵約束:使用modify修改約束添加字段。

mysql> alter table user4 modify id int primary key;

唯一約束
約束脩飾的字段的值不可以重複

mysql> create table user5( id int, name varchar(20) );
mysql> alter table user5 add unique(name);
mysql> desc user5;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
mysql> insert into user5 values(1,'zs');
Query OK, 1 row affected (0.00 sec)
mysql> insert into user5 values(1,'zs');
ERROR 1062 (23000): Duplicate entry 'zs' for key 'name'
mysql> insert into user5 values(2,'zs');
ERROR 1062 (23000): Duplicate entry 'zs' for key 'name'
mysql> insert into user5 values(2,'ls');
Query OK, 1 row affected (0.00 sec)

mysql> create table user6( id int, name varchar(20),unique(name));
mysql> create table user7( id int, name varchar(20) unique);

使用modify添加約束

mysql> create table user7( id int, name varchar(20));
mysql> alter table user7 modify name varchar(20) unique;

以上四個實現功能一樣(user5,user6,user7)

約束兩個,這兩個字段都不能重複(組合在一起不重複就行)

mysql> create table user8( id int, name varchar(20),unique(id,name));

刪除唯一約束

mysql> alter table user7 drop index name;

添加約束方式:
1.建表的時候添加約束
2.建表完後使用 alter…add…
3.建表完後使用 alter…modify…

非空約束-------修飾的字段不能爲空

mysql> create table user9( id int, name varchar(20) not null);

mysql> desc user9;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

name字段不能爲空

默認約束-----當我們插入字段值的時候如果沒有傳值就會使用默認值

mysql> create table user10( id int, name varchar(20),age int default 10);

mysql> desc user10;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | 10      |       |
+-------+-------------+------+-----+---------+-------+

插入數據

mysql> insert into user10 (id,name) values(1,'zs');
mysql> select * from user10;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | zs   |   10 |
+------+------+------+

mysql> insert into user10 values(1,'zs',19);
mysql> select * from user10;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | zs   |   10 |
|    1 | zs   |   19 |
+------+------+------+

沒寫值自動填默認值,寫了就寫了唄

外鍵約束
涉及兩個表:父表,子表或者是主表、副表

mysql> create table classes( id int primary key, name varchar(20));
Query OK, 0 rows affected (0.01 sec)

mysql> create table students( id int primary key, name varchar(20),class_id int,foreign key(class_id) references classes(id));

mysql> insert into classes values(1,'yi');
Query OK, 1 row affected (0.00 sec)
mysql> insert into classes values(2,'er');
mysql> insert into classes values(3,'san');
mysql> insert into classes values(4,'si');

mysql> select * from classes;
+----+------+
| id | name |
+----+------+
|  1 | yi   |
|  2 | er   |
|  3 | san  |
|  4 | si   |
+----+------+

mysql> insert into students values(1001,'zs',1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into students values(1002,'zs',2);
mysql> insert into students values(1003,'zs',3);
mysql> insert into students values(1004,'zs',4);

mysql> insert into students values(1005,'zs',5);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))

主表裏不存在的副表不能使用
主表中的記錄被副表引用,是不能被刪除的。

mysql> delete from classes where id=4;
ERROR 1451 (23000)...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章