MySql入门学习(数据库mysql)
DAY40
今日内容:
约束
表之间的关联关系
约束
约束:用于保证数据的完整性 和 合法性
分类:
PRIMARY KEY:主键约束 用于唯一的标识记录
从约束角度来看 主键约束 等同于 非空约束 和 唯一约束
作用: 区分两个相同的记录 提高查询效率 可以建立关联关系
语法 : CREATE TABLE stu (id INT PRIMARY KEY ,name CHAR(5));
CREATE TABLE stu1 (id INT UNIQUE NOT NULL,name CHAR(5));
多列联合主键:CREATE TABLE t1 (idcard CHAR(18) , phonenumber CHAR(11),PRIMARY KEY (idcard , phonenumber));
练习 : 创建一个员工表 里面存储 员工信息 员工编号 姓名 年龄 性别
CREATE TABLE employee (id INT PRIMARY KEY , name CHAR(10) NOT NULL,age INT ,
sex CHAR(10) DEFAULT 'man');
FOREIGN KEY 和 REFERENCES : 外键约束 标识该字段为该表的外键
作用: 建立表与表之间的联系
添加外键约束时: 会产生限制
1 . 必须先创建好被关联的表,也就是主表 ,然后创建从表
2. 主表的数据应该先插入,从表后插入
3. 在删除主表数据前 , 得先删除从表相关数据
4. 在更新主表数据前 , 得确保从表没有数据关联
练习: 创建一个部门表 包含 部门序号 部门名称
创建一个员工表 包含 员工序号 员工姓名 部门序号
先创建部门表: CREATE TABLE dept (id INT PRIMARY KEY ,name CHAR(10) );
再创建员工表: CREATE TABLE emp (id INT PRIMARY KEY , name CHAR(10),
dept_id INT , FOREIGN KEY(dept_id) REFERENCES dept(id) );
总的来说:外键就相当于与把一张表的字段 标识成 另一张表的主键
外键加上以后 :主表中的数据 删除 和更新时 都受到限制
解决的方案是: 为 外键 添加 级联操作
级联操作: 指的是同步更新和删除
语法: 在创建外键是 在后面 添加
ON UPDATE CASCADE 同步更新
ON DELETE CASCADE 同步删除
创建部门表: CREATE TABLE dept (id INT PRIMARY KEY ,name CHAR(10) );
创建员工表: CREATE TABLE emp (id INT PRIMARY KEY , name CHAR(10),dept_id INT,
FOREIGN KEY(dept_id) REFERENCES dept(id)
ON UPDATE CASCADE
ON DELETE CASCADE
);
NOT NULL:非空约束 数据不能为空
语法 : CREATE TABLE student ( id INT NOT NULL , name CHAR(10) NOT NULL);
UNIQUE : 唯一性约束 标识该字段的值不能重复
作用: UNIQUE 是一种索引 索引是一种数据结构 用于提高查询效率
一张表中可以有多个唯一约束
语法:
单列唯一约束 : CREATE TABLE t2 (idcard CHAR(18) UNIQUE);
多列联合唯一约束: CREATE TABLE t3 (idcard CHAR(18) , phonenumber CHAR(11) ,
UNIQUE(idcard ,phonenumber ));
多列联合中 :idcard 相同 和phonenumber 相同 才会报错
AUTO_INCREMENT:自动增长 标识该字段的值自动增长
作用: 通常和主键字段使用 只能用于整数类型
语法: CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT ,name CHAR(5));
修改自动增长的起始位置: ALTER TABLE t1 AUTO_INCREMENT = 5;
DEFAULT: 默认值约束 为该字段的设置默认值
语法 : CREATE TABLE user (id INT NOT NULL , name CHAR(10) NOT NULL , sex CHAR(1) DEFAULT '男' );
表之间的关联关系
所有的数据不可能放入同一张表中,会造成浪费空间 结构混乱 扩展性差等等问题
所以需要分表处理,分表又会产生新的问题,表与表之间需要有联系
表之间的关系
一对一 : 一张表中的一条记录对应另一张表的一条记录多对一 : 一张表中的多条记录对应另一张表的一条记录
多对多 : 两张表双向的多对一,即多对多
多对多需要定义一张关系表来专门存放二者的关系
建立表之间的关系 就需要用到 FOREIGN KEY 外键约束
以上为本次学习内容