首页 > 代码库 > Mysql(个人学习笔记20170321-20170328)
Mysql(个人学习笔记20170321-20170328)
Mysql(个人学习笔记20170321-20170328)
数据库定义:按数据结构组织,存储,管理数据的仓库
常见数据库:Mysql,Oracle,Sql server
数据库由二维表组成,表格由若干记录,每条记录由若干字段组成
理解为Excel的话 列为字段,行为记录
设计数据库步骤
1,确定功能列表
2,确定可见数据参数类型
常用类型有
Int 整数型
Float 小数
Varchar(长度) char(长度) 字符串 (赋值需要单引号)
区别:varchar 长度可变,不足位数自动取消,节约空间,但查询效率低
Vhar 长度固定,占空间,但查询效率高
3,确定实体->数据集合->一类数据对应一类实体
4,确定每个实体的属性
5,确定实体间的关系
主表:主键 从表:外键
主键用来唯一标记一条记录
主外键类型,长度必须一致
每张表应有主键约束
可以多个字段组合成一个主键,或新增一个自增字段做主键
6数据库的约束
Primary key 主键约束
Foreign key 外键约束
Not null 非空约束
Enum 枚举
Unique 唯一约束
Default 默认值
Mysql安装(见安装手册)
命令提示符CMD下执行
(可添加环境变量)
如已添加环境变量,CMD下:mysql_-uroot_-p密码 可直接进入
远程进入mysql_-hIP地址_-P端口号_-uroot_-p密码
数据库命令
显示 show database
创建库 create database 库名
进入库 use 库名
删除库 drop database 库名
显示表show tables
创建表 create table表名(字段 类型,字段 类型.....)
删除表 drop table 表名
查看表结构 desc 表名
增加表字段 alter table 表名 add 字段名 类型
删除表字段 alter table 表名 drop column(可不写) 字段名
修改字段属性 alter table 表名 modify 字段名 要修改为的字段名 要修改为的类型
Navicat工具
Connection 连接
创建库,创建表(略)
示例
学生信息系统
表名 |
字段名 |
字段类型 |
说明 |
约束(中文) |
约束(英文) |
学生表 |
XH |
varchar(10) |
学号 |
主键 |
primary key |
XM |
varchar(20) |
姓名 |
非空 |
not null |
|
NL |
int |
性别 |
/ |
/ |
|
XB |
/ |
籍贯 |
枚举 |
enum |
|
JG |
varchar(20) |
年龄 |
/ |
/ |
|
BJ |
varchar(10) |
班级 |
非空 |
not null |
|
SFZH |
varchar(18) |
身份证号 |
唯一 |
unique |
|
ZCRQ |
timestamp |
注册日期 |
默认值 |
default current_timestamp |
|
|
|
|
|
|
|
表名 |
字段名 |
字段类型 |
说明 |
约束(中文) |
约束(英文) |
课程表 |
kcm |
varchar |
课程名 |
非空 |
not null |
kch |
varchar |
课程号 |
主键 |
primary key |
|
|
|
|
|
|
|
表名 |
字段名 |
字段类型 |
说明 |
约束(中文) |
约束(英文) |
成绩表 |
xh |
varchar |
学号 |
外键 |
foreign key |
kch |
varchar |
课程号 |
外键 |
foreign key |
|
cj |
int |
成绩 |
非空约束 |
not null |
任意建立库,在建好的库下queries下编写
create table xsb(
xh varchar(10) primary key,
xm varchar(20) not null,
xb enum(‘男‘,‘女‘),
jg varchar(50) not null,
nl int not null,
bj varchar(10) not null,
sfzh char(18) unique,
zcrq timestamp default current_timestamp)
create table kcb(kch int primary key,
kcm varchar(50) not null)
create table cjb(kch int,foreign key(kch) references kcb(kch),
xh varchar(10),foreign key(xh) references xsb(xh),
cj int not null)
分段,分表选中,右键,run selected
补:自增字段做主键示例
Id int primary key auto increment
Auto increment(自动增长)
注释 -- 或者 /*多行注释*/
建表时需先建主表,再建从表
删表时候先从表,再主表
Select语句
基本格式
Select *
From 表
Where 条件
模糊查找 示例
姓张
Xm like ‘张%’
李某某
Xm like ‘李__’(2个下划线)
比较运算符 <, > ,>= ,<=, != (<>也是不等于)
两者之间 between A and B (包括边界)
和条件 and
或条件 or
在....范围内 in 不在 not in
存在 exists 不存在 not exists
排序 order by 条件 asc升序/desc降序
为空 is null
不为空 is not null
统计 count(*)统计全纪录 count(字段名) 统计该字段不为空的纪录
最高 最低 平均 总和 max min avg sum
分组 group by 条件
去重 select distinct 字段
分组后条件统计 having count(*)
分组后条件筛选 having 条件
补 示例 统计男女人数
Select count(*)
From xsb
Group by xb
以上查询并不显示男女字段,如需显示
Select count(*),xb
From xsb
Group by xb
在select后面查询的结果均显示
多表查询
嵌套查询:将一个select的查询结果作为另一个select的查询条件
示例
查张三的数学成绩
张三在xsb
数学在kcb
成绩在cjb
则嵌套查询为
Select cj
From cjb
Where xm=(select xm from xsb where xm=’张三’) and kch=(select kch from kcb where kcm=’数学’)
当有可能存在多个结果时 ‘=’ 可以换成in
优点:查询效率高,记录不会增加
缺点:复杂,逻辑性强
适用:查询结果来源于同一张表
等值连接:
多张表记录按个数连乘,组成的结果称之为:笛卡尔积
示例一样
Select cj
From xsb,kcb,cjb
Where xsb.xh=cjb.xh and kcb.kch=cjb.kch and xm=’张三’ and kcm=’数学’
写清主键外键对应关系即可
优点:简单
缺点:效率不高,记录快速增长
适用:不适用于海量数据
内连接
直接用示例
Select cj
From xsb inner join cjb on xsb.xh=cjb.xh inner join kcb on kcb.kch=cjb.kch
Where xm=’张三’ and kcm=’数学’
外连接(左,右)
显示左/右表的全部数据
示例
Select cj
From xsb left join cjb on xsb.xh=cjb.xh
显示xsb全部信息和cjb的信息
Select cj
From cjb right join xsb on xsb.xh=cjb.xh
显示xsb全部信息和cjb的信息
左右可效果一样
新增表数据
Insert into 表名(字段1,字段2,字段3)
Values(‘值1’,’值2’,’值3’)
添加所有字段记录时,可insert into() 但values后面值的顺序必须一致
也可(字段1,字段3,字段5)如此加入,但是需要注意,创建表时有约束为非空字段的地方必须要写上值才能执行
修改功能
Update 表名 set 字段=修改后的值
Where 条件
修改多个值
Update 表名 set 字段=修改后的值,字段2=修改后的值
级联更新
Navicat下选从表,design编辑,foreign key外键下 on updata/on delete
四种
RESTRICT / NO ACTION 从表记录不存在时才能更新/删除从表,主表不变
CASCADE 更新/删除主表时,自动更新/删除从表,更新/删除从表时,主表不变
SET NULL 更新/删除主表时,自动更新从表值为NULL,删除从表时,主表不变
补充:
修改表名 alter table 表名 rename 新表名
修改字段名 alter table 表名 change 字段名 新字段名 新类型
Limit m,n 数据从m+1行显示,共显示n行 m从0开始记
删除
删除表的所有记录 Delete from 表名
删除某记录 delete from 表名
Where 条件
统计sql语句执行时间
Set profiling =1(0为关闭)
查看是否开启 select @@profling
查看执行时间 show profiles
Mysql(个人学习笔记20170321-20170328)