漫天飞雪

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.什么是数据库?
    数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的过去人们将数据
存放在文件柜里。

2.为什么用数据库?
    现在数据量庞大,已经不再适用数据库是长期存放在计算机内、有组织、可共享的数据即可。数据库中的数据按
一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
3.如何使用数据库?
    如何科学地组织和存储数据,如何高效获取和维护数据成了关键这就用到了一个系统软件---数据库管理系统
数据库管理系统(DataBase Management System 简称DBMS
MySQLOracleSQLiteAccessMS SQL Server
mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的
     他现在是甲骨文公司的产品。
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。

4.数据库服务器、数据管理系统、数据库、表与记录的关系(重点理解!!!)

记录:1 刘海龙  324245234 22(多个字段的信息组成一条记录,即文件中的一行内容)

表:student,scholl,class_list(即文件)
数据库:oldboy_stu(即文件夹)
数据库管理系统:如mysql(是一个软件)
数据库服务器:一台计算机(对内存要求比较高)

总结:
    数据库服务器:运行数据库管理软件
    数据库管理软件:管理-数据库
    数据库:即文件夹,用来组织文件/表
    表:即文件,用来存放多行内容/多条记录
5.数据管理系统的特点
    1 数据结构化(如上图odboy_stu
    2 数据共享,冗余度低,易扩充
    3 数据独立性高
    4 数据由DBMS统一管理和控制
        a:数据的安全性保护
        b:数据的完整性检查
        c:并发控制
        d:数据库恢复

6.数据库管理软件分类
分两大类:
    关系型: sqllitedb2oracleaccesssql serverMySQL,注意:sql语句通用
            关系型数据库需要有表结构
   关系型: mongodbredismemcache
            非关系型数据库是key-value存储的,没有表结构
就数据库而言,我们将会采用mysql数据进行数据学习

7.mysql数据库安装
    Window版本
    1、下载:MySQL Community Server 5.7.16
http://dev.mysql.com/downloads/mysql/

    2、解压
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\mysql-5.7.16-winx64

    3、添加环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 -->【将MySQLbin目录路径追加到变值值中,用  分割】
 
    4、初始化
mysqld --initialize-insecure

    5、启动MySQL服务端
mysqld # 启动MySQL服务
    杀掉进程方法:
        tasklist | findstr mysqld ,查找服务,查看服务的进程号
        taskkill /pid /f pid    f是强制杀掉

    6、启动MySQL客户端并连接MySQL服务
mysql -u root -# 连接MySQL服务器

↑上一步解决了一些问题,但不够彻底,因为在执行【mysqd】启动MySQL服务器时,当前终端会被hang住,那么做一下设置即可解决此问题:

注意:--install前,必须用mysql启动命令的绝对路径

8.制作MySQLWindows服务
    1、在终端执行此命令:
"c:\mysql-5.6.41-winx64\bin\mysqld" --install
    安装成功提示
    Service successfully installed.
    如果出现拒绝安装,请以管理员身份运行cmd
    
    2、移除MySQLWindows服务,在终端执行此命令:
"c:\mysql-5.6.41-winx64\bin\mysqld" --remove

注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令:
@启动MySQL服务
    net start mysql

@关闭MySQL服务
    net stop mysql

 
9.windows下,为mysql服务指定配置文件
   强调:配置文件中的注释可以有中文,但是配置项中不能出现中文

mysql的解压目录下,新建my.ini,然后配置
#1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效
[mysqld]
;skip-grant-tables
port=3306
character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1


#解压的目录
basedir=c:\mysql-5.6.41-winx64
#data目录
datadir=c:\my_data #在mysqld --initialize时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据



#2. 针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123

#3. 只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置
[mysql]
;port=3306
;default-character-set=utf8
user=joke
password=123

#!!!如果没有[mysql],则用户在执行mysql命令时的配置以[client]为准
 
 
 
 
10.统一字符编码
1. 修改配置文件
[mysqld]
default-character-set=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

mysql5.5以上:修改方式有所改动
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

2. 重启服务
3. 查看修改结果:
\s
show variables like '%char%'
---------------------------------数据库’基础‘操作---------------------------------------
包括如下:
    1.密码修改
    2.用户登录
    3.数据操作相关
        1.建库操作
        2.建表操作
            1.表结构操作
            2.表内容操作
        3.创建用户操作
        4.用户权限操作
小贴士:
        
        
        
        
1.数据库密码修改
        1)如果密码已知,进行密码修改
        当前root账户未设置密码
    mysqladmin -uroot -p password123
        2)如果密码不知道了,就需进行Miami破解
    windows平台下,5.6版本mysql,破解密码的两种方式:
        方式1
    1 关闭mysql
    2 cmd中执行:mysqld --skip-grant-tables
    3 cmd中执行:mysql
    4 执行如下sql
    update mysql.user set authentication_string=password('') where user = 'root';
    flush privileges;
    5 taskill mysqld #或taskkill -f /PID 7832
    6 重新启动mysql
    
        方式2
    1. 关闭mysql,可以用taskill mysqld将其杀死
    2. 在解压目录下,新建mysql配置文件my.ini
    3. my.ini内容,指定
    [mysqld]
    skip-grant-tables
    4.启动mysqld
    5.cmd里直接输入mysql登录,然后操作
    update mysql.user set authentication_string=password('') where user='root and host='localhost';
    flush privileges;
    6.注释my.ini中的skip-grant-tables,然后启动myqsld,然后就可以以新密码登录了
    

2.登录数据库:
    mysql -uroot -p123#不推荐,因为密码明文出现
    mysql -uroot -p#推荐,命令行会提示输入密码,此时密码输入时不是明文显示的哦

3.数据库操作相关
    SQLStructured Query Language 即结构化查询语言)
    SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。
        SQL语言分为3种类型:
            1DDL语句    数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
            2DML语句    数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
            3DCL语句    数据库控制语言: 例如控制用户的访问权限GRANTREVOKE

数据库四个基本操作:
 
 
 
 
 分别映射到------对数据库操作
         ------对表操作
                    对表结构操作
                    对表内容操作
库操作
    默认数据库:已经存在的数据库
      mysql - 用户权限相关数据
      test  - 用于用户测试数据
      information_schema - MySQL本身架构相关数据

  创建数据库
        CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
        CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
  查看数据库
        SHOW DATABASES;
  使用数据库
        USE 数据库名;

表结构操作

创建表
        create table 表名(
        列名  类型  是否可以为空,
        列名  类型  是否可以为空
    )ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
            create table tb1(
                nid int not null defalut 2,
                num int not null
            )
            
       自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)
                create table tb1(
                    nid int not null auto_increment primary key,
                    num int null
                )
                
                create table tb1(
                    nid int not null auto_increment,
                    num int null,
                    index(nid)
                )
                注意:1、对于自增列,必须是索引(含主键)。
                     2、对于自增可以设置步长和起始值
                         show session variables like 'auto_inc%';
                         set session auto_increment_increment=2;
                         set session auto_increment_offset=10;
    
                         shwo global  variables like 'auto_inc%';
                         set global auto_increment_increment=2;
                         set global auto_increment_offset=10;
        主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
                create table tb1(
                    nid int not null auto_increment primary key,
                    num int null
                )
                
                create table tb1(
                    nid int not null,
                    num int not null,
                    primary key(nid,num)
                )
        
        外键,一个特殊的索引,只能是指定内容
            creat table color(
                nid int not null primary key,
                name char(16) not null
            )
    
        create table fruit(
                nid int not null primary key,
                smt char(32) null ,
                color_id int not null,
                constraint fk_cc foreign key (color_id) references color(nid)
            )
修改表
    添加列:alter table 表名 add 列名 类型
    删除列:alter table 表名 drop column 列名
    修改列:
           alter table 表名 modify column 列名 类型;  -- 类型
           alter table 表名 change 原列名 新列名 类型; -- 列名,类型
  
    添加主键:
            alter table 表名 add primary key(列名);
    删除主键:
            alter table 表名 drop primary key;
            alter table 表名  modify  列名 int, drop primary key;
      
    添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
    删除外键:alter table 表名 drop foreign key 外键名称
      
    修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
    删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

清空表
    delete from 表名
    truncate table 表名

删除表
    drop table 表名
表内容操作
    
        insert into  (列名,列名...) values (值,值,值...)
        insert into  (列名,列名...) values (值,值,值...),(值,值,值...)
        insert into  (列名,列名...) select (列名,列名...) from 
    
        delete from 
        delete from  where id1 and name'alex'
    
        update  set name  'alex' where id>1
    
        select * from 
        select * from  where id > 1
        select nid,name,gender as gg from  where id > 1
    其他
    
           a、条件
                select * from  where id > 1 and name != 'alex' and num = 12;
             
                select * from  where id between 5 and 16;
             
                select * from  where id in (11,22,33)
                select * from  where id not in (11,22,33)
                select * from  where id in (select nid from 表)
         
            b、通配符
                select * from  where name like 'ale%'  - ale开头的所有(多个字符串)
                select * from  where name like 'ale_'  - ale开头的所有(一个字符)
             
            c、限制
                select * from  limit 5;            - 5
                select * from  limit 4,5;          - 从第4行开始的5
                select * from  limit 5 offset 4    - 从第4行开始的5
             
            d、排序
                select * from  order by  asc              - 根据 “列” 从小到大排列
                select * from  order by  desc             - 根据 “列” 从大到小排列
                select * from  order by 1 desc,列2 asc    - 根据 “列1 从大到小排列,如果相同则按列2从小到大排序
             
            e、分组
                select num from  group by num
                select num,nid from  group by num,nid
                select num,nid from   where nid > 10 group by num,nid order by nid desc
                select num,nid,count(*),sum(score),max(score),min(score) from  group by num,nid
             
                select num from  group by num having max(id) > 10
             
                特别的:group by 必须在where之后,order by之前
             
            f、连表
                无对应关系则不显示
                select A.num, A.name, B.name
                from A,B
                Where A.nid = B.nid
             
                无对应关系则不显示
                select A.num, A.name, B.name
                from A inner join B
                on A.nid = B.nid
             
                A表所有显示,如果B中无对应关系,则值为null
                select A.num, A.name, B.name
                from A left join B
                on A.nid = B.nid
             
                B表所有显示,如果B中无对应关系,则值为null
                select A.num, A.name, B.name
                from A right join B
                on A.nid = B.nid
             
            g、组合
                组合,自动处理重合
                select nickname
                from A
                union
                select name
                from B
             
                组合,不处理重合
                select nickname
                from A
                union all
                select name
                from B
权限管理
    show grants for '用户'@'IP地址'                  -- 查看权限
    grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权
    revoke 权限 on 数据库.表 from '用户'@'IP地址'      -- 取消权限

数据库
    对于目标数据库以及内部其他:
            数据库名.*           数据库中的所有
            数据库名.表          指定数据库中的某张表
            数据库名.存储过程     指定数据库中的存储过程
            *.*                所有数据库
用户名:
  用户名@IP地址         用户只能在改IP下才能访问
  用户名@192.168.1.%   用户只能在改IP段下才能访问(通配符%表示任意)
  用户名@%             用户可以再任意IP下访问(默认IP地址为%)


权限:
    all privileges  grant外的所有权限
    select          仅查权限
    select,insert   查和插入权限
    ...
    usage                   无访问权限
    alter                   使用alter table
    alter routine           使用alter proceduredrop procedure
    create                  使用create table
    create routine          使用create procedure
    create temporary tables 使用create temporary tables
    create user             使用create userdrop userrename userrevoke  all privileges
    create view             使用create view
    delete                  使用delete
    drop                    使用drop table
    execute                 使用call和存储过程
    file                    使用select into outfile  load data infile
    grant option            使用grant  revoke
    index                   使用index
    insert                  使用insert
    lock tables             使用lock table
    process                 使用show full processlist
    select                  使用select
    show databases          使用show databases
    show view               使用show view
    update                  使用update
    reload                  使用flush
    shutdown                使用mysqladmin shutdown(关闭MySQL)
    super                   􏱂􏰈使用change masterkilllogspurgemasterset global。还允许mysqladmin􏵗􏵘􏲊􏲋调试登陆
    replication client      服务器位置的访问
    replication slave       由复制从属使用
实例
    grant all privileges on db1.tb1 TO '用户名'@'IP'

    grant select on db1.* TO '用户名'@'IP'

    grant select,insert on *.* TO '用户名'@'IP'

    revoke select on db1.tb1 from '用户名'@'IP'
小贴士:
    flush privileges;将数据读取到内存中,从而立即生效。
用户管理
    创建用户
        create user '用户名'@'IP地址' identified by '密码';
    删除用户
        drop user '用户名'@'IP地址';
    修改用户
        rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
    修改密码
        set password for '用户名'@'IP地址' = Password('新密码')
      
    PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)
 Linux版本

    安装:
        yum install mysql-server  
    服务端启动
        mysql.server start
    客户端连接
        mysql -h host -u user -p password

sql语句同windows一致
posted on 2018-12-27 09:22  漫天飞雪世情难却  阅读(115)  评论(0编辑  收藏  举报