數據庫Ⅲ(1)——完整性約束條件測試

完整性約束條件測試

完整性約束條件有哪些

  • PRIMARY KEY 主鍵
  • AUTO_INCREMENT 自增長
  • FOREIGN KEY 外鍵
  • NOT NULL 非空
  • UNIQUE KEY 唯一
    -DEFAULT 默認值

1.測試主鍵

- 設置一個主鍵

CREATE TABLE IF NOT EXISTS user1(
id INT PRIMARY KEY,
username VARCHAR(20)
);

查看創建表的標的定義

SHOW CREATE TABLE user1;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------+
| user1 | CREATE TABLE `user1` (
  `id` int(11) NOT NULL,
  `username` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------+

可以看到主鍵是id
插入值

INSERT user1 VALUES(1,'king');
INSERT user1 VALUES(13,'QUEEN');

查看結果:

mysql> DESC user1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| username | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.04 sec)

mysql> SELECT * FROM user1;
+----+----------+
| id | username |
+----+----------+
|  1 | king     |
| 13 | QUEEN    |
+----+----------+
2 rows in set (0.00 sec)

- 設置兩個主鍵

CREATE TABLE IF NOT EXISTS user2(
id INT,
username VARCHAR(20),
card CHAR(18),
PRIMARY KEY(id,card)
);

結果

+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user2 | CREATE TABLE `user2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `username` varchar(20) DEFAULT NULL,
  `card` char(18) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`,`card`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

可以看到有兩個主鍵

  • 添加值
INSERT user2 VALUES(1,'king','111');
INSERT user2 VALUES(1,'queen','112');
mysql>  SELECT * FROM user2;
+----+----------+------+
| id | username | card |
+----+----------+------+
|  1 | king     | 111  |
|  1 | queen    | 112  |
+----+----------+------+

CREATE TABLE IF NOT EXISTS user3(
id INT KEY,
username VARCHAR(20)
);

CREATE TABLE IF NOT EXISTS user4(
id INT,
username VARCHAR(20) KEY
);

2.測試自增長

- 初始位置(默認從1開始)

CREATE TABLE IF NOT EXISTS user5(
id SMALLINT KEY AUTO_INCREMENT,
username VARCHAR(20)
);
INSERT user5 VALUES(1,'KING');
INSERT user5(username) VALUES('queen1');

結果:

mysql> SELECT * FROM user5;
+----+----------+
| id | username |
+----+----------+
|  1 | KING     |
|  2 | queen1   |
+----+----------+

雖然queen1沒有指定id,但是編號爲2
以編號‘111’開始繼續插入,之後插入id爲空和默認值

INSERT user5 VALUES(111,'KING1');
INSERT user5 VALUES(NULL,'AAAA');
INSERT user5 VALUES(DEFAULT,'AAAA');

結果:

mysql> SELECT * FROM user5;
+-----+----------+
| id  | username |
+-----+----------+
|   1 | KING     |
|   2 | queen1   |
| 111 | KING1    |
| 112 | AAAA     |
| 113 | AAAA     |
+-----+----------+

- 修改自增長值

CREATE TABLE IF NOT EXISTS user6(
id SMALLINT KEY AUTO_INCREMENT,
username VARCHAR(20)
)AUTO_INCREMENT=100;
INSERT user6(username) VALUES('queen1');
mysql> SELECT*FROM user6;
+-----+----------+
| id  | username |
+-----+----------+
| 100 | queen1   |
+-----+----------+
1 row in set (0.00 sec)

#修改自增長的值
ALTER TABLE user6 AUTO_INCREMENT =500;

mysql> INSERT user6(username) VALUES('quee');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT*FROM user6;
+-----+----------+
| id  | username |
+-----+----------+
| 100 | queen1   |
| 500 | quee     |
+-----+----------+

3.測試非空NOT NULL

CREATE TABLE IF NOT EXISTS user7(
id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
password CHAR(32) NOT NULL,
age TINYINT UNSIGNED
);
INSERT user7(username,password) VALUES('KING','KING');

查看

mysql> SELECT * FROM user7;
+----+----------+----------+------+
| id | username | password | age  |
+----+----------+----------+------+
|  1 | KING     | KING     | NULL |
+----+----------+----------+------+

插入值爲空顯示錯誤

INSERT user7(username,password) VALUES(NULL,NULL);
ERROR 1048 (23000): Column 'username' cannot be null

4.測試默認值DEFAULT

CREATE TABLE IF NOT EXISTS user8(
id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
password CHAR(32) NOT NULL,
age TINYINT UNSIGNED DEFAULT 18,
addr VARCHAR(50) NOT NULL DEFAULT '北京',
sex ENUM('男','女','保密') NOT NULL DEFAULT '男'
); 
INSERT user8(username,password) VALUES('KING','KING');

結果

mysql> SELECT * FROM user8;
+----+----------+----------+------+------+-----+
| id | username | password | age  | addr | sex |
+----+----------+----------+------+------+-----+
|  1 | KING     | KING     |   18 | 北京     | 男    |
+----+----------+----------+------+------+-----+

測試其他默認值

INSERT user8 VALUES(3,'QUEEN','QUEEN',29,'上海','保密');
INSERT user8 VALUES(4,'QUEEN','QUEEN',DEFAULT,DEFAULT,'保密');

5.測試唯一UNIQUE KEY

CREATE TABLE IF NOT EXISTS user9(
id TINYINT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE,
card CHAR(18) UNIQUE
);
INSERT user9(username) VALUES('A');
INSERT user9(username,card) VALUES('B','111');

再次插入‘B’,報錯

mysql> INSERT user9(username,card) VALUES('B','112');
ERROR 1062 (23000): Duplicate entry 'B' for key 'username'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章