SQL约束:就是用来约束/限定填入表中的数据类型,比如数据大小,数据是否为空,是否是唯一.......
一般常用的约束有:
NOT NULL:不能为空
UNIQUE:唯一限定
PRIMARY KEY:主键(要求字段不能为空+唯一)
FOREIGN KEY :外键
CHECK :限定值的大小
DEFAULT :设定默认值(其实系统会自动给字段添加一个NULL的默认值进去)
下面对这些限定一一介绍:
1. NOT NULL
not null是指这个字段不能为空(NULL),只要被这个修饰过的字段就必须要填数据才行。
使用格式1:在创建表的同时就加入NOT NULL约束:
CREATE TABLE 表名 (字段名 字段类型 NOT NULL) ;
例如:创建一个text表并将id设为Not NULL
mysql> create table text(id int(10) not null,name varchar(20));
如果此时不插入id字段数据的话就回提示错误,如:
mysql> insert into text(name) values('小雨');
ERROR 1364 (HY000): Field 'id' doesn't have a default value
使用格式2:如果表已经创建好了这时我们想要添加NOT NULL 这个约束该怎么办呢?
这时可以使用ALTER修改字段类型来实现:
ALTER TABLE 表名 MODIFY 字段名 字段类型 ;
例如:给刚才创建的text表中name添加NOT NULL约束:
mysql> alter table text modify name varchar(20) not null;
2.UNIQUE约束
就是用来约束这个字段里面的数据唯一性,防止数据重复出现
使用格式1:在创建表时用创建最短的形式给字段加入唯一性约束:
CREATE TABLE 表名(
字段名 字段类型 NOT NULL ,
......
UNIQUE (id)
);
例如:创建一个text_2表,给id字段加入唯一性约束:
mysql> create table text_2(id int(10),name varchar(20),unique(id));
使用格式2:如果想要在已经建好的表中加入唯一性约束怎么玩?
这时我们可以使用ALTER 插入字段来实现。
ALTER TABLE 表名 ADD UNIQUE(字段类型) ;
例如:给刚才的text_2表中name字段添加唯一约束
mysql> alter table text_2 add unique(name);
使用格式3:多列添加唯一约束
ALTER TABLE 表名 ADD CONSTRAINT UNIQUE约束名 UNIQUE(字段名...) ;
注意:要向已经建好的表中添加唯一性约束前提是你表中那个约束的字段没有重复的才行
要不然违背了唯一性规则将无法添加。
2.1 怎么删除UNIQUE约束?
使用格式:ALTER TABLE 表名 DROP INDEX UNIQUE约束名;
例如:删除text_2中name字段的唯一约束
mysql> alter table text_2 drop index name;
注意:我们只添加一列UNIQUE约束,这个约束名为那一列的字段名;
添加多列的UNIQUE约束时,这个约束名,需要我们来重命名
3. PRIMARY KEY
主要用于标识字段中数据的唯一性以及不能为空(相当于NOT NULL+UNIQUE结合体)
并且一个表中只能有一个主键
使用格式1:在建表中添加主键
CREATE TABLE 表名(
字段名 字段类型 NOT NULL,
.......
PRIMARY KEY (主键字段)
)
例如:给创建text_3表中的ID添加主键
mysql> create table text_3(id int(10),name varchar(20),PRIMARY KEY(id));
使用格式2:给已经创建好的表中添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名) ;
例如:给text_3表中ID添加主键
ALTER TABLE text_3 ADD PRIMARY KEY(id) ;
3.1如何删除主键?
使用格式:ALTER TABLE 表名 DROP PRIMARY KEY ;
例如:给text_3表ID删除主键
ALTER TABLE text_3 DROP PRIMARY KEY ;
注意:字段中数据不符合主键的规则的也是无法设置主键的
4. FOREIGN KEY约束
一张表用来指向关联另外一张表,防止数据随便插入,关联的那张表中没有的字段是插入不了的。
使用格式1:建表添加外键CREATE TABLE 表名(字段1 字段类型,字段2 字段类型,
FOREIGN KEY(字段2) REFERENCES 表2(表2的字段));
例如:创建text_4表关联student表的ID字段
CREATE TABLE text_4(id int,name varchar(20),
FOREIGN KEY(id) REFERENCES student(id));
使用格式2:向已有表添加外键:
ALTER TABLE 表名 ADD FOREIGN KEY(列) REFERENCES 表2(表2的列) ;
例如:text_4表添加外键到student
ALTER TABLE text_4 ADD FOREIGN KEY(id) REFERENCES student(id) ;
4.1如何删除外键?
使用格式:ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名 ;
例如:删除text_4的外键约束
ALTER TABLE text_4 DROP FOREIGN KEY id ;
5.CHECK关键字
用来设定某一列值的范围
使用格式1:在创建表同事进行值的约束:
CREATE TABLE 表名 (字段名 字段类型,...,CHECK (字段名>=值)) ;
例如:创建一个text_5并给grade字段添加一个大于0的约束
CREATE TABLE text_5 (id int,name varchar(20),grade int CHECK (grade >=0)) ;
使用格式2:给已经建好的表中添加值约束
单列:ALTER TABLE 表名 ADD CHECK(列>=值);
例如:给text_5表中id 添加值大于等于1的约束:
ALTER TABLE text_5 ADD CHECK(id>=1);
多列:ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(列>=值 AND 列<=值) ;
5.1如何删除值限定?
使用格式:
ALTER TABLE 表名 DROP CHECK 约束名 ;
例如:删除text_5表中id的值的约束
ALTER TABLE text_5 DROP CHECK id ;
注意:单列的约束名字就是那个字段名字,多列就要使用自定义的约束名字。
6.DEFAULT关键字
表示是给字段设定一个默认值,当那个字段没有插入数据时,就使用默认值,
如有插入有值就使用插入的数据。mysql系统会自动添加一个默认值为NULL,
当你自己设置默认值时会覆盖NULL,如果将其删除就没有默认值了,就必须
要插入数据了包括NULL;
使用格式1:创建表是添加默认值
CREATE TABLE 表名 (字段名 字段类型 DEFAULT 默认值,字段名 字段类型...);
例如:创建表text_6表name字段添加默认值‘小雨’
CREATE TABLE text_6 (id int ,name varchar(20) DEFAULT '小雨');
使用格式2:给建好的表添加默认值
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值 ;
例如:给text_6表id字段添加默认值为1
ALTER TABLE text_6 ALTER id SET DEFAULT 1 ;
6.1 如何删除默认值?(这里和前面的约束删除方法稍有点差别)
使用格式:
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT ;
例如删除text_6表中id的默认值
ALTER TABLE text_6 ALTER id DROP DEFAULT ;
7.VIEW视图
可以用于显示指定显示的字段内容达到一种影藏效果,
并且视图可以用来被读取,添加由于只是原来表中的一部分所以添加会被限制
如何创建一个视图?
使用格式:CREATE VIEW 视图名 AS (查询语句) ;
例如:创建一个student表的视图V_student:
mysql> create view v_student AS select id,name from student;
查看表就可以发现多了一个V_student但它不属于表
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| score |
| student |
| v_student |
+------------------+
我们可以用select语句去查询里面的内容:
mysql> select * from v_student;
+------+--------+
| id | name |
+------+--------+
| 901 | 张老大 |
| 902 | 李二 |
| 903 | 张三 |
| 904 | 李四 |
| 905 | 王武 |
| 906 | 王六 |
| 907 | 肖雪 |
+------+--------+
修改视图怎么整?其实和创建视图是一样的。这里就不说......
那么如何删除视图?
DROP VIEW 视图名 ;
例如删除刚才的V_student视图
mysql> drop view v_student;
一般常用的约束有:
NOT NULL:不能为空
UNIQUE:唯一限定
PRIMARY KEY:主键(要求字段不能为空+唯一)
FOREIGN KEY :外键
CHECK :限定值的大小
DEFAULT :设定默认值(其实系统会自动给字段添加一个NULL的默认值进去)
下面对这些限定一一介绍:
1. NOT NULL
not null是指这个字段不能为空(NULL),只要被这个修饰过的字段就必须要填数据才行。
使用格式1:在创建表的同时就加入NOT NULL约束:
CREATE TABLE 表名 (字段名 字段类型 NOT NULL) ;
例如:创建一个text表并将id设为Not NULL
mysql> create table text(id int(10) not null,name varchar(20));
如果此时不插入id字段数据的话就回提示错误,如:
mysql> insert into text(name) values('小雨');
ERROR 1364 (HY000): Field 'id' doesn't have a default value
使用格式2:如果表已经创建好了这时我们想要添加NOT NULL 这个约束该怎么办呢?
这时可以使用ALTER修改字段类型来实现:
ALTER TABLE 表名 MODIFY 字段名 字段类型 ;
例如:给刚才创建的text表中name添加NOT NULL约束:
mysql> alter table text modify name varchar(20) not null;
2.UNIQUE约束
就是用来约束这个字段里面的数据唯一性,防止数据重复出现
使用格式1:在创建表时用创建最短的形式给字段加入唯一性约束:
CREATE TABLE 表名(
字段名 字段类型 NOT NULL ,
......
UNIQUE (id)
);
例如:创建一个text_2表,给id字段加入唯一性约束:
mysql> create table text_2(id int(10),name varchar(20),unique(id));
使用格式2:如果想要在已经建好的表中加入唯一性约束怎么玩?
这时我们可以使用ALTER 插入字段来实现。
ALTER TABLE 表名 ADD UNIQUE(字段类型) ;
例如:给刚才的text_2表中name字段添加唯一约束
mysql> alter table text_2 add unique(name);
使用格式3:多列添加唯一约束
ALTER TABLE 表名 ADD CONSTRAINT UNIQUE约束名 UNIQUE(字段名...) ;
注意:要向已经建好的表中添加唯一性约束前提是你表中那个约束的字段没有重复的才行
要不然违背了唯一性规则将无法添加。
2.1 怎么删除UNIQUE约束?
使用格式:ALTER TABLE 表名 DROP INDEX UNIQUE约束名;
例如:删除text_2中name字段的唯一约束
mysql> alter table text_2 drop index name;
注意:我们只添加一列UNIQUE约束,这个约束名为那一列的字段名;
添加多列的UNIQUE约束时,这个约束名,需要我们来重命名
3. PRIMARY KEY
主要用于标识字段中数据的唯一性以及不能为空(相当于NOT NULL+UNIQUE结合体)
并且一个表中只能有一个主键
使用格式1:在建表中添加主键
CREATE TABLE 表名(
字段名 字段类型 NOT NULL,
.......
PRIMARY KEY (主键字段)
)
例如:给创建text_3表中的ID添加主键
mysql> create table text_3(id int(10),name varchar(20),PRIMARY KEY(id));
使用格式2:给已经创建好的表中添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名) ;
例如:给text_3表中ID添加主键
ALTER TABLE text_3 ADD PRIMARY KEY(id) ;
3.1如何删除主键?
使用格式:ALTER TABLE 表名 DROP PRIMARY KEY ;
例如:给text_3表ID删除主键
ALTER TABLE text_3 DROP PRIMARY KEY ;
注意:字段中数据不符合主键的规则的也是无法设置主键的
4. FOREIGN KEY约束
一张表用来指向关联另外一张表,防止数据随便插入,关联的那张表中没有的字段是插入不了的。
使用格式1:建表添加外键CREATE TABLE 表名(字段1 字段类型,字段2 字段类型,
FOREIGN KEY(字段2) REFERENCES 表2(表2的字段));
例如:创建text_4表关联student表的ID字段
CREATE TABLE text_4(id int,name varchar(20),
FOREIGN KEY(id) REFERENCES student(id));
使用格式2:向已有表添加外键:
ALTER TABLE 表名 ADD FOREIGN KEY(列) REFERENCES 表2(表2的列) ;
例如:text_4表添加外键到student
ALTER TABLE text_4 ADD FOREIGN KEY(id) REFERENCES student(id) ;
4.1如何删除外键?
使用格式:ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名 ;
例如:删除text_4的外键约束
ALTER TABLE text_4 DROP FOREIGN KEY id ;
5.CHECK关键字
用来设定某一列值的范围
使用格式1:在创建表同事进行值的约束:
CREATE TABLE 表名 (字段名 字段类型,...,CHECK (字段名>=值)) ;
例如:创建一个text_5并给grade字段添加一个大于0的约束
CREATE TABLE text_5 (id int,name varchar(20),grade int CHECK (grade >=0)) ;
使用格式2:给已经建好的表中添加值约束
单列:ALTER TABLE 表名 ADD CHECK(列>=值);
例如:给text_5表中id 添加值大于等于1的约束:
ALTER TABLE text_5 ADD CHECK(id>=1);
多列:ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(列>=值 AND 列<=值) ;
5.1如何删除值限定?
使用格式:
ALTER TABLE 表名 DROP CHECK 约束名 ;
例如:删除text_5表中id的值的约束
ALTER TABLE text_5 DROP CHECK id ;
注意:单列的约束名字就是那个字段名字,多列就要使用自定义的约束名字。
6.DEFAULT关键字
表示是给字段设定一个默认值,当那个字段没有插入数据时,就使用默认值,
如有插入有值就使用插入的数据。mysql系统会自动添加一个默认值为NULL,
当你自己设置默认值时会覆盖NULL,如果将其删除就没有默认值了,就必须
要插入数据了包括NULL;
使用格式1:创建表是添加默认值
CREATE TABLE 表名 (字段名 字段类型 DEFAULT 默认值,字段名 字段类型...);
例如:创建表text_6表name字段添加默认值‘小雨’
CREATE TABLE text_6 (id int ,name varchar(20) DEFAULT '小雨');
使用格式2:给建好的表添加默认值
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值 ;
例如:给text_6表id字段添加默认值为1
ALTER TABLE text_6 ALTER id SET DEFAULT 1 ;
6.1 如何删除默认值?(这里和前面的约束删除方法稍有点差别)
使用格式:
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT ;
例如删除text_6表中id的默认值
ALTER TABLE text_6 ALTER id DROP DEFAULT ;
7.VIEW视图
可以用于显示指定显示的字段内容达到一种影藏效果,
并且视图可以用来被读取,添加由于只是原来表中的一部分所以添加会被限制
如何创建一个视图?
使用格式:CREATE VIEW 视图名 AS (查询语句) ;
例如:创建一个student表的视图V_student:
mysql> create view v_student AS select id,name from student;
查看表就可以发现多了一个V_student但它不属于表
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| score |
| student |
| v_student |
+------------------+
我们可以用select语句去查询里面的内容:
mysql> select * from v_student;
+------+--------+
| id | name |
+------+--------+
| 901 | 张老大 |
| 902 | 李二 |
| 903 | 张三 |
| 904 | 李四 |
| 905 | 王武 |
| 906 | 王六 |
| 907 | 肖雪 |
+------+--------+
修改视图怎么整?其实和创建视图是一样的。这里就不说......
那么如何删除视图?
DROP VIEW 视图名 ;
例如删除刚才的V_student视图
mysql> drop view v_student;