系列文章目录
DDL和DML操作
目录
一、DML(数据操作语言)
1.插入数据
insert into tb_name values ( value1,value2,.... ) ;insert into tb_name ( col_name [ , col_name2, ..., col_namen ])values ( value1 [ ,value2, ..., valuen ]) ,( value1 [ ,value2, ..., valuen ]) ,...( value1 [ ,value2, ..., valuen ]) ;insert into tb_name ( tar_col_name1 [ , tar_col_name2, ...,tar_col_namen ])select ( src_col_name1 [ , src_col_name2, ..., src_col_namen ])from src_tb_name[ where condition ]
2.数据更新
update tb_nameset col_name = value1, col_name = value2, ... , col_namen = valuen[ where condition ]
不加where就是更新所有的
3.数据删除
delete from tb_name[ where condition ]
不加where就是删除所有的
二、数据库设计
1. 转化为关系模型 根据概念模型,将实体、关系和属性转化为关系数据库的表、列和键。 每个实体将成为一个表,每个属性将成为表的列,关系将成为表之间的关联
2. 定义关系模式 确定每个表的结构,包括表名、列名、数据类型、长度、约束和默认值 等。 确保表的结构能够准确地表示和存储数据,并满足数据的完整性和一致性 要求。
3. 主键和外键定义 为每个表定义主键,以唯一标识每个记录。确定主键的选择标准,并确保 它们的唯一性和稳定性。根据实体之间的关系,定义外键来建立表之间的 关联。
4. 处理关系 根据实体之间的关系类型(一对一、一对多、多对多),使用适当的关系 处理方法来建立关联关系。常见的处理方法包括主键-外键关联、联接表 和引用完整性约束等。
5. 范式化优化 应用规范化理论,对逻辑模型进行优化。确保模型满足第一范式 (1NF)、第二范式(2NF)和第三范式(3NF)等范式,消除冗余和数据 依赖。(具体范式,下面章节介绍)
6. 完整性约束 定义适当的完整性约束来保护数据的一致性和有效性。 例如,主键约束、唯一约束、非空约束、默认值约束等。确保只有有效和 合法的数据可以插入和更新。
主键和外键
主键:
能做主键的列必要满足非空唯一的特点
只要满足非空唯一的任何列都可以做主键
可以让表中一个有意义的列做主键
例如,学号,它既表示学生的学号,又作为表中的主键,因为这个列满足 非空唯一的条件
可以找一个没有意义的列做主键 其作用就是标识一行数据,大部分情况下都是用没有意义的列去做主键, 例如ID列
可以让多个列联合在一起做表中的主键 这个主键就是一个联合主键,要求这几个列的值联合在一起是非空唯一的
外键:
表中的某一个列声明为外键列,一般这个外键列都会引用另外一张表的主 键列的值。其实只要是具体唯一约束的列,就可以被另一种表的外键列所引用。
一张表的主键列中出现过的值,都可以在另一张表的外键列中使用。
外键列值也可以为空的,提前是这个外键列没有做主键或联合主键。
如果把B表中的联合主键,引用到A表中做外键,那么这个外键就是一个联 合外键
数据库范式
1 2 3 巴斯-科德范式 4 5范式
三、DDL(数据库定义语言)
1.创建表
数据类型额外补充(了解即可): 存储选项型数据 ENUM,SET-- 格式 1create table 表名 (字段名 数据类型 [ 列约束类型 ] ,字段名 数据类型 [ 列约束类型 ] ,字段名 数据类型 [ 列约束类型 ] ,字段名 数据类型 [ 列约束类型 ] ,...) ;-- 格式 2create table 表名 (字段名 数据类型 [ 列约束类型 ] ,字段名 数据类型 [ 列约束类型 ] ,字段名 数据类型 [ 列约束类型 ] ,...[ 表级约束 ] ,[ 表级约束 ] ,...) ;
数据类型
常见约束:
not null,unique,primary key ,foreign key,check,default
非空约束(not null),不能声明成表级约束
特殊建表
从一个表中拿数据或者结构去建表,用create table 表名 as select来建表
级联动作
restrict(默认) : on delete restrict on update restrict 当主表删除记录时,如果从表中有相关联记录则不允许主表删除 当主表更改主键字段值时,如果从表有相关记录则不允许更改
cascade:数据级联更新 on delete cascade on update cascade 当主表删除记录或更改被参照字段的值时,从表会级联更新 s
et null : on delete set null on update set null 当主表删除记录时,从表外键字段值变为null 当主表更改主键字段值时,从表外键字段值变为null
2.修改表
add操作:alter table 表名 add 字段名 数据类型 ;alter table 表名 add 字段名 数据类型 first ;alter table 表名 add 字段名 数据类型 after 字段名删除字段alter table 表名 drop 字段名 ;修改数据类型(modify)alter table 表名 modify 字段名 新数据类型 ;修改字段名alter table 表名 change 旧字段名 新字段名 新数据类型 ;修改约束alter table 表名 add constraint 约束名 具体约束 ;
更改约束
查询约束 SQL 语句:删除或新增约束语法:案例测试:select constraint_name,constraint_typefrom information_schema .table_constraintswhere table_name = ' 表名 ' ;-- 添加主键约束 ( 约束名无效 )alter table 表名 add [ constraint 约束名 ] primary key ( 列名 ) ;-- 添加唯一约束alter table 表名 add constraint 约束名 unique ( 列名 ) ;-- 添加外键约束alter table 表名 add constraint 约束名 foreign key ( 列名 ) references关联的表名 ( 关联的列名 一般是主键 ) ;-- 删除约束 ( 不能删除主键约束 )alter table 表名 drop constraint 约束名 ;
3.重命名表
rename table old_tb_name to new_tb_name;或alter table old_tb_name rename [ to ] new_tb_name;
4.删除表
drop table [ if exists ] tb_name [ , tb_name1, ..., tb_namen ] ;
5.截断表
truncate table tb_name;
删除表中所有的数据
释放表的存储空间
注意事项: