数据库Ⅲ(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'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章