1、 数据库;按照数据的结构来存储和管理数据的仓库。表是数据库中存储数据的基本单位。是一个存储数据的地方,
2、 数据库系统DBS=数据库DB+数据库管理系统DBMS
关系型数据库管理系统RDBMS
关系型数据库用表来表示关系。
关系型数据库是建立在关系基础上的数据库系统,借助于集合代数等数学的概念和方法来处理数据库中的数据。
关系型数据库核心元素,核心是二维表存储数据
数据行、row 记录数据表由数据行和数据列组成
数据列(字段)field
数据表 table
数据库(表的集合)
客户端和数据库建立连接--》连接认证--》发送数据指令--》请求程序--》数据库系统服务器(包括管理数据工具和数据的集合)处理操作指令--》 得到结果--》存储与管理数据库--》返回处理结果--》断开连接
dos命令:Mysql -h127.0.0.1 -p 3306 -proot -proot
Navicat操作
连接数据库->用户名->端口号->IP-> 创建数据库->创建表->添加字段->设计表->增加->修改->删除数据
打开navicat—点击链接—新建数据库MYSQL
连接名:local
主机:localhost
用户名:root,
端口:3306
密码:123456 点击连接,连接成功
打开表格方式
在新建的mysql—由查询点进去—新建查询 里面输入sql语句。(里面的information_schema和mysql 不要乱动,进入自己新建数据库)
新建数据库名是英文
字符集是utf8—utf8 ->unicode
排列规则:utf8_general_ci
点开自己新建的表,点击新建表
输入设置字段(不要写中文)
类型varchar 点击保存,输入表名例如biao1
点击biao1点击+号可以输入数据进行编辑-----一定要保存数据
增加表程序:表---右击--设计表---添加字段例如age
整数Int 有字符范围
小数 decimal decimal(5,2)表示共存5位数,小数站两位,整数占三位。
字符串varchar 例如:varchar (3)表示最多存取3个字符一个中文,或者一个字母或者符号都占一个字符
日期时间:datetime
约束条件
主键:primary key int 类型无符号、自动递增,唯一标识的一条记录
非空:not null 不允许写空值
唯一:unique 此字段不允许重复
默认值:default 当前不填写为默认值,如果填写已填写为主
外键:foreign key维护两个表之间的关联关系
删掉数据设计表--选项 -> 自动递减->可以修改顺序
点击表,右击 转储sql文件—结构和数据—选择数据保存地点。
恢复:删掉创建表—右击—选择运行sql文件打开刚删掉的备份表
1、dos命令-Cmd- MySQL -uroot -p
show database 数据名
[数据库选项]数据选项就是字符集设置
例如:creat database itcourse
; charest=utf8;
查看所有数据库
Show database
根据条件查看数据库
Show database like %-
;
-表示任意字符
%表示任意多个字符
Show database like it%
找出数据库为it开头的任意字符
查看数据建库语句
Show create database 数据库
;
Use 数据库名
例如:use itcource
;
创建表
create table 表名(
字段名 类型 约束
…
)
例:创建学生表,字段要求如下:
姓名(长度为10), 年龄
create table students(
name varchar(10),
age int unsigned
)
修改
格式:update表名 set 列1 =值1; 列2=值2…where 条件
修改id学生数据 姓名改为狄仁杰,年纪改为20
不写where是更新所有数据
例如:Update student2 set name=狄仁杰
,age=20 where id=5
删除格式
Delete from 表名 where 条件
删除id=4的学生数据 一般不要乱用
不写where是删除所有数据,表不会删除
Delete from student3_copy
Delete from student3 where id=4
添加数据
添加一行数据
格式一:所有字段设置值,值的顺序与表中字段的顺序对应
说明:主键列是自动增长,插入时需要占位,通常使用0或者 default 或者 null 来占位,插入
成功后以实际数据为准
insert into 表名 values(…)
例如:插入一个学生,设置所有的字段得信息
Insert into 表名 values(0,亚瑟
,22,177,56)
部分字段设置值,值得顺序与字段的顺序对应
Insert into 表名(字段1,…)values(值,…)
Insert into students(name) values(老夫子
)
修改
格式:update 表名 set 列1=值1,列2=值2… where 条件
例:修改id为5的学生数据,姓名改为 狄仁杰,年龄改为 20
update students set name=‘狄仁杰’,age=20 where id=5
查询所有字段
Select * from 表名
例如:select * from students
消除重复行
在select后面列前使用distinct可以消除重复的行
select distinct 列1,… from 表名;
Select * from student where not card is null
插入数据时指定某些字段是没有设置值,默认为null
Insert into student (studentno,name)VALUES(22,``)
排序
例如:查询所有学生的信息,按照年纪从小到大排序
Select * from student order by age desc
聚合函数
**1、查询学生总数
Select count (*) from students 查询所有数
2、查询女生最大的年龄
Select max(age) from student where sex=女
分组
语法:
Select列1,列2,聚合…from表名 group by 列1,列2…
查询各种性别的人数
Select sex, count()from student group by sex
查看各种年龄的人数
Select age, count()from student group by age
分组后数据筛选
语法:select 列1,列2,聚合…from 表名
Group by 列1,列2,列3.。。
Having 列1,。。聚合。。。
Having后面的条件运算符与where的相同
查询男生总人数
方案一:Select count() from students where sex=男
方案二:select sex,count() from student group by sex having sex=男
获取部分行
当数据过大时,在一页中查看数据是一件非常麻烦的事情
语法:select from 表名
Limit start,count*
从start开始,获取count条数据,start索引从0开始
查询前三行学生的信息
Select * from student limit 0,3
已知:已知显示M条数据,求,显示第N页数据
Select from students limit (n-1)m,m
连接查询
当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,在选择合适的列返回,
**等值连接查询,**查询结果为两个表匹配到的数据
等值连接:
方式一:select * from 表1,表2 where 表1.列=表2.列
方式二:又称内连接:select * from 表1
Inner join 表1.列=表2.列
查询学生信息及学生成绩
Select * from students stu where stu.studentNO=sc.studentNo
Select * from students stu
或者Inner join socres sc on stu.studentNo =sc.studentno
**左连接查询:**查询结果的为两个表匹配的数据加表特有的数据,对于右表中不存在的数据使用NULL填充
左连接
Select * from 表1
Left join 表1 on 表1.列=表2.列
查询所有学生的成绩,包括没有成绩的学生
Select * from students stu
left join scores sc on stu . studentno = sc .studentno
**右连接查询:**查询结果为两个表匹配的数据加右表特有的数据,对于左表中不存在的数据使用NULL填充
右链接
Select * from 表1
Right join 表2 on 表1 . 列=表2.列
查询所有课程的成绩,包括没有成绩的课程
Select *
From scores sc
Right join courses cs on cs . courseno = sc . courseno
在一个select 语句中,嵌入另一方个select 语句,那么被嵌入的select语句称之为子查询句
主要查询的对象,第一条,select语句
主查询和子查询的关系
子查询嵌入到主查询中
子查询是辅助主查询的,要么充当条件,要么充当数据源
子查询时可以独立存在的语句,是一条完整的select语句
表量子查询:子查询时返回结果是一个数据(一行一列)
列子查询:是返回结果时一列多行
行子查询:返回结果时一行,一行多列
表级子查询:返回结果时多行多列
1、查询班级学生平均年龄
Select avg(age)from students
查询大于平均年龄的学生
Select * from student where age >21.1335
Select * from student where age >(select avg(age)from studenta);
子查询中特定关键字使用
In范围,格式:主查询where条件in列子查询
Any | some 任意一个
格式:主查询where 列 =any(列子查询)
在条件查询的结果中匹配任意一个即可,等价于in
All 格式:主查询where 列=all (列子查询):等于里面所有
格式:主查询where ;列<>all (列子查询):不等于其中所有
Select * from students where age in (select age from student where age between 18 and 20)
数据库设计
E-R模型:基本元素:实体、联系和属性
E(entry) 实体:是一个数据对象,描述具有相同特征的事物
R(relationship)联系:表示对一个或者多个实体之间的关联关系,关系的类型包括一对一,一对多,多对多
属性:实体的某一特性属性
关系也是一种数据,需要通过一个字段存储在表中
-cmd –mysql
连接
Mysql -uroot -p
广泛运用于订单系统,银行系统等多种场景
事务命令
要求表的引擎类型必须是innidb类型才可以使用事务,这是mysql表的默认引擎,查看表的创建语句,可以看到engine=innodb
Show create table students;
修改数据库的命令会触发事务包括:insert\update\delete
开启事物命令如下
开始事务后执行修改命令变更会维护到本地的缓存中,而不维护到物理表中
Begin;
提交事务,命令如下,将缓存的数据变更维护到物理中
Commit;回滚事务,命令如下,放弃缓存中变更的数据
Rollback;
提交
为了演示效果,需要打开两个命令窗口,使用同一个数据库,操作同一张表
Step1: 连接
命令行1:查询学生信息
Select * from students;
Step2:增加数据
命令行2:开启事务,插入数据
Begin;
Insert into students(stuedntno,name) values (013
,我是新来的
);
查询新增数据:select * from students;
Step3提交,命令行2,完成提交
Commit
回滚:为了演示效果:需要打开两个命令行窗口,使用同一个数据库,操作同一张表
方法同上
Step4 回滚 命令是rollback
**删除索引,**drop index索引名称 on 表名;
use mysql;
update user set password=password(‘新密码’) where user=‘用户名’;
忘记 root 账户密码怎么办
1、配置mysql登录时不需要密码,修改配置文件
Centos中:配置文件位置为/data/server/mysql/my.cnf
Windows中:配置文件位置为C:\Program Files (x86)\MySQL\MySQL Server 5.1\my.ini
修改,找到mysqld,在他的下一行添加skip-grant -tables
[mysqld]
skip-grant-tables
2\重启mysql,免密码登录,修改mysql数据库的user表
use mysql;
update user set password=password(‘新密码’) where user=‘用户名’;
例:
update user set password=password(‘123’) where user=‘root’;