【数据库】4、mysql约束

1.约束

约束的作⽤:对表中的数据进⾏限制,保证数据的正确性、有效性和完整性。⼀个表如果添加了约束,不正确 的数据将⽆法插⼊到表中。约束在创建表的时候添加⽐较合适。

1.1主键约束:在添加数据时,约束重复数据的行为,需要一个字段保证数据是唯一的,所以这个字段的值是不能为null的

特点:非空且唯一

分类:

自然主键:数据中本身存在一个非空并且唯一的字段 -- 不建议使用

代理主键:字段和数据没有直接联系 id

int(6) - 自动增长(mysql自带特性)   - 序列(oracle特性 sequence)

varchar(32)  - UUID() 【java中也有UUID.randomUUID】

 -- UUID()会产生“-”,可以用replace去掉

select replace(UUID(),"-","");

添加方式:

-- 表存在

alter table user add primary key(id); -- 保证添加主键的字段非空且唯一

-- 创建表时添加主键

1.int型主键

create table user(
       id int(6) primary key auto_increment,
       username varchar(20)
);
insert into user values (1,'lucy');-- 手动指定id
insert into user values (null , 'jack');-- 自动增长的序列才能null
-- 设置了自动增长的主键,自动增长的特性是删不掉的
truncate user2;
insert into user2 values (null,'jack');
alter table user2 drop primary key;-- 报错

2.字符串型主键

create table user3(
                      id int(6) ,
                      username varchar(32)primary key -- 当字符串为主键时
);
insert into user3 values (1,'lucy'); -- 手动指定
insert into user3 values (1,replace(UUID(),'-',''));-- 使用UUID()自动生成主键

1.2唯一性约束

-- 唯一性约束unique
-- 自动在这一列中生成索引 - index
-- 在已有的表中添加唯一约束 user2-username
alter table user2 add unique (username);
show index from user2;
-- 在已有的表中删除唯一索引
alter table user2 drop index username;
show index from user2;

1.3非空约束

-- 非空约束
-- 添加非空约束
alter table user3 add password varchar(20) not null default '12345';
insert into user3(id,username) values (2,replace(UUID(),'-','')); -- password自动填写‘12345’
-- 删除非空约束
alter table user3 modify password varchar(20);
insert into user3 (id, username) VALUES (3,replace(UUID(),'-',''));-- password可为null
1.4外键约束
什么是外键:在从表中与主表主键对应的那⼀列,如:员⼯表中的 dep_id
主表:⼀⽅,⽤来约束别⼈的表
从表:多⽅,被别⼈约束的表

-- 2) 创建从表employee并添加外键约束emp_depid_fk
-- 多⽅,从表
create table employee(
 id int primary key auto_increment,
 name varchar(20),
 age int,
 dep_id int, -- 外键对应主表的主键
 -- 创建外键约束
 constraint emp_depid_fk foreign key (dep_id) references
department(id)
);

1.5.表与表之间的关系

1.5.1⼀对多

⼀对多(1:n)例如:班级和学⽣,部⻔和员⼯,客户和订单,分类和商品
⼀对多建表原则:在从表(多⽅)创建⼀个字段,字段作为外键指向主表(⼀⽅)的主键

1.5.2多对多

多对多(m:n)例如:⽼师和学⽣,学⽣和课程,⽤户和⻆⾊
多对多关系建表原则:需要创建第三张表,中间表中⾄少两个字段,这两个字段分别作为外键指向各⾃⼀⽅的主键。

create table student (
    sid int,
    sname varchar(20)
);
create table course(
    cid int,
    cname varchar(20)
);
create table relation(
    sid int,
    cid int
); -- 创建三个表
insert into student values (1,'张三'),
                           (2,'李四'),
                           (3,'王五');
insert into course values (1,'语文'),
                          (2,'数学'),
                          (3,'英语');
alter table student add primary key (sid); -- 设置主键
alter table course add primary key (cid);
alter table relation add constraint s_id_fk foreign key (sid)
    references student (sid);
alter table relation add constraint c_id_fk foreign key (cid)
    references course (cid);-- 设置外键
insert into relation values (1,1),(1,2),(1,3),(2,3),(3,1),(3,3);

1.5.3一对一

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值