数据库基础知识整理-SQL约束和使用
SQL约束
SQL 约束用于规定表中的数据规则,可以在创建表时规定(通过
CREATE TABLE
语句),或者在表创建之后规定(通过ALTER TABLE
语句)。
-
NOT NULL
- 不可为空
- 指示某列不能存储 NULL 值。
-
UNIQUE
- 唯一值
- 保证某列的每行必须有唯一的值。
-
PRIMARY KEY
:NOT NULL
和UNIQUE
的结合。- 确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录,一般用于主键。
-
FOREIGN KEY
- 外键
- 保证一个表中的数据匹配另一个表中的值的参照完整性。
-
CHECK
- 检查
- 保证列中的值符合指定的条件。
-
DEFAULT
- 默认值
- 规定没有给列赋值时的默认值。
-
AUTO INCREMENT
- 自增
- 严格来说,自增其实不像一种约束,更像是一个语法糖,每次插入新值时,自动创新主键字段的唯一值
使用约束
mysql> create table test(
-> id int not null auto_increment primary key,
-> name varchar(30) not null,
-> sex char(1) not null);
Query OK, 0 rows affected (0.24 sec)
-- id为主键,自增,以上3个自动均不可为空
mysql> describe test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | | NULL | |
| sex | char(1) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
约束的增删改查
-
ALTER TABLE
ALTER TABLE 语句用于在已有的表中添加、删除或修改列,另外也可以在现有表上添加和删除各种约束。
-- ADD 在上面的test表中添加一个age列
mysql> alter table test add age int;
-- DROP 删除sex列
mysql> alter table test drop column sex;
-- 删除表用的是drop而不是delete,delete一般用来删除数据
-- 注意,没事别真的删掉,否则就找不回来了
mysql> drop table test;
-- CHANGE 重命名列
-- 把刚才删掉的sex列先添加回来,修改一下类型
mysql> alter table test change sex sex varchar(20);
-- RENAME 重命名表
mysql> rename table test to test_demo;
-- 这时候旧表就没了,现在表结构是这样的
mysql> describe test;
ERROR 1146 (42S02): Table 'test.test' doesn't exist
mysql> describe test_demo;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)