1.数据库(DB):存储数据的仓库,数据库中数据存在硬盘上,主要是用来存取数据,生成新的数据
2.数据库管理系统(DBMS):管理和操作数据库的软件,如:oracle,mysql,sql server
3.数据库管理员(DBA):管理操作数据库
4.数据库发展史:线型数据库,网状数据库,关系型数据库,非关系列数据库
关系型数据库:Oracle,mysql,sql server,DB2…
非关系型数据库:redis,Mango DB,nosql…
5.关系型数据库的组成:由表,表与表之间的关系及对象组成
6.数据库表用来存储数据.数据库由行和列
7.数据库表中行=记录=实体
8.数据库表中列=域=字段
9.数据库最重要是数据完整性
数据完整性:数据的准确性和安全性
10.MySql:是前sun公司推出一个关系型数据库产品,MySql5.5之前开源,免费,体积小;MySql5.5之后开始收费;MySql数据库默认用Innodb引擎
11.MySql的卸载和安装
1:MySql的卸载的步骤:
1:停止MySql服务:任务栏鼠标右键-》选择任务管理器-》详情信息-》服务-》MySql右键停止。
2:控制面板-》程序和功能-》MySql-》右键卸载。
3:清注册表:系统盘(C盘)-》ProgramData-》MySql右键删除。
2:MySql的安装:
略
1:找到my.ini:D:\Program Files\MySQL(mysql的安装路径)
2:修改my.ini中编码:
12.启动/停止服务:
1:启动/关闭服务:任务栏鼠标右键-》选择任务管理器-》详情信息-》服务-》MySql右键开始/停止;
2:启动/关闭服务:我的电脑鼠标右键-》管理-》服务-》MySql右键开始/停止;
3:启动/关闭服务:用管理员身份运行cmd->输入命令net stop/start mysql;
13.登录MySql数据库管理系统:
1:第一种登录:打开MySql客户端-》输入root账号对应的密码;
2:第二种登录:打开cmd-》cd MySql安装文件bin目录下-》输入登录命令:mysql -u 账号 -p 密码;
3:第三种登录:用Navicat for MySQL创建连接就可登录。
14.Sql:数据库结构化查询语言。操作数据库管理系统,默认讲Sql-92标准
1:DDL:数据库定义语言,创建,删除及修改数据库及表等
2:DCL:数据库控制语言,创建和删除用户,给用户授权,撤消权限等
3:TCL:事务控制语言,与事务相关操作等
4:DML:数据库操作语言,对数据库表中数据作增加,修改,删除操作
5:DQL:数据库查询语言,对数据库表中数据作查询操作
15:DDL数据库定义语言:
1:查看数据库:show databases;
2:创建数据库:create database [IF NOT EXISTS] 数据库名 [default charset utf8];
3:查看数据库的创建:show create database 数据库名;
4:修改数据库的字符编码:alter database 数据库名 character set utf8;
5:删除数据库:drop database [if exists] 数据库名;
6:查看当前数据库:select database();
7:进入数据库:use 数据库名;
8:创建表:
CREATE TABLE [IF NOT EXISTS] 表名(
字段1 字段类型(长度) 约束,
字段2 字段类型(长度) 约束,
...
字段n 字段类型(长度) 约束
) [charset=utf8];
注意:主键列 VS 唯一键
相同点:确保列值不重复;
不同点:主键列不能为空;唯一键可以为空;主键列可以由一列或多列组成,但是唯一键一般都是用来限制一个列。由多个列组成主键叫复合主键,复合主键列要求组成的列有一个列值不同就是不同的主键,复合主键要求组成的列的所有列值相同就是重复主键。
9:查看当前数据库下所有表:show tables;
10:查看表中字段:desc 表名;
11:查看数据库的创建语言:show create table 表名;
12:向表中添加列:alter table 表名 add 列名 数据类型 [列的约束];
13:修改表中列的数据类型:alter table 表名 modify 列名 数据类型;
14:删除表中列:alter table 表名 drop 列名;
15:修改表名:RENAME TABLE 原表名 TO 新表名;
16:修改表的字符集为gbk:ALTER TABLE 表名 CHARACTER SET gbk;
17:修改列名: ALTER TABLE 表名 CHANGE 原列名 新列名 数据类型;
18:删除表:drop table 表名;
16.DML数据库操作语言:对数据库表中数据作增,改,删
1:向表添加数据
1:添加一条数据的语法:
insert into 表名(列名1,列名2...) values(值1,值2...);
注意:列名与值要一一对应(个数一样,顺序一样,数据类型要匹配)
注意:如果表中所有列都要插入表名后面(列名1,列名2…)可以省略
insert into t_student(name,age,address) values('bb',17,'南宁');
2:添加多条数据的语法:
insert into 表名(列名1,列名2...) values(值1,值2...),(值1,值2...),...;
注意:列名与值要一一对应(个数一样,顺序一样,数据类型要匹配)
insert into t_student(name,age,address) values('cc',11,'北京'),('dd',12,'上海'),('ee',13,'深圳');
3:插入默认列的值:
#默认列使用默认值
insert into t_student(name,age,address) values('hh',17,default);
2:修改表中数据的语法:update 表名 set 列名1=值1,列名2=值2…[where 条件];
#修改表中数据
update t_student set name='hh',age=27,address='青春之都' where id=8;
3:删除表中数据:
1:删除表中一条或多条数据的语法:
delete from 表名 [where 条件];
注意:如果删除表中数据时,没有写where 条件,删除表中所有数据
delete from t_student where id=8;
delete from t_student where id>9 and id<12;
2:删除表中记录。(先把表删除,然后再创建空表)语法:
truncate table 表名;
TRUNCATE table t_student;
3:删除表总结:
语法一:
delete from 表名 [where 条件];
注意:一般情况下,删除表中数据一定要加条件,否则删除整张表的数据。delete删除记录行后,标识数据删除后,标识数据不再重复
#删除表中数据
delete from t_user where uid=5;
#一般情况下,删除要加where条件,否则删除整张表中数据
delete from t_user;
删除表中所有记录
第一种:drop table 表名; 删除最彻底,将整张表及与表相关的数据(包括表结构,表中数据,标识种子)全部删除。
第二种:truncate table 表名;删除效率最高,将表中数据一页一页的删除,但是表的结构还在(将原表删除,新建一个与原表结构相同的表),原来表中标识种子也删除了重新生成新的标识种子。
第三种:delete from 表名;只删除了表中数据(一条一条删除表中记录),表的结构,表的标识种子都在。
注意:标识种子:指的标识列的起始值;标识种子删除后,无法再继续自增
delete from 表名; //一行一行删除表中所有的数据,但是标识种子(自增)还在
TRUNCATE table 表名; //删除是把表直接DROP掉,然后再创建一个同样的新表,表结构还在TRUNCATE删除的数据不能找回。删除效率最高
drop table 表名;//删除表结构及与表相关所有数据
17.DQL数据库的查询语言:查询数据库表中数据
1:查询语法:
select 列名1,列名2...
from 表名
[where 条件//边查询边筛选]
[group by 列名 //查询完后再将结果进行分组]
[having 条件 //查询完分完组后再筛选 ]
[order by 列名[asc/desc] //对结果排序,默认升序asc]
[limit start [,count]]//只有mysql可用;
#查询表中所有的记录
select * from t_student;
select id,name,age,address from t_student;
#根据条件查询:查询表中所有地址不详的学生信息
select id,name,age,address from t_student where address='地址不详';
#查询完学生后排序
select id,name,age,address from t_student order by age asc;
select id,name,age,address from t_student order by age asc;
2:聚合函数:求和 sum(列名),求总记录数 count(列名), 求最大值 max(列名),求最小值 min(列名),求平均数 avg(列名)
注意:聚合函数一般不能与普通列一起查询(语法没有问题,逻辑有问题),结果集无法匹配;除非普通列作为分组条件.。聚合函数不能用在查询的where后面,其他地方可用。
select count(id) as '总人数',sum(id),max(id),min(id),avg(age)
from t_student;
3:分组查询和筛选
注意:有having地语句一定有groub by;有groug by的语句不一定有having
#分组查询:根据年龄分组查询每个年龄人数
select count(id) as '人数',age
from t_student
GROUP BY age;
#分组查询后再筛选:查询人数不小于2的每个年龄人数
select count(id) as '人数',age
from t_student
GROUP BY age
HAVING count(id)>=2;
4:(MySql)limit的用法
1:限制查询的结果条数: limit 条数;
#限制输出结果的条数:只输出前三条记录
select id,name,age,address from t_student limit 3;
2:分页:
select 列名列表 from 表名 limit 当前页的起始记录数,每页显示的条数;
分页的总语法:
select 列名列表 from 表名 limit (当前页码-1)*每页显示的条数,每页显示的条数;
select id,name,age,address from t_student limit 4,2;
5:模糊查询:
通配符:
*: 代表表中所有列
_ :任意一个字符
%:任意0~n个字符
1:like的使用,某个列像…,like只能用于字符列
#like模糊查询:查询姓名以a开头所有学生信息
select id,name,age,address from t_student where name like 'a%';
#like模糊查询:查询姓名只有两个字符且以a开头所有学生信息
select id,name,age,address from t_student where name like 'a_';
2:between min and max查询列名在min到max之间
注意:between…and…适用于数据列;between…and…小范围的值写在前面,大范围的值写在后面;反之,语法不报错,但是无意义。
#查询年龄在11到17岁的学生信息
select id,name,age,address from t_student where age>=11 and age<=17
select id,name,age,address from t_student where age BETWEEN 11 and 17;
3:in(值1,值2…) 查询列名满足in后面括号中任意一个值都可以
#查询地址是北京或上海或深圳的所有学生信息
select id,name,age,address from t_student
where address='北京' or address='上海' or address='深圳';
select id,name,age,address from t_student
where address in('北京','上海','深圳');
#查询地址不是北京且上海且深圳的所有学生信息
select id,name,age,address from t_student
where address not in('北京','上海','深圳');
4:列名 is [not] null,判断一个列是否为空.列名 is not null 不为空
#查询爱好为null的学生信息
select id,name,age,address,hobby from t_student where hobby is null;
#查询爱好不为null的学生信息
select id,name,age,address,hobby from t_student where hobby is not null;
5:(oracle,mysql)DISTINCT 去重
#查询学生年龄去重
select DISTINCT age from t_student;
18.在SQL语句中,运算符(算术运算符,赋值运算符,比较运算符,逻辑运算符)可以直接用
1.在MySql中不等于: <> 或 != 等于: =
2.逻辑运算符: and(并且),or(或者)
19.数据的完整性:数据库最重要的就是数据的完整性
1.完整性:数据的可靠性和准确性
2.数据完整性:实体完整性,域完整性,引用完整性,自定义完整性
3.实体完整性:主键约束,唯一约束,标识列
注意:一般情况下,每张表都要有一个主键
4.域完整性:数据类型,默认约束,非空,检查约束(check);
注意:MySql5.5之后不支持检查约束
5.引用完整性:外键约束
外键约束的优点:保护数据的安全性
缺点:效率低
综合外键约束的优缺点:一般不建立外键约束
6.自定义完整性:规则、存储过程、触发器