MYSQL数据库基础
1. 数据库
什么是数据库,我们将数据都统一存放在库里,那么这个库就是数据库了。常用的数据库有orcle数据库和 mysql数据库,各种数据库大同小异,接下来就来进入mysql数据库的学习之中吧。
2.数据库的安装
2.1.Mysql的简单安装以及配置
链接:http://pan.baidu.com/s/1qYUc0oc 密码:4l3w
MySQL5.6(utf-8免安装).zip
在这里提供免安装版的utf-8的数据库,解决初学者的各种环境配置问题
2.2.安装后解压到本地,然后在以管理员身份运行cmd
接下来就是在DOS(管理员运行)里cd ~ 到安装目录下(具体怎么cd不会的话可以查百度)
G:\newmysql\MySQL5.6\bin>
然后cd到安装目录下的bin目录下
2.3.开始安装配置
G:\newmysql\MySQL5.6\bin>mysqld -install
安装后
Service successfully installed.
出现这个字样表示安装成功
2.4. Navicat Lite链接数据库
Navicat一款数据可视化工具。可以使我们简单方便的操作数据库
为了更好的操作数据库我们使用navicate软件来操作数据库。
现在可以使用一些软件来链接操作数据库了
这里推荐Navicat Lite这个软件
链接:http://pan.baidu.com/s/1bpJDDXP 密码:y08l
安装后运行即可
2.5.创建本地链接
链接名随便填写
数据库用户名root
密码:root
端口:3306
链接成功~!
2.6.如果已经存在数据库服务,或者曾经安装过数据库,怎么删除?
在DOS(管理员运行)
G:\newmysql\MySQL5.6\bin>sc delete mysql
3数据库的基本概念
- primary key 主键,用来唯一标志某行数据的列称为主键,主键列的值不能重复、不为null,可以设置为自动递增。
- 主键又细分为业务主键和逻辑主键
- 业务主键比如定义 学号 身份证为主键
- 而逻辑主键一般定义在一个完全没有意义的字段中,只给操作人员看
- table 表,一个库里面可能有存在许多的表,而不同的表往往对应了不同的内容
- column 列 每一列表示一个详细的类,比如学生名字 学生身高都是在列里面的
- database 数据库 将数据统一存放的地方,也可以理解为一个仓库
3.2数据库的常用数据结构
文本
- char(n) 最多255个字节的定长字符串,必须指定长度
- varchar(n) 最多大概65535个字节的可变长度字符串,必须指定长度
- text 最大长度为64K的变长文本
- longtext 最大长度为4GB的变长文本
数值
- int 4字节(对应编程语言中的int)
- bigint 8字节(对应编程语言中的long)
- decimal、numeric 精确存储的小数,在内部用字符串存储,适合金额等要求精确的场景
- float 4字节,单精度
- double 8字节,双精度
日期
- date 日期,范围是 [1000-01-01, 9999-12-31]
- time 时间
- datetime 日期时间,范围是 [1000-01-01 00:00:00, 9999-12-31 23:59:59]
二进制数据
- blob 最大长度64KB
- mediumblob 最大长度16MB
- longblob 最大长度4GB
3.3数据库的规范
在一个数据库内表名最好以t_开头以便区别,表示学生或者老师有数量的表一定要加s
比如
t_students
t_teachers
4. 数据库的基本操作
sql语句,sql语句可以理解为数据库查询的代码片段,
- SQL语句一般使用单引号
- Sql语句对大小写不敏感,也就是大写小写都无所谓的
常用的数据库操作有
- 插入 insert 语句
- 删除 delete 语句
- 更新 update 语句
- 查询 select 语句
4.1先从查询开始吧 如果我们想要查询一个表中的所有数据该怎么写?
select * from t_students
查询学生表中的所有数据 * 代表的意思是所有列 from 后面接上查询的表的表名 这里是t_students
4.2如果只想要查询某个学生的所有信息 又该怎么写呢?
我们假定有一张表名为t_students的表 名称为张三。
select *from t_students where name=”张三”
4.3 如何只查询需要的信息 比如成绩假定成绩为score
select score from t_students where name=”张三”
4.4 更高级的查询语句
聚合函数查询: 什么是聚合函数?
实现查询表中重名的sql语句
select name, count(*) from t_students group by name
having count(*) > 1
4.5.1删除语句,如何删除某个学生的所有信息 delete 语句和select 语句其实是相似的,这里指的删除是硬删除 也就是数据一旦被删除理论上就无法被恢复
Delete from t_students where name=”” 删除名称为xx的数据
4.5.2 软删除,软删除通常只那些可以被恢复的数据,在设计数据库的时候一定要考虑软删除,由于有些删除的数据无法恢复。
怎么去使用软删除,定义一个列名为isdelete 数据类型为boolean 如果为1的话表示这个数据被软删除掉了,那么在查询的时候一定要过滤出来 如select * from t_scetc where isdelete =false这样查询就可以避免软删除掉的数据,在需要恢复删除的时候使用更新语句将数据恢复为0
4.6插入语句
如果要向数据库里插入一行数据
Insert into t_students(ID,Name,Gender,Hobbies,Height) values(4,”小芳”,1,”小姐姐”,170);
确保数据库有以上列名 执行插入语句就可以把values 里面的数据以此插入进数据库了
4.7数据更新 将所有人的身高都修改为200
Update t_students set height=200
更新一部分数据:
update t_students set height =160 where name=”基佬”
更新基佬的身高为160
5.数据库进阶操作
Max语句获得当前的最大值
select max(column) from t_students
column 代表所在列 比如要查询 成绩所在列的最大值 那么 select max(score) from t_students
Min 语法同上
Order by分组查询
如果想要查询出的结果从高到低排列 或者从低到高排序 ,就可以使用该查询,order by的功能并不仅限于这点
select * from t_student order by score asc
查询出学生的成绩按照升序 asc 降序则是desc 同理
Like模糊匹配查询
如果不太清楚学生的学号 或者名字 只想要通过模糊查询也就是前面几个数来查询的话 可以使用like语句来进行模糊查询
中文匹配时候需要加入% %来进行匹配
两个下划线 表示匹配出单个字符 _ _
如何使用正则模糊匹配高级查询?
查询出学生中所有姓徐的:
select * from t_students where name like '%徐%'
该查询不太好用,有时候可能无法查询出结果
6.null 是什么
在数据库里null是什么?和java一样都代表结果为空吗,不是的,这里的 null表示查询结果并不存在,不存在和结果为空有很大的区别,需要注意一下。形象的比喻一下
零长字符串:有杯子没水,null:连杯子都没有。
select * from t_students where score is not null
查询成绩不为null的所有学生
7.limit语句 提取第三行到九行的数据
大家可能会很惊讶 因为答案是这样的
select * from t_students limit 3,7
limit 3,表示从第三行开始
7表示提取出七行数据。
这样就提取到了第三行到第九行的数据了
8.外键查询
实际的业务中,我们常常会遇到多张表的情况,如何去查询这每一张表的数据,能不能连接到一起,这是一个问题,这样外键就产生了,我们通过外键来将不同的表按照id来连接到一起
外键查询 分为左外查询 右外查询
这里只提left join(左外查询) 左外查询
假设有这样一个外键关联关系 如何进行查询
将关联两个表的表定义为中间表,并设置它的外键关联关系,添加外键
相关的sql语句 查询出每张订单的订单号,价格,对应的客户姓名
SELECT o.Number,o.Price,c.Name,c.Age
FROM T_Orders o
LEFT JOIN T_Customers c
ON o.CustomerId=c.Id
这里的在 t_order 后面 加上了o 表示定义 order 表名为 o
在 t_customers 后面加上 c 定义 customer表名为 c
方便查询
当然还可以在此基础上增加约束条件
Where price > 1250
也可以使用left join查询多张表
8.1外键约束
在添加了外键的表上无法直接删除,需要先删除相应的子表,才能删除对应的母表。
外键删除设置:
Restrict 设置删除子表的列删除时 对应的也会删除
Set null 删除时不会删除,拒绝删除。
添加外键约束
我们往往会需要用到外键来进行一对多的查询,常见的用法有
#添加外键约束alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
注意:这里添加的外键的字段名和外键表民中的主键的字段名必须保持一致
alter table t_rolepermissions add constraint rp foreign key(roleId) references t_Roles(id);
使用该方法添加角色权限表的外键对应权限表
9.1 数据库的导入功能
在处理别人发送过来的数据时,往往导入会出现各种各样的错误,如编码错误,数据紊乱等。
这个时候我们需要一个有效的导入语句来进行数据的完整的导入
load data infile 'C://ABC.csv' into table t_sc charset gbk FIELDS TERMINATED BY ','
load data infile “这里填入你文件的路径”
into table “这里填入你的表的名称”
charset “这里填字符的编码名称”
fields terminated by “这里填入分割符号,没有可以不填让系统自己分割”
这样就可以完成数据的导入功能了
9.2导出功能
导出我们选择navicat 提供的傻瓜化的导出功能,可以把数据导出为txt xml等格式方便他人使用。