MySQL数据库的一些基本概念与操作
1.数据库(DB):存储数据的仓库,数据库中数据存在硬盘上,主要是用来存取数据,生成新的数据。用户操作数据库中的数据时需要依赖于数据库管理系统的帮助。数据库管理系统简称为DBMS。我们常说的数据库包含数据存储部分和数据库管理系统两个部分。
2.数据库管理系统(DBMS):管理和操作数据库的软件.eg:oracle,mysql,sql server
3.数据库管理员(DBA):管理操作数据库
4.数据库发展史:线型数据库,网状数据库,关系型数据库,非关系列数据库
- 关系型数据库:Oracle,mysql,sql server,DB2…
- 非关系型数据库:redis,Mango DB,nosql…
数据库的分类:
- 网状型数据库;
- 层次型数据库;
- 关系型数据库;
- 面向对象型数据库。
5.关系型数据库的组成:由表,表与表之间的关系及对象组成
6.数据库表用来存储数据.数据库由行和列
7.数据库表中行=记录=实体
8.数据库表中列=域=字段
MySQL中常用的字段类型:
- int(integer) 整数型
- float/double 单精度/双精度浮点型
- date 日期类型
- datetime 日期时间类型
- char 定长字符串
- varchar 可变长度字符串
- text 大文本对象,可用于存储超长字符串
- blob 二进制大对象,可用于存储图片等二进制数据
MySQL中常用的约束
- NOT NULL:非空约束
- UNIQUE:唯一约束
- PRIMARY KEY:主键,唯一标识该记录,主键必须是非空且唯一
- FOREIGN KEY:外键,指定该记录从属的主表记录
添加外键的语句:
alter table 从表
add foreign key(外键字段名) references 主表(关联字段名);
9.数据库最重要是数据完整性
数据完整性:数据的准确性和安全性。
10.MySql:是前sun公司推出一个关系型数据库产品,MySql5.5之前开源,免费,体积小,MySql数据库默认用MyISAM;MySql5.5之后开始收费,MySql数据库默认用Innodb引擎
11.MySql的卸载和安装
11.1:MySql的卸载的步骤:
- 停止MySql服务:任务栏鼠标右键-》选择任务管理器-》详情信息-》服务-》MySql右键停止;
- 控制面板-》程序和功能-》MySql-》右键卸载;
- 清注册表:系统盘(C盘)-》ProgramData-》MySql右键删除。
11.2:MySql的安装(略)
自行百度。
11.3:安装成功测试:查看任务管理器中-》服务-》MySql是否正在运行,如果没运行右键开始。用MySql的客户端,输入密码出来Welcome to MySql…就安装成功了
12.启动/停止服务:
12.1:启动/关闭服务:任务栏鼠标右键-》选择任务管理器-》详情信息-》服务-》MySql右键开始/停止。
12.2:启动/关闭服务:我的电脑鼠标右键-》管理-》服务-》MySql右键开始/停止。
12.3:启动/关闭服务:用管理员身份运行cmd->输入命令net stop/start mysql;
13.登录MySql数据库管理系统:
13.1:第一种登录:打开MySql客户端-》输入root账号对应的密码。
13.2:第二种登录:打开cmd-》cd MySql安装文件bin目录下-》输入登录命令:mysql -u 账号 -p 密码。
13.3:第三种登录:用Navicat for MySQL创建连接就可登录。
14.Sql:数据库结构化查询语言。操作数据库管理系统.默认讲Sql-92标准
- DDL:数据库定义语言,创建,删除及修改数据库及表等;
- DCL:数据库控制语言,创建和删除用户,给用户授权,撤消权限等;
- TCL:事务控制语言,与事务相关操作等;
- DML:数据库操作语言,对数据库表中数据作增加,修改,删除操作;
- DQL:数据库查询语言,对数据库表中数据作查询操作。
15:DDL数据库定义语言:
- 查看数据库:show databases;
- 创建数据库:create database [IF NOT EXISTS] 数据库名 [default charset utf8];
- 查看数据库的创建:show create database 数据库名;
- 修改数据库的字符编码:alter database 数据库名 character set utf8;
- 删除数据库:drop database [if exists] 数据库名;
- 查看当前数据库:select database();
- 进入数据库:use 数据库名;
- 创建表:
CREATE TABLE [IF NOT EXISTS] 表名(
字段1 字段类型(长度) 约束,
字段2 字段类型(长度) 约束,
...
字段n 字段类型(长度) 约束
) [charset=utf8];
注意:主键列 VS 唯一键
- 相同点:确保列值不重复;
- 不同点:主键列不能为空;唯一键可以为空;主键列可以由一列或多列组成,但是唯一键一般都是用来限制一个列。由多个列组成主键叫复合主键,复合主键列要求组成的列有一个列值不同就是不同的主键,复合主键要求组成的列的所有列值相同就是重复主键。
- 查看当前数据库下所有表:show tables;
- 查看表中字段:desc 表名;
- 查看数据库的创建语言:show create table 表名;
- 向表中添加列:alter table 表名 add 列名 数据类型 [列的约束];
- 修改表中列的数据类型:alter table 表名 modify 列名 数据类型;
- 删除表中列:alter table 表名 drop 列名;
- 修改表名:RENAME TABLE 原表名 TO 新表名;
- 修改表的字符集为gbk:ALTER TABLE 表名 CHARACTER SET gbk;
- 修改列名: ALTER TABLE 表名 CHANGE 原列名 新列名 数据类型;
- 删除表:drop table 表名;
16.DML数据库操作语言:对数据库表中数据作增,改,删
16.1:向表添加数据
16.1.1:添加一条数据的语法:
insert into 表名(列名1,列名2...) values(值1,值2...);
注意:列名与值要一一对应(个数一样,顺序一样,数据类型要匹配);如果表中所有列都要插入,表名后面(列名1,列名2…)可以省略。
insert into t_student(name,age,address) values('bb',17,'南宁');
16.1.2:(MySql)添加多条数据的语法:
insert into 表名(列名1,列名2...) values(值1,值2...),(值1,值2...),...;
注意:列名与值要一一对应(个数一样,顺序一样,数据类型要匹配)。
insert into t_student(name,age,address) values('cc',11,'北京'),('dd',12,'上海'),('ee',13,'深圳');
16.1.3:插入默认列的值:
#默认列使用默认值
insert into t_student(name,age,address) values('hh',17,default);
16.2:修改表中数据的语法:
update 表名 set 列名1=值1,列名2=值2...[where 条件];
#修改表中数据
update t_student set name='hh',age=27,address='青春之都' where id=8;
16.3:删除表中数据:
16.3.1:删除表中一条或多条数据的语法:
delete from 表名 [where 条件];
注意:如果删除表中数据时,没有写where 条件,删除表中所有数据。
delete from t_student where id=8;
delete from t_student where id>9 and id<12;
16.3.2:删除表中记录。(先把表删除,然后再创建空表)语法:
truncate table 表名;
TRUNCATE table t_student;
16.3.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数据库的查询语言:查询数据库表中数据
17.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;
17.2:聚合函数:求和 sum(列名),求总记录数 count(列名), 求最大值 max(列名),求最小值 min(列名),求平均数 avg(列名)等等
注意:聚合函数一般不能与普通列一起查询(语法没有问题,逻辑有问题),结果集无法匹配;除非普通列作为分组条件。聚合函数不能用在查询的where后面,其他地方可用。
select count(id) as '总人数',sum(id),max(id),min(id),avg(age)
from t_student;
17.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;
17.4:(MySql)limit的用法
17.4.1::限制查询的结果条数: limit 条数;
#限制输出结果的条数:只输出前三条记录
select id,name,age,address from t_student limit 3;
17.4.2:分页:select 列名列表 from 表名 limit 当前页的起始记录数,每页显示的条数;
分页的总语法:
select 列名列表 from 表名
limit (当前页码-1)*每页显示的条数,每页显示的条数;
select id,name,age,address from t_student limit 4,2;
17.5:模糊查询:
通配符:
*: 代表表中所有列
_ :任意一个字符
%:任意0~n个字符
17.5.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_';
17.5.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;
17.5.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('北京','上海','深圳');
17.5.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;
17.5.5:(oracle,mysql)DISTINCT 去重
#查询学生年龄去重
select DISTINCT age from t_student;
18.在SQL语句中,运算符(算术运算符,赋值运算符,比较运算符,逻辑运算符)可以直接用
- 在MySql中不等于: <> 或 != , 等于: = , 小于和等于: <= , 大于和等于: >=
- 逻辑运算符: and(并且),or(或者),not(非)
- 优先级:not>and>or
19.数据的完整性:数据库最重要的就是数据的完整性
19.1.完整性:数据的可靠性和准确性
19.2.数据完整性:实体完整性,域完整性,引用完整性,自定义完整性
19.3.实体完整性:主键约束,唯一约束,标识列
注意:一般情况下,每张表都要有一个主键
19.4.域完整性:数据类型,默认约束,非空,检查约束(check);
注意:MySql5.5之后不支持检查约束
19.5.引用完整性:外键约束
外键约束的优点:保护数据的安全性;
缺点:效率低。
综合外键约束的优缺点:一般不建立外键约束。
19.6.自定义完整性:规则、存储过程、触发器(略)
未完,待续。。。