创建表时添加列级约束:
语法格式
CREATE TABLE IF NOT EXISTS 表名(
列名 类型 约束,
列名 类型 约束,
列名 类型 约束
);
举例说明
创建有students表,如下要求,ID列作为表的标识列,NAME不能为空,如果没有爱好(HOBBY),就默认是读书,姓名只能是男和女,年龄(age)只能是>10&&<16;
CREATE TABLE IF NOT EXISTS students(
id INT(10) PRIMARY KEY,#主键约束
NAME VARCHAR(20) NOT NULL,#非空约束
hobby VARCHAR(255) DEFAULT '读书',#默认约束
gender CHAR(1) CHECK(gender='男' OR gender='女'), #检查约束
age INT CHECK(age>10 AND age<16)#检查约束
);
表级约束不支持非空约束和默认约束。
在创建表时添加表级约束:
语法
CREATE TABLE IF NOT EXISTS 表名(
列名 类型,
列名 类型,
列名 类型,
CONSTRAINT 约束名 约束类型(列名),#CONSTRAINT,约束名可以省略
CONSTRAINT 约束名 约束类型(列名),
...
);
举例说明
设计表,有字段emp_id 员工表的主键,dept_id 部门表的主键,员工表的外键,建表时要先建部门表。
CREATE TABLE IF NOT EXISTS employees(
emp_id INT(10),
job VARCHAR(20),
name VARCHAR(20),
gender CHAR(1),
sal DOUBLE(7,2),
dept_id INT,
CONSTRAINT PK PRIMARY KEY(emp_id),#主键,在MySQL中主键的约束名无法修改
CONSTRAINT fk_employees_departments FOREIGN KEY(dept_id) REFERENCES departments(id)#外键,约束名一般包含两张表的表名
#如下写法也可以
# PRIMARY KEY(emp_id),
# FOREIGN KEY(dept_id) REFERENCES departments(id)
);
就是当作为主键的字段可能存在重复值,无法确定这条数据的唯一性时,再加上一个字段,两个字段联合起来确定这条数据的唯一性。
语法格式:
PRIMARY KEY(字段1,字段2)
注意:
创建a表时需要b表的字段1作为a表的外键列,那么b就是主表,a就是从表;而且主表必须先存在,删除时要先删除从表才能删主表。
列级约束语法
ALTER TABLE 表名 MODIFY COLUMN 列名 类型 约束类型;
表级约束写法
ALTER TABLE 表名 ADD 约束类型(列名);
1. 添加非空约束
ALTER TABLE 表名 MODIFY COLUMN 列名 类型 NOT NULL;
2. 添加默认约束
ALTER TABLE 表名 MODIFY COLUMN 列名 类型 DEFAULT 值;
3.添加检查约束(MySQL不支持检查约束)
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK(约束条件);
3. 添加主键
#方式一:列级约束的写法
ALTER TABLE 表名 MODIFY COLUMN 列名 类型 PRIMARY KEY;
#方式二:表级约束的写法
ALTER TABLE 表名 ADD PRIMARY KEY(列名);
4. 添加唯一约束
#方式一:列级约束的写法
ALTER TABLE 表名 MODIFY COLUMN 列名 类型 UNIQUE;
#方式二:表级约束的写法
ALTER TABLE 表名 ADD UNIQUE(列名);
5.添加外键
#列级约束不支持外键就不写了
ALTER TABLE 表名 ADD FOREIGN KEY(外键列列名) REFERENCES 主表(联合列列名);
1.删除非空约束
ALTER TABLE 表名 MODIFY COLUMN 列名 类型;
2.删除默认约束
ALTER TABLE 表名 MODIFY COLUMN 列名 类型;
3.删除唯一约束
ALTER TABLE 表名 DROP UNIQUE 键名;
4.删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
5.删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 键名;
在插入数据时,不需要用户自己插入值,系统提供默认的序列值.关键字时AUTO _INCREMENT。
特点:
①:要求自增长列是一个key;
②:一个表至多只有一个标识列;
③:标识列的类型只能是数值型;
④:可以通过【SET AUTO_INCREMENT_INCREMENT=值】来设置步长;也可以通过手动插入值来设置起始值;
创建表时设置标识列;
语法格式:
CREATE TABLE 表名(
列名 类型 约束 AUTO_INCREMENT,
...
);
修改表是设置标识列:
1.设置标识列
ALTER TABLE 表名 MODIFY COLUMN 列名 类型 约束 AUTO_INCREMENT;#约束看需求添加与否
2.删除标识列
ALTER TABLE 表名 MODIFY COLUMN 列名 类型 约束;