数据库
"""
1.什么是数据库:
就是管理数据的系统,本质上是一种安装的管理系统,该系统用来管理的那些数据其实就是管理文件。
2.存储数据的位置:
可以在内存或者硬盘中进行存储
3.什么是系统:
运行在硬件基础上,用来管理其他软件的软件,比如操作系统就是一个非常大的系统
"""
# 数据库的组成
'''
库:存放多张表(其实就是一个文件夹,比如教学管理库,里面有学生表,课程表,教师表)
表:包含有多条相同结构的记录(比如学生表,包含id = 1,2,3,4,5,6....等等多条记录.)
记录:包含有多个key-value键值对的一条二进制数据(例如:id为1的记录:(‘name’ = ‘Bob’, 'age' = 18, 'gender' = '男'))
字段:由key-value组成的本质上是二进制的信息(例如:name = 'Bob' 是一个字段, age = 18也是一个字段)
'''
数据库的分类
'''
1)关系与非关系
关系:数据库表与表之间有联系 -Mysql,Sqlserver,Oracle
非关系:没有表的概念,是用key-value存储的 -Redis、mongodb(介于关系与非关系之间)
2)内存与硬盘
硬盘:数据可以永久存储 -mysql、mongodb
内存:数据的存取效率极高 -redis、memcache
3)sql与nosql
sql:数据库操作通过sql语句。(其实就是关系型数据库)
nosql(not only sql),泛指非关系型的数据库,数据库的操作就是key-value形式(value就是一条记录)
stu --- {'name': 'Bob', 'age': 18}
stus --- [{'name': 'Bob', 'age': 18}, {'name': 'Alice', 'age': 27}]
name --- 'Jerry'
'''
卸载
"""
前提)启动终端,输入 mysql,如果不是提示 不是内部或外部命令,代表已安装数据库
1)直接连入
i 搜索:服务,检索mysql服务,有
停止服务,并移除服务 - 启动管理员终端:mysqld --remove
ii 搜索:服务,检索mysql服务,无 (mysql使用命令启动)
停止服务,启动管理员终端
tasklist | findstr mysql
taskkill /pid 进程pid /f
2)连接超时
搜索:服务,检索mysql服务,移除服务即可
3)移除环境变量
总结:如果能连入,先停止服务 | 如果添加了服务,就移除服务 | 取消环境变量配置
"""
安装
"""
1、解压免安装版本(5.6 - 没有初始密码)
2、配置环境变量:数据库绝对路径下的bin
3、配置服务:
启动管理员终端:mysqld --install [nmysql]
"""
连接数据库
1)游客登陆(不一定能登入,登入了也啥都不能干)
>: mysql
2)账号密码登录
>: mysql -u root -p
再次输入密码,没有任何提示,没有密码直接回车
3)
>:mysql -h ip地址 -P 端口号 -u 账号 -p
回车后敲密码
4)退出数据库
exit
quit
用户信息查看
1)查看当前登录的用户
mysql>: select user();
2)root权限下可以查看所有用户信息
mysql>: select * from mysql.user;
mysql>: select * from mysql.user G
mysql>: select user,password,host from mysql.user;
3)root登录下,删除游客(操作后要重启mysql服务)
mysql>: delete from mysql.user where user='';
4)root登录下,修改密码(操作后要重启mysql服务)
mysql>: update mysql.user set password=password('12345678') where host='localhost';
5)没有登录
>: mysqladmin -u用户名 -p旧密码 -h域名 password "新密码"
eg>: mysqladmin -uroot -p12345678 -hlocalhost password "root"
6)root登录下,创建用户
mysql>:grant 权限们 on 数据库名.表名 to 用户名@主机名 identified by '密码';
数据库的基本操作
1)查看已有数据库
mysql>:show databases;
2)选择某个数据库
mysql>:use 数据库名
3)查看当前所在数据库
mysql>:select database();
4)创建数据库
mysql>:create database 数据库名 [charset=编码格式];
eg>: create database owen;
eg>: create database zero charset=utf8;
eg>: create database tank;
5)查看创建数据库的详细内容
mysql>:show create database 数据库名;
eg>: show create database owen;
6)删除数据库
mysql>: drop database 数据库名;
eg>: drop database tank;
表的基本操作
前提:先选取要操作的数据库
1)查看已有表
mysql>:show tables;
2)创建表
mysql>:create table 表名(字段们);
eg>: create table student(name varchar(16), age int);
eg>: create table teacher(name varchar(16), age int);
3)查看创建表的sql
mysql>:show create table 表名;
eg>: show create table student;
4)查看创建表的结构
mysql>:desc 表名;
5)删除表
mysql>: drop table 表名;
eg>: drop table teacher;
记录的基本操作
1)查看某个数据库中的某个表的所有记录,如果在对应数据库中,可以直接查找表
mysql>: select * from [数据库名.]表名;
注:*代表查询所有字段
2)给表的所有字段插入数据
mysql>: insert [into] [数据库名.]表名 values (值1,...,值n);
eg:如果给有name和age两个字段的student表插入数据
1条>:insert into student values ('Bob', 18);
多条>:insert into student values ('张三', 18), ('李四', 20);
指定库>:insert owen.student values ('张三', 18), ('李四', 20);
3)根据条件修改指定内容
mysql>: update [数据库名.]表名 set 字段1=新值1, 字段n=新值n where 字段=旧值;
eg:> update student set name='王五', age='100' where name='张三';
注:i) 可以只修改部分字段 ii) 没有条件下,所有记录都会被更新
eg:> update student set name='呵呵';
4)根据条件删除记录
mysql>: delete from [数据库名.]表名 where 条件;
eg:> delete from student where age<30;
数据库习题
'''
1.详细解释下列mysql执行语句的每个参数与参数值的含义
mysql -hlocalhost -P3306 -uroot -proot
这句话的意思是远程连接指定的服务器:
首先第一个参数mysql就是固定写法
第二个语句-hlocalhost拆开来看就是,-h后面跟的是数据库
的ip地址,
第三个语句-P3306拆开来看就是,-P后面跟的是数据库的端口
号
第四个语句-uroot拆开来看就是,-u后面跟的是数据库的账号
第五个语句-proot拆开来看就是,-p后面跟的是数据库的密码
所以上面远程连接指定数据库的命令就是:
mysql -h+ip地址 -P+端口号 -u+账号 -p+密码
2.创建以下数据库:
db1---采用默认编码:
create database db1;
db2---采用gbk编码:
create database db2 charset='gbk';
db3---采用utf8编码:
create database db3 charset='utf8';
将bd2数据库编码修改为utf8编码格式:
alter database db2 charset="utf8";
删除db3数据库:
drop database db3;
3.创建表操作:
-- 在db1数据库内,为其添加一个t1表,表有两个字段(id int, name char)
create table t1(id int, name char);
-- 在db2数据库内,为其添加一个t2表,表有三个字段(name char, age int, phone int)
create table t2(name char, age int, phone int);
-- 思考完成:在db2数据库内,为db1添加表tt1,字段可以自由定义
create table db1.tt1(name char, age int, sex char);
-- 修改db1库t1表的name字段char类型长度为20,db2库t2表的age字段int类型长度为3
alter table db1.t1 change name name char(20);
alter table db2.t2 change name name int(3);
-- 删除思考题(数据库db1)中的tt1表
drop table db1.tt1;
-- 使用三种查询表的方式
show tables;(查看所有的表)
show create table t1;(查看指定表的详细信息)
desc t1;(以表格的形式展示t1的详细信息)
4.记录操作
-- 一次插入三条数据,为t1插入三条数据
insert into table t1(name, age, sex) values('michael', 18, 'male');
-- 一次插入一条数据,分二次为t1表插入两条数据
insert into table t1(name) values('jackson');
insert into table t1(age) values(18);
-- 分别查询显示t1,t2表下的所有数据
select * from t1;
select * from t2;
-- t1表下根据id条件更改name名字
update t1 set name='michael' where id = 1;
-- t2表下根据name删除一条数据
delete from t2 where name='nick';
'''
如果在mysql命令行里面退不出来了,可以通过输入(‘c)退出界面
mysql密码忘记了,登录不上,请见 重设密码