初识数据库
数据库基础
1.数据库在平时的开发中占有一个什么样的地位
2.数据库发展史
3.数据库的分类
4.数据库中的一些基础概念
5.安装数据库
6.数据库的启动和停止
7.sql语句(操作数据库的语法)
和用户权限相关的
数据库的基础操作
表的数据操作
数据的基础操作
为什么用数据库?
1.将文件和程序存在一台机器上是很不合理的,如果机器坏了,问题很严重
2.操作文件本身也很麻烦
数据库的概念
数据库是一个可以在一台机器上独立工作的
并且可以提供高效、便捷的方式对数据进行增删改查的一种工具
数据库的优势
1.提高程序稳定性——任意一台服务所在的机器崩溃了都不会影响数据和另外的服务
2.数据一致性——所有的数据存储在一起,所有的程序操作的数据都是统一的,不会出现数据不一致的现象
3.并发——数据库可以很好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作,不需要写socket
4.高效——使用数据库对数据进行增删改查的效率远高于处理文件操作
初始数据库
数据 Data
比如用户名,密码,性别等
很多条数据垒在一起形成一个文件
每一个程序都可能会有多个文件与之对应
多个文件组成一个子文件夹,这个文件夹单独属于某个程序
数据库 DateBase,简称DB
所谓数据库,就是所有的程序需要的数据都存储在一个仓库中(指计算机的存储设备,比如硬盘)
多个程序就在这个仓库中创建多个文件夹
在一个数据库当中,可能存在多个程序的数据,分别存储在不同的文件夹中
数据库里的数据是按一定格式存放的
数据库管理系统 DataBase Managerment System,简称DBMS
负责了程序中数据的增删改查以及权限控制等功能
mysql oracle
sqlserver sqllite
redis mangodb
最常见的是以下三种:
mysql——主要用于大型门户,比如搜狗、新浪等,主要优势是开放源代码,意味着免费。现在归属于甲骨文公司
oracle——主要用于银行、铁路、飞机场等,功能强大,费用也高。同样归属于甲骨文公司
sql server——主要用于大中型企业,比如联想、方正等,归属于微软公司
数据库管理员 Database Administrator,简称DBA
数据库的安装、配置
创建用户、给人权限
数据库的优化管理
帮人设计表结构
安装一个数据库——意思就是数据库管理系统
数据库服务器、数据管理系统、数据库、表与记录的关系(重点)
数据库服务器
服务器——提供服务的机器
数据库服务器——提供数据库服务的机器
数据管理系统
mysql oracle redis mangodb
数据库
这里是指数据库管理系统的内部的一个数据库(上面的所谓只是一个概念,这里是指
表与记录的关系
记录——多条数据
表 ——一个文件
库 ——一个文件夹(比如说创建一个数据库)
数据库管理系统分类
按照存取数据的特点划分
关系型
mysql oracle sqlserver
优点:
关系型数据库非常节省空间,减少冗余数据
能够清晰表达数据库与数据库之间关系的数据库管理工具
能够存储复杂的数据结构
非关系型
redis memcahe mangodb
采用key-value结构
特点:查找速度快,会有数据冗余。但是有些时候并不在意这方面,只求效率
MySQL的特点:体积小、速度快、总体拥有成本低(开源)
启动mysql服务端的两种方法:
1. 同时按windows键+R键,输入 services.msc,下拉菜单选择Mysql,右击点击启动;
2. 以管理员身份运行cmd,然后输入 net start mysql 即可
启动mysql客户端的方法:
以管理员身份运行cmd, 然后输入 mysql -uroot -p, 按回车,输入密码
关闭mysql客户端的方法:
在mysql中输入exit; 或者quit;
关闭mysql服务端的方法:
退出mysql客户端后,输入 net stop mysql 即可
启动mysql的server
1.C:\WINDOWS\system32>net start mysql
启动mysql的client
2.C:\WINDOWS\system32>mysql -uroot -p -u 用户名 -p 密码
查用户是谁 —— select user();
3.mysql> select user();
# 注意英文的分号 ; 不能丢
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
给当前登录的用户设置密码
4.mysql> set password = password('xxx');
Query OK, 0 rows affected (0.00 sec)
退出client端
5.mysql> exit # 表示退出,只是退出client端,server端并没有停止
展示文件夹
6.mysql> show databses;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
展示用户名和密码(注意是密文密码)
7.mysql> select user,password from mysql.user;
+------+-------------------------------------------+
| user | password |
+------+-------------------------------------------+
| root | *69550FB8E58D54DC403B89772FC2DD782F4215E3 |
| root | |
| root | |
| | |
+------+-------------------------------------------+
4 rows in set (0.00 sec)
root用户是拥有最高权限的用户
创建一个权限有限的用户给别人使用
创建用户阶段
1.mysql> create user "pengpeng"@"localhost";
# 用户名为"pengpeng"的只能在本地,即我的电脑上使用
# 再输入 set password = password('xxx'); 来设置密码
2.mysql> create user "pengpeng"@"192.168.xx.xx";
# 用户"pengpeng"只能在"192.168.xx.xx"这个ip地址的电脑上登录并使用mysql
3.mysql> create user "pengpeng"@"192.168.11.%";
# 用户"pengpeng"能在"192.168.11.xx" xx表示任意一个数字字段的电脑上使用
4.mysql> create user "pengpeng"@"localhost" identified by "123";
# 用户"pengpeng"只能在root用户的电脑使用"123"作为登录密码
开启客户端登录
1.mysql -u用户名 -p密码 # 登录本地的数据库
2.mysql -u用户名 -p密码 -h # 登录指定ip地址的电脑的数据库
3.mysql> create user "pengpeng"@"localhost" identified by "123"; # 比如先创建一个用户,然后退出
4.mysql -upengpeng -p123 -hlocalhost # 再登录
5.show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
# 发现权限很低
授权阶段
1.mysql -uroot -p # root用户登录
2.create user "jane"@"localhost"; # 创建一个用户
# select,insert,update,delete(一般不给删除权限)
3.1.grant all on mysql.user to "jane"@"localhost";
# 给用户"jane"在mysql这个库的user表增删改查的权限
3.2.grant select,insert on mysql.user to "jane"@"localhost";
# 给用户"jane"在mysql这个库的user表查增的权限
3.3.grant select,insert on mysql.* to "jane"@"localhost";
# 给用户"jane"在mysql这个库的所有表查增的权限
3.4.grant select,insert on *.* to "jane"@"localhost";
# 给用户"jane"所有库所有表的查增的权限
4.flush privileges; # 刷新使授权立即生效
5.exit # 退出让用户"jane"登录
6.mysql -ujane -p # 这里没设置密码,所以下一步提示输入密码时按Enter键即可
7.show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
创建用户并授权
创建用户 1.grant all on *.* to "alex"@"localhost" identified by "123";
查看所有用户 2.select user from mysql.user; +----------+ | user | +----------+ | root | | root | | | | alex | | jane | | pengpeng | | root | +----------+ 7 rows in set (0.00 sec) # 以上是包括之前创建的用户
查看某个用户的权限 3.show grants for "alex"@"localhost"; +--------------------------------------------------------------------+ | Grants for alex@localhost | +--------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'alex'@'localhost'
IDENTIFIED BY PASSWORD '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257' | +--------------------------------------------------------------------+ 1 row in set (0.00 sec)
sql语句——结构化查询语言
sql语句分3种类型:
1.DDL语句——数据库定义语言:数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
create 创建一个库,一个表
drop 删除一个库,一个表
alter 修改
2.DML语句——数据库操纵语言:插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
操作数据
3.DCL语句——数据库控制语言:例如控制用户的访问权限GRANT、REVOKE
创建用户
授权用户
取消授权(revoke)
操作文件夹(库)
增: create database 1号数据库;
# 如果在配置文件my.ini中没有设置utf-8,这里就要在后面添加charset utf8
Query OK, 1 row affected (0.00 sec)
查: show databases
+--------------------+
| Database |
+--------------------+
| information_schema |
| 1号数据库 |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
删: drop database 1号数据库;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
改: alter database db1 charset latin1;
# 库能修改的只有编码
操作文件(表)
1.首先没有库的话,先创建一个库: create datebase 数据库名;
1.1.create database 测试用数据库;
1.2.show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| 1号数据库 |
| 测试用数据库 |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)
切换到某一个数据库:use 数据库名;
2.use 1号数据库;
# 切换到1号数据库
查看某个数据库的所有表: show tables;
3.show tables;
创建一个表,并写明数据类型
4.create table 1号表 (num int, name char);
# 创建一个表,数字要写明整数型,名字写明字符串型
5.show tables;
+-------------------------+
| Tables_in_1号数据库 |
+-------------------------+
| 1号表 |
+-------------------------+
1 row in set (0.00 sec)
查看表的结构:desc 表名;
6.desc 1号表;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)
# 这里的char(1)表示只能存一个字符,明显不够用
修改表的某一字段属性
7.alter table 1号表 modify name char(4);
# alter 修改,modify 修改某一字段的某一属性
8.desc 1号表;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num | int(11) | YES | | NULL | |
| name | char(4) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
修改字段名
9.alter table 1号表 change name stu_name char(4);
# change 修改字段名
10.desc 1号表;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| num | int(11) | YES | | NULL | |
| stu_name | char(4) | YES | | NULL | |
+----------+---------+------+-----+---------+-------+
2 rows in set (0.03 sec)
操作文件中的内容(记录,数据)
添加数据
1.insert into 1号表 values (1, "蓬蓬"), (2, "太白");
查看表
2.select * from 1号表;
+------+----------+
| num | stu_name |
+------+----------+
| 1 | 蓬蓬 |
| 2 | 太白 |
+------+----------+
2 rows in set (0.00 sec)
修改表中的某个属性
3.update 1号表 set stu_name = "alex" where num = 1;
# 修改表中num=1的stu_name属性,即使有多个1,也会同时修改
+------+----------+
| num | stu_name |
+------+----------+
| 1 | alex |
| 2 | 太白 |
+------+----------+
2 rows in set (0.00 sec)
4.delete from 1号表 where num = 2;
# 修改1号表中对应num=2的stu_name属性
5.select * from 1号表;
+------+----------+
| num | stu_name |
+------+----------+
| 1 | alex |
+------+----------+
1 row in set (0.00 sec)
删除某个表
6.drop table 1号表;
# 删除1号表
7.show tables;
Empty set (0.00 sec)