文章目錄
完整性約束條件測試
完整性約束條件有哪些
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'