MySQL中关于表的约束问题
1.主键约束
我们在安装数据库的时候 发现一个问题 我们安装的这个数据库 本身是 innodb引擎的 在innodb的这个数据库的引擎中 我们的表 必须要有 主键约束
所谓的主键:当前数据的唯一标识(类似于人的身份证) 主键本身是不能重复的 而且是不能为空的
因为主键的约束 会生成主键索引 在生成主键索引的时候 会 将整条数据 都存储到叶子节点上.....
第一种编写主键的方式
CREATE TABLE t_dept(
id INTEGER PRIMARY KEY,
deptName VARCHAR(100),
deptDes VARCHAR(100)
)
CREATE TABLE t_dept(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
deptName VARCHAR(100),
deptDes VARCHAR(100)
)
第二种设置主键的方式
CREATE TABLE t_dept(
id INTEGER,
deptName VARCHAR(100),
deptDes VARCHAR(100),
PRIMARY KEY(id)
)
CREATE TABLE t_dept(
id INTEGER,
deptName VARCHAR(100),
deptDes VARCHAR(100),
PRIMARY KEY(id,deptName)
)
主键的第三种方式
ALTER TABLE t_user ADD PRIMARY KEY(id)
2.唯一约束
唯一约束:在我们这一列的数据中数据不能重复UNIQUE
CREATE TABLE t_dept(
id INTEGER PRIMARY KEY,
deptName VARCHAR(100) UNIQUE,
deptDes VARCHAR(100)
)
3.默认值 default
CREATE TABLE t_emp(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
empName VARCHAR(100),
gender INT DEFAULT 0,
address VARCHAR(200) DEFAULT '四川成都'
)
4.外键约束
比如现在有两张表
一张表 部门表
另一张 员工表
员工表中添加数据的时候 这个部门的id是不能随便设置值的 这个值 是要依赖于 部门表中的id字段 这个就可以用到 外键的约束
CREATE TABLE t_dept(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
deptName VARCHAR(100) UNIQUE,
address VARCHAR(200) NOT NULL
)
CREATE TABLE t_emp(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
empName VARCHAR(200),
deptId INT,
FOREIGN KEY(deptId) REFERENCES t_dept(id)
)
5.非空约束 not null
CREATE TABLE emp(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
empName VARCHAR(100) NOT NULL,
gender INT DEFAULT 0,
address VARCHAR(200) DEFAULT '四川成都'
)