数据库及MySQL基本介绍
数据库是什么?
数据库就是长期存储在计算机中,有组织的,可共享的大量数据的集合
数据库的种类
- 关系型数据库
用表的方式储存数据
包括:MySQL/Oracle/SQL server/DB2
- 非关系型数据库
用文档或字符串等其他非表的方式储存数据
包括MongoDB/Redis/HBase
数据库管理软件
英文名:DBMS
包括:
关系型DBMS:MySQL/Oracle/SQL server/DB2
非关系型DBMS:MongoDB/Redis/HBase
数据库的常用术语
DBA:数据库管理员
DBS:数据库系统,数据库系统就是计算机中加入了数据库之后的系统
SQL语言
SQL(structured query language)结构化的查询语言
SQL语言是用于管理数据库的,用于关系型数据库管理软件,如:MySQL
就是说关系型数据库管理软件中用的语法都是SQL语言
SQL语言包含的种类
-
DQL:数据查询语言, 常用命令:select. (针对表中的数据)
-
DML:数据操作语言, 常用命令:insert update delete (针对表中的数据)
注意:delete 用于删除记录,alter用于删除字段,后面会详细讲到
-
DDL:数据定义语言, 常用命令:create table alter table drop table (针对表)
-
DCL:数据控制语言, 常用命令:grant revoke (定义数据用户的权限)
MySQL环境配置
修改环境变量
-
获得MySQL安装包,放在一个文件夹中,如:D:\mysql
-
解压到当前文件夹
- 找到解压号的文件夹中的bin的路径,并复制
- 打开系统环境变量,在系统环境变量中添加你刚才复制的bin路径,注意环境变量之间用英文的分号
; 隔开
上面的步骤是用来配置MySQL的环境变量的,目的就是为了让系统知道bin目录下的命令的位置,我们以后就可以在什么路径下输入命令,而不必CD到Bin目录
配置my.ini文件
- 找到MySQL目录下的my.ini文件,以记事本方式打开
-
修改basedir,值为你的MySQL目录的路径,就是bin目录的上一层目录
-
修改datadir,值同basedir,只不过在后面加了\data,注意,这里配置之后会在mysql-5.7.18-win32目录下直接生成data文件夹(不需要你去相应目录新建)
-
Ctrl+s保存
注意:,如果此时保存my.ini时没有自动生成data文件夹,可以采用下面这种方法:
以管理员身份运行cmd
进入mysql的bin目录下
执行命令:
mysqld --initialize-insecure --user=mysql
在my.ini配置文件中写入的data目录下生成data目录
如果使用这个方法生成data目录,后面还会有个坑,
解决方法:在登陆时,直接使用命令:
mysql -uroot -p
不要输入密码(因为还没有设置密码),直接回车,进入mysql后使用以下命令修改密码:
set password for 'root'@'localhost' = password('123456');
123456即为新密码
安装MySQL服务
- 管理员权限打开cmd,切换到bin目录
- 输入命令**mysqld install,**显示安装成功
- 初始化服务器,输入命令:mysqld --initialize --console
最后出现的ZCfrBN4ZB\*4a就是你的密码
- 启动服务,输入命令:net start mysql
- 登录mysql,输入命令:mysql -uroot -p
密码就是上面的ZCfrBN4ZB\*4a
-
如果默认密码不方便记,可以更改密码
在登录之后,输入命令:
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
123456就是新密码
数据库的常用操作
创建数据库
Create database name;
指定要使用的数据库
Use 数据库名;
查看当前连接的是哪个数据库
Select database();
查看当前连接的所有数据库
Show databases;
删除数据库
Drop database name;
数据库常用存储数据类型
INTEGER 一个带符号的整数
Float/double/decimal 浮点型,decimal(4,1),4表示总长度,1表示小数占位1个
TEXT 文本型
BLOB 一个BLOB数据块(可放图片,exe文件等)
NULL 空值
Boolean SQLite 没有Boolean类,直接为0(false)或1(true)
Date与Time SQLite 没有对应类,但可存为TEXT,REAL或INTEGER
CHAR和VARCHAR SQLite中都存为TEXT型,CHAR(10)固定字符长度,VARCHAR是可变字符型
表的基本操作
新建表
命令:create table table_name(
column1 datatype primary key [not null],
column2 datatype,
…
columnx datatype
) ;
注意,最后一个参数后面没有逗号
查看表的结构
Desc 表名;
显示数据库中的所有表
Show tables;
表的修改
- 改表明
Alter table 旧表名 rename to 新表名;
- 改字段
Alter table 表名 change 旧字段名 新字段名 新字段名类型;
- 添加字段
Alter table 表名 add 字段名 字段类型;
- 删除字段
Alter table 表名 drop 字段名
- 删除表
Drop table 表名;
约束
字段约束
1.主键约束:primary key.作用:使字段数据不能重复,并且不能为空
2.not null约束,作用:字段内容不能为空
3.唯一约束:unique.作用:该字段唯一,不能有跟它一样的
4.默认约束:default 10.作用:没有写字段内容时,默认值为10
外键约束
是指该表的字段是通过另外一个表的主键字段获得相关信息的
外键可以不是主键,但是外键所关联的字段必须是主键
外键可以重复,主键不能
Foreign key(clomun1) references table_name(clomun2),
外键约束使用实例
当你在新建一个表的时候,外键信息需要在最后添加,比如现在有了一个地址表address,address内容如下:
address(
aadd char(50) not null
);
现在新建一个student表:
create table student(
sname varchar primary key not null,
sage int,
sadd char(50),
foreign key(sadd) references address(aadd) //在最后添加
);
foreign key(sadd) references
address(aadd)就表示student表里的字段sadd是外键,是关联address表的aadd字段的外键
常用关键字
update
update table_name set 字段名=值 [where 更新条件];
insert
向表中插入,更新一条记录
具体用法:
insert into table_name values(
column datatype
);
插入多条记录:
insert into table_name (字段1,2,…,n) values(值1,2,…n),(),…,();
limit
用来限制由select语句返回的数据的数量
select *from table_name limit 3 [offset2];表示查询表中3行信息[从第一行开始偏移2行算起的3行]
条件查询
where
where sage>18 and sex==‘M’;
where是针对记录,聚合函数不能出现在where内
select
查询表中字段信息
具体用法:
select * from table_name; 查询表的所有记录
select 字段名1 字段名2 from table_name; 查询表中对应的字段信息
select 字段名 from table_name where
sage<18;查询该字段中对应年龄字段的年龄小于18的信息
模糊查询
like
如:
select *from table_name where sname like
‘%s%’;表示查询表中姓名信息里有字符s的数据信息,这里前面的%表示s前面有0个或任意几个字符,后面的%同理
select * from table_name where sname like
‘___h%’;表示查询表中姓名信息中第4个字符为h的数据信息
glob
可实现通配符*的查询
select 字段名 from table_name where 前面的字段名 glob ‘?s*’;
?表示一个字符或一个单一数字,*表示任意字符(可以是0个或1个或多个)
范围查询
in
select * from table_name where sage in (22,26);
表示查找年龄是22和年龄是26的所有记录
select * from table_name where sage not in (22,26);
表示查找年龄不是22且不是26的所有记录
between
between常和and一起使用
select * from table_name where age between 22 and 26;
查询年龄在22到26之间的所有记录,包括22和26
order by
排序,默认升序,后面加desc则为降序
select * from table_name order by sage;
以年龄升序排列信息
select * from table_name order by sage desc;
以年龄降序排列信息
select * from table_name order by sid,sage desc;
以学号升序,年龄降序排列信息
注意这里后面的字段sage只有在前面的字段sid有重复的时候才会启用降序
group by
必须和select一起使用,对相同数据分组
select sname,sum(score) from table_name group by sname;
以姓名分组,查询姓名和总分信息
select xh,count(*) from cjb
group by xh
having cj>60;
where:分组前的条件
having:分组后的条件
having
select sname,sum(score) [as] 总分 from table_name
group by sname
having count(sname)>4
order by 总分;
以姓名分组,查询姓名数量大于4(也就是选课超过4门),最后按总分升序排列的姓名,总分信息.
distinct
与select一起使用,可清除重复出现的记录,保留唯一一个记录
select distinct sname from table_name;
查询有哪几个学生参加了考试(把相同的学生名去掉了)
关键字使用顺序
从前到后
select
from
where
group by
having
order by
常用函数
count()
计算一个数据库中表的行数,或者一个分组中的元素个数
select count(*) from table_name;列出所有行的信息
count(某个字段):计算出这个字段有几行,注意:不会将记录为NULL的那条记录计数
count(*)不管记录为不为空,都会计数
length()是计算字段的长度
max()
得到某列最大值
select max(score) from table_name;
查询表中最大分数的记录
min()
得到某列最小值
sum() avg() upper() lower() length() random() abs()
select random();这里返回的是一个8字节的长整型整数
SQL文件的导入与导出
在Navicat中:
导入
1.激活(双击或右键)数据库
2.选择运行SQL文件,加入你要导入的数据库(SQL文件)
导出
1.激活数据库
2.右键,选择转储SQL文件
3.选择结构和数据
事务
开启事务
start transaction;
rollback;回流到上一次提交状态
commit;提交