任务描述
本关任务:给表添加常用的约束。
相关知识
在数据库的使用过程中我们经常要限制字段的取值,比如有些字我们不能让它为空,我们就需要添加非空约束,本关我们就来学习如何添加这些常用的约束。
为了完成本关任务,你需要掌握: 1.怎么添加唯一约束; 2.怎么添加非空约束; 3.怎么添加默认约束; 4.怎么设置字段的值自动增加。
怎么添加唯一约束
唯一约束(Unique Constraint)
要求该列唯一,允许为空,但是只能有一个空值。唯一约束可以确保一列或者几列不出现重复值。
定义部门表的部门名称唯一,SQL
语句如下:关键词 UNIQUE
。
CREATE TABLE t_dept(
id INT PRIMARY KEY,
name VARCHAR(22) UNIQUE,
location VARCHAR(50)
)
怎么添加非空约束
关键词:NOT NULL
;
例如:
CREATE TABLE t_dept(
id INT PRIMARY KEY,
name VARCHAR(22) NOT NULL,
location VARCHAR(50)
)
怎么使用默认约束
默认约束:即给字段一个默认值。 关键词:DEFAULT
;
例如:
CREATE TABLE t_emp(
id INT PRIMARY KEY,
name VARCHAR(22),
sex VARCHAR(2) DEFAULT '男'
) DEFAULT CHARSET=utf8;
注意:
- 如果是添加字符串型默认值要使用单引号,如果是整型则不需要加任何符号;
- 如果要添加的是中文默认值,则需要加上
DEFAULT CHARSET=utf8;
使用英文字符则不需要。
设置表的属性值自动增加
在数据库应用中,经常有个需求就是,在每次插入新纪录时,系统自动生成字段的主键值,即:
id | name |
---|---|
1 | 张三 |
2 | 李四 |
ID每次自动加一 | 姓名 |
... | XXX |
10 | XXX |
关键词:AUTO_INCREMENT
,默认情况下初始值和增量都为1
。
例如:
CREATE TABLE t_tmp
(
id int PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32)
)
以上这些你都可以在右侧的命令行中测试。
编程要求
在数据库MyDb
中创建表t_user
,表结构如下:
字段名称 | 数据类型 | 备注 |
---|---|---|
id | INT | 用户ID,主键,自动增长 |
username | varchar(32) | 用户名,非空,唯一 |
sex | varchar(4) | 性别,默认“男” |
提示:若要给字段添加两个或者两个以上的约束,约束之间以空格隔开即可。
测试说明
我会对你创建的表进行测试。
预期输出:
提示:如果你想删掉表重新创建,你可以使用如下语句删除表。
DROP TABLE 表名;
版本库代码路径:/data/workspace/myshixun/
root@evassh-6138126:~# mysql -u root -p123123 -h127.0.0.1
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 43
Server version: 5.5.59-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
mysql> create database MyDb;
Query OK, 1 row affected (0.00 sec)
mysql> USE MyDb;
Database changed
mysql> create table t_user(
-> id INT primary key auto_increment;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2
mysql> create table t_user(
-> id INT primary key auto_increment,
-> username varchar(32) not NULL UNIQUE,
-> sex varchar(4) DEFAULT '男'
-> )DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> desc table t_user;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table t_user' at line 1
mysql> desc t_user;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(32) | NO | UNI | NULL | |
| sex | varchar(4) | YES | | 男 | |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
mysql> ^CCtrl-C -- exit!
Aborted
root@evassh-6138126:~#