初识数据库

数据库基础
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:WINDOWSsystem32>net start mysql

   启动mysql的client
   2.C:WINDOWSsystem32>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)
原文地址:https://www.cnblogs.com/shawnhuang/p/10347154.html