文章目录
一、 数据库的设计理念
主键:一个表只能包含一个主键:查询删除修改数据
索引:访问数据。索引是对数据库表中的一列或者多列的值进行排序的一种结构。类似于书籍的目录
表第一列一般是主键,也是索引。
外键:关联两个表
第一范式:每一列的信息不可再分
第二范式:每张表只描述一件事(表量增加) 违反时需要同步更新
第三范式:表传递时都有自己的主键 是独立的
- ER图
长方形:表
圆形:属性字段
菱形:关系
若干的表组成了数据库(关联的表的集合)
二、 MYSQL在windows上的启动
-
MYSQL的启动
如果使用绿色版,先要将电脑上的MYSQL停止,并重启绿色版就可以在Navicat Premium连接上了,绿色版的用户名密码均为root
-
数据库端口修改 注意搜索全部修改
三、Navicat Premium的使用
- 使用Navicat Premium先创建连接,绿色版MYSQL的用户名和密码均为root ,端口3306,连接名见名知意即可。
- 点击一个mysql库—查询–新建查询 这样就可以写操作数据库的语句了
四、数据库的基本使用语法
--
表示注释
创建数据库:CREATE DATABASE 数据库名;
- 选中语句,按ctrl-shift-r运行,或者点击运行中的从这里运行一条
- 选中左边数据库按F5 刷新可以看到刚刚创建的数据库
删除数据库:DROP DATABASE 数据库名;
按ctrl-shift-r运行 选中左边数据库按F5 刷新
切换数据库:USE 数据库名;
- 创建表先切换库,否则会在头部显示的mysql中创建,切换到新建的库,按F5刷新,可以看到头部为@新建库名
查询所有数据库
show databases;
查询当前数据库中所有的表
show tables;
创建表
create table if not exists 表名(列名 列类型 约束...)
- 对表右键设计表中,查看表的结构,金色钥匙表示主键列
- 约束: 自增列 用于主键,如果一列删掉,再次添加,序号就会继续增加,不会减少
假如删除李四再次添加李四:可以看到李四的主键studentNo,由2变为3,因为自增列UNSIGNED AUTO_INCREMENT是数据库内部自动增加的
删除表
DROP TABLE 表名
具体操作如下:
create DATABASE MYschool;
show databases;
use MYschool;
show tables;
CREATE TABLE IF NOT EXISTS student(
studentNo INT UNSIGNED AUTO_INCREMENT,
studentName VARCHAR(20) NOT NULL,
studentSex INT NOT NULL
PRIMARY KEY(`studentNo`))ENGINE=INNODB DEFAULT CHARSET=utf8;
-- UNSIGNED AUTO_INCREMENT 自增列
-- IF NOT EXISTS 判断 当前表不存在 在执行下列语句
-- ENGINE =INNODB 设置存储引擎
-- DEFAULT CHARSET =utf8; 设置默认字符编码集
DROP DATABASE MYschool;
五、 数据库的主键与外键语句
- 主外键的理解:
例如:年级表单独拆分出来 所以学生表中的年级类型为int而不是char
科目表 也相同 学生表中使用数字代替,在科目表中再详细记录科目名称,因此这几张表要添加主外键约束,用于约束数据,防止增加垃圾数据 - 主键表会约束外键表,主键表存在的数据外键表才能存在
外键表也会约束主键表,如果删除主键表,不可以删。 因为有外键表,因此要先删除外键表才可以删除主键表 否则外键表的数据不知道怎么来的
需要关系时使用中间表
-- 添加主键
ALTER TABLE test ADD PRIMARY KEY (id);
desc test;
-- 删除主键
ALTER TABLE test DROP PRIMARY KEY;
-- 查看result表结构可以看到没有主键,result是一个中间表,student表通过result表可以查看subject表
desc result;
-- 删除外键
ALTER TABLE result DROP FOREIGN KEY `FK_subject_result_subno`;-- 删除result外键subjectNo与subject主键subjectNo的约束
ALTER TABLE result DROP FOREIGN KEY `FK_student_result_stuno`; -- 删除result外键studentNo与student主键studentNo的约束
-- 查看result表中的外键是否删除成功就在result中随机添加垃圾数据 此时可以添加成功
-- 添加外键
-- 通过主键表subject的主键列 subjectNo 约束外键表result的外键列subjectNo
-- 如果约束失败,可能是已经被约束,需要重新解除约束,再次进行约束即可。
ALTER TABLE result ADD CONSTRAINT FK_subject_result_subno FOREIGN KEY (subjectNo) REFERENCES `subject`(subjectNo);
-- 通过主键表student的主键列 studentNo 约束外键表result的外键列studenttNo
ALTER TABLE result ADD CONSTRAINT FK_student_result_stuno FOREIGN KEY (studentNo) REFERENCES student(studentNo);
六、 数据库表的基本操作
-- 创建newStudent将student表中的原有数据 复制到newStudent 中
CREATE TABLE newStudent SELECT * FROM student;
-- 创建newStudent表 复制表结构 不包含数据
CREATE TABLE newStudent like student;
-- 创建一个临时表
-- 临时表将在你连接MySql期间 存在,
-- 当断开连接时MySql将自动删除表并释放所有空间,也可手动删除
create TEMPORARY TABLE testStudent(
id int ,
name VARCHAR(20)
);
-- 创建临时表 并带有基础数据 (基础数据来自于 现有表中 )
-- where 查询的条件 列名= 值
create TEMPORARY TABLE testStudent
SELECT *