一、navicat建表,增删改查数据

1、新建表

展开数据库——选择”表”——新建表
image-20201215214144756.png
添加栏位——写名,类型,主键等——保存
image-20201215214343309.png
image-20201215214458158.png

2、修改表的结构

选中要修改的表——设计表
image-20201215214643983.png

3、没有主键的提示

image-20201215214718707.png

4、添加、修改数据

+添加数据,-删除选中的数据,√完成,记得保存
image-20201215214902002.png

二、数据库完整性

为什么需要完整性

输入的类型是否正确?
——年龄必须是数字
输入的格式是否正确?
——身份证号码必须是18位
是否在允许的范围内?
——性别只能是“男”或者“女”
是否存在重复输入?
——学员信息输入了两次是否符合其他特定要求?
——学生的出生日期必须小于入学日期

概念

数据完整性指的是保证数据的一致性和准确性。

四种数据完整性

image-20201215215848013.png

域完整性

要求列满足特定要求,完成途径:数据类型,非空约束,默认值
image-20201215215927145.png

实体完整性

要求行是唯一的,完成途径:主键,唯一键,自增列
image-20201215215943738.png

引用完整性

一个表引用另一个表的数据是正确的,完成途径:外键
image-20201215220040435.png

自定义完整性

自定义的规则,完成途径:存储过程,触发器等
image-20201215220101584.png

数据类型

image-20201215220248040.png
char(M):M的范围 0-255
varchar(M):M的范围0-65535
int(M):M代表显示宽度,不影响值得范围,用于值的宽度小于指定的列宽度时从左侧填满宽度。
decimal(M,D):M代表总位数,默认值10,最大值65,D代表小数位数,默认值0
思考
电话号码一般使用什么数据类型存储?
性别一般使用什么数据类型存储?
年龄信息一般使用什么数据类型存储?
照片信息一般使用什么数据类型存储?
薪水一般使用什么数据类型存储?
生日一般使用什么数据类型存储?

非空约束

image-20201215220626607.png
思考
学员姓名允许为空吗?
家庭地址允许为空吗?
电子邮件信息允许为空吗?
考试成绩允许为空吗?

默认值

image-20201215220904234.png
思考
哪些列可以设置默认值?

主键

主键是确定数据库中的表的记录的唯一标识字段
一个表只能有一个主键
主键列可以是表中的一个字段,也可以包含多个字段
主键的值是唯一的且不为空
尽量选择更新少的一个字段为主键
image-20201215221312540.png

自增列

自增列的值数据库会自动插入值,这些值自动增长,不需要用户插入数据(用户也可以插入数据)
设置自增列的列必须是主键,数据类型为int(整数)
image-20201215221547292.png

唯一键

唯一键设置某一列的值是唯一的,可以有空值
一个表中可以有多个唯一键
本质是唯一索引
image-20201215221838811.png

外键

一个表1使用另一个表2的数据
表2中建立主键,表2是主表
表1中建立外键,表1是子表(外键表)
建立外键时要求外键列和主键列的类型一样
用户表中uid是主键
image-20201215222330612.png
文章表中的uid要使用用户表中uid列的值
image-20201215222719520.png
主外键建立后的注意事项
当主表中没有对应的记录时,不能将记录添加到子表
不能更改主表中的值而导致子表中的记录孤立
子表存在与主表对应的记录,不能从主表中删除该行
删除主表前,先删子表

注释:

IDENTITY:标识列
CHECK 约束(CK):检查约束
PRIMARY KEY(PK):主键
UNIQUE KEY(IX):唯一键
FOREIGN KEY(FK):外键

三、数据库模型图

image-20201215223010177.png
image-20201215223051352.png
image-20201215223114459.png
image-20201215223147261.png

四、命令

查看数据库有哪些表

show tables [from 数据库] [like 'pattern'];
示例:

  1. show tables; -- 查看所有表
  2. show tables like 'a%'; -- 查看表名以a开头的表

建表

  1. create table [if not exists] 表名
  2. (列名 数据类型 非空|主键|自增列|默认值|唯一键,主键|唯一键|外键);

示例:

  1. create table students(
  2. student_no int primary key auto_increment, -- 主键,自增列
  3. student_name char(20) not null, -- 非空
  4. pwd char(20) default '123456', -- 默认值
  5. sid char(20) unique , -- 身份证号是唯一键
  6. grade_id int , -- 年级编号
  7. [primary key(studnet_no),] -- 主键
  8. [unique(sid),] -- 唯一键
  9. [constraint fk_stu_grade] foreign key(grade_id) references grade(grade_id) #外键
  10. )ENGINE=InnoDB DEFAULT CHARSET=utf8;

说明: 主键和唯一键,在列名后边写了,就不用在所有列后边写了 外键必须在所有列后边写 ENGINE 是存储引擎,InnoDB支持事务 DEFAULT CHARSET是字符集

删表

drop table [if exists] 表名;
示例:

  1. drop table stu; -- 删除stu
  2. drop table if exists stu; -- 如果stu表存在,就删除,不存在,就不删除,可以避免异常

改表

alter table 表名 添加约束|删除约束|操作列;
示例:

  1. create table students(
  2. student_no int,
  3. student_name char(20) not null, -- 非空
  4. pwd char(20) default '123456', -- 默认值
  5. sid char(20), -- 身份证号是唯一键
  6. grade_id int -- 年级编号
  7. )
  8. alter table students add primary key(student_no); -- 添加主键
  9. alter table students add unique(student_no); -- 添加唯一键
  10. alter table students add [constraint fk_stu_grade] foreign key(grade_id) references grade(grade_id) ; #添加外键
  11. alter table students drop primary key; -- 删除主键
  12. alter table students drop index 约束名; -- 删除唯一键
  13. alter table students drop foreign key 约束名; -- 删除外键
  14. alter table students add COLUMN sex char(2); -- 添加性别列
  15. alter table teacher MODIFY sex varchar(2); -- 修改列的类型
  16. alter table teacher change sex sex3 CHAR(2); -- 改列名
  17. alter table teacher drop sex3; -- 删除列sex3

重命名表

rename table 旧表名 to 新表名;
示例:
— 把bu表改成bu2表
rename table bu to bu2;

查看表的结构

desc 表名;
示例:
— 查看学生表students的结构
desc students;

总结

1.创建表时要考虑哪些事项?【重要】

  • 表名,列名,数据类型,主键,外键,非空约束,默认值,自动增长

    2.关于主键的说明

  • 主键是确定数据库中的表的记录的唯一标识字段

  • 一个表只能有一个主键
  • 主键列可以是表中的一个字段,也可以包含多个字段
  • 主键的值是唯一的且不为空
  • 尽量选择更新少的一个字段为主键

    3.mysql常用的数据类型有哪些?

  • 文本类型: char固定长度字符, varchar可变长度字符, text 长文本

  • 日期和时间: datetime:年月日时分秒, date:年月日
  • 数: int 整数,float:小数,浮点数,decimal定点数