数据库基础知识整理-SQL约束和使用

数据库基础知识整理-SQL约束和使用

SQL约束

SQL 约束用于规定表中的数据规则,可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

  • NOT NULL

    • 不可为空
    • 指示某列不能存储 NULL 值。
  • UNIQUE

    • 唯一值
    • 保证某列的每行必须有唯一的值。
  • PRIMARY KEY:

    • NOT NULLUNIQUE 的结合。
    • 确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录,一般用于主键。
  • 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)

你可能感兴趣的:(数据库)