zoukankan      html  css  js  c++  java
  • 简述数据库管理

    (本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦)

     

    一、分类

    1.MySQL数据库:轻量级数据库,适用于中小型企业,性能好,开源的

    2.MSSQL(SQLsever):微软开发,需要安装在NT(Win Ser)系统中,不支持跨平台,适用于中大型企业

    3.ACCESS:小巧方便,适用于小型企业和小型项目

    4.ORACLE:甲骨文公司开发,收费,适用于大型企业,跨平台,性能高,需要良好的底层硬件支持

     

    二、常用的框架组合

    1.MySQL+PHP

    2.MSSQL+ASP/ASPX

    3.ORACLE+Java

    4.ACCESS+ASP

    5.JSP(Java服务器页面)+ORACLE

     

    三、数据库模型

    1.关系型数据库(结构化数据库) MySQL MSSQL ORACLE DB2等

    2.非关系型数据库(非结构化数据库) redis mongodb nosql postgresql Hbase等

     

    四、管理MySQL数据库的方式

    1.DOS-MySQL:需要配置MySQL的环境变量mysql -u root -p root

    2.phpMyAdmin:基于网页的数据库管理平台

    3.MySQL-Front:开源的,基于C/S模式的数据库管理平台

    4.Navict:功能强大的数据库管理平台,收费

     

    五、MySQL数据库结构:数据库名 --> 数据表 --> 表头(字段名) --> 数据内容

    • 表中有几个字段就会有几列数据
    • 一行数据叫记录

     

    六、管理MySQL数据库的常用命令(注意:在DOS_MySQL命令中需要加;)

    1.mysql -uroot -p  (二进制方式)登录

    2.exit  退出数据库

    3.show databases;  查看所有数据库

    1 +--------------------+
    2 | Database           |
    3 +--------------------+
    4 | information_schema |  它是5.0以后的MySQL(<5.0)数据库自带的,用来汇总数据库信息
    5 | mysql              |  存放当前数据库信息,如登录信息、权限设置、安全设置
    6 | test               |  测试数据库,可删
    7 +--------------------+

    4.use 数据库名;  使用数据库,表示进入到选择的数据库中

    5.show tables;  查看当前数据库中的所有表

    6.select * from 数据表名;  查看数据表下所有的数据内容

    7.select 字段1,字段2 from 数据表名;  查找数据表中的字段1和字段2中 的数据

    8.select version();  查看当前数据库版本

     

    七、修改密码

    1.知道原密码修改:需要进入到数据库中mysql -uroot -p

    • 低版本(5.0 5.1 5.5 5.6)修改密码:
    1 update mysql.user set password=password(‘新密码’) where user=’root’ (and host=’127.0.0.1’);
    2 UPDATE mysql.user SET PASSWORD=PASSWORD('123456Ll.') WHERE USER='root' and HOST='127.0.0.1';  
    3 flush privileges;  刷新数据库
    • 高版本(5.7 8.0):
    1 use mysql;
    2 alter user “root”@”localhost” identified by “新密码”;
    3 UPDATE mysql.user SET authentication_string
    4 =PASSWORD('root');
    5 flush privileges;  刷新数据库
    • 注意:查看user里的host的值!!!

    3.在MySQL系统之外去修改密码:mysqladmin -u root -p password “新密码”

    4.忘记密码修改(Linux):

    • 关闭MySQL服务,修改MySQL的配置文件my.ini或my.cnf
    • 打开MySQL配置文件,找到[mysqld]在后面添加:skip-grant-tables(跳过密码验证),重启服务

      • 注:在kali中默认安装了mariadb,配置文件是/etc/mysql/mariadb.conf.d/50-server.cnf

    • 直接免密码登录MySQL数据库,利用上述方法修改密码:

    1 update mysql.user set password=password(‘新密码’) where user=’root’;
    2 flush privileges;  刷新数据库
    • 修改配置文件,将添加的命令删除或者注释掉,再次重启服务

    • 使用新密码登录测试

     

    八、在MySQL数据库中添加账号并授权

    1.添加账号:

    create user “用户名”@”主机IP” identified by “密码”;  添加账号
    • 主机IP:允许哪个主机登录,(localhost 本机可登录  % 任意主机可登录  192.168.1.1表示该IP上的用户可以登录)

    2.添加权限:

    grent 权限 on 库名.表名 to “用户名”@”主机IP”
    • 权限:insert 增  drop 删 update 改  select 查 all所有
    • 库名.表名:表示能够操作的数据库和表,*.* 表示所有的数据库以及所有的表
    grant all on *.* to “icq”@”192.123.1.1”;
    • 注意:配置文件中的bingd 127.0.0.1需要注释掉,或者根据需求进行修改

    九、数据库外联(允许远程连接)

    1 update user set host=”%” where user=”root” and host=”localhost”;
    2 flush privileges;

     

    十、MySQL常用的函数

    1.version();  select @@version; 查看版本号

    select version();

    2.select user();  查看当前账号

    3.select @@hostname;  查看当前用户名

    4.select @@tmpdir;  查看临时目录

    5.select @@basedir;  数据库服务所在位置

    6.select @@datadir;  数据存放的位置

    • 数据库文件格式
      • .opt  存放编码方式
      • .frm  存储表结构(表头)
      • .MYD  存储数据,数据内容(可使用WinHex查看)
      • .MYI  存储当前数据的配置信息和索引信息

    7.mid(被截取的字符串,开始索引,截取长度);  截取字符串

    SELECT mid('pentest',1,3);

    8.ord();  显示字符ASCII码(首字母)

    SELECT ord("A");

    9.concat();  拼接字符串

    SELECT concat("1","shjsdhk","1234321");

    10.concat_ws(分隔符,多个参数);  使用分隔符拼接字符串

    1 SELECT concat_ws("~","1","asa","12das");
    2 SELECT concat_ws(0x7c,"1","asa","12das");  | 管道符的16进制 0x7c

    11.group_concat();  分组并拼接

    12.sleep(1);  让数据库等待1秒钟

    SELECT sleep(10);

     

    十一、SQL语法:

    1.创建数据库

    1 create database 数据库名;  在交互模式下,即命令行模式
    2 mysqladmin -uroot -proot create 数据库名;  在DOS命令窗口使用,需要使用mysqladmin.exe程序

    2.删除数据库

    1 drop database 数据库名;
    2 mysqladmin -uroot -proot drop 数据库名;

    3. 数据库中数据类型

    • int  整型
    • bigint  大整型
    • float  浮点型,单精度浮点型 0.2
    • date  日期
    • time  时间
    • char  单个字符
    • varchar  变长字符
    • text  文本
    • timestamp  时间戳
    • double  双精度浮点型  3.00
    • bit  比特(用01表示)
    • tinyint 0或者tinyint 1  布尔

    4.创建表:use 表;

    create table 表名(字段名1 数据类型 primary key ,字段名2 数据类型,......)设置编码;
    • 表中需要一个大哥作为代表,该代表是唯一的,能够表示某个人、事物,将该大哥称为主键

    • 通过主键能够确定一个记录,PRIMARY KEY ( `id` )  放在最后

    • 注意:字段名不需要加单双引号,数据类型中根据需求说明长度
    • auto_increment  表示自增
    1 id INT NOT NULL AUTO_INCREMENT,
    2 AUTO_INCREMENT=22  设置数字的意思是想要让这条语句在增长的时候,从22开始自增
    • not null  表示不允许为空
    title VARCHAR(100) NOT NULL,
    • 设置编码:default charset=utf8;
    • ENGINE=InnoDB:如果不写也可,是默认的,在这里写上是因为可以很清楚的看到这个建表语句用了哪些,而且在创建表的时候,写上也是一个很好的习惯

    5.删除表

    drop table 表名;   删除需要慎用

    6.查看表中字段

    1 show create table 表名;
    2 或dsec 表名;

    7.后续添加主键

    alter table 表名 add primary key(字段);  注意主键的字段不为空

    8.往表中插入数据

    insert into 表名(字段名1,字段名2,......) value(值1,值2,......);
    • 注意:数据类型为字符串的,在添加数据时需要加上””,自增的主键可以不用插入数据

    9.在表中查询数据

    1 select 字段名 from 表名;
    2 select 字段名 from 表名 where 字段名=指定的值;  一个条件
    3 select 字段名 from 表名 where 字段名1=值1 and或or 字段名2=值2;  多条件

    10.限制查询

    1 limit a,b;  a和b均为数字,a表示记录的索引(索引从0开始),b表示记录的长度
    2 select * from 表名 limit 1,2;
    3 limit a;  从0开始选择a个记录
    4 select * from 表名 limit 1;

    11.更新数据

    1 update 表名 set 字段1=值1,字段2=值2;   更改所有的字段,将字段1下的所有值都改为值1
    2 update 表名 set 字段1=值1,字段2=值2 where 条件;

    12.删除表中数据

    delete from 表名 where 条件;  慎用!!! 

    13.like子句:模糊查询

    • 通配符:%  匹配任意字符 _  匹配单个字符
    select * from 表名 where name like “字段匹配符”;

    14.Union联合查询

    • 语法:查询语句1 union 查询语句2  将查询出来的结果放在一张表中显示,查询出来的字段个数必须一致!
    1 select 1,2,3;
    2 select 1 as a,2 as b,3 as c;  把1放在a字段中
    3 select * from 表名;  这个数据表中也只有3个字段
    4 selet * from 表名 union select 1 as a,2 as b,3 as c;
    • 可以根据查询语句2 的字段数量判断查询语句1的字段数量
    select * from mysql.user union select 1,2,3,......,45;

    15.Order by

    • 语法:order by 条件  根据给定的条件排序,默认情况下表的排序时升序
    select * from 表名 order by 字段 [asc或desc];  根据执行的字段名去排序
    • asc升序,desc降序
    • 如果数字超过了字段的列数,则会报错,可以根据数字来推断表中的字段数
    select * from 表名 order by 数字;  表示对第n列数据进行排序

    16.删除字段

    alter table 表名 drop 字段名;  删除指定表下的字段名

    17.添加字段:

    alter table 表名 add 字段名 字段类型;  

    18.修改表名:

    alter table 原表名 rename to 新表名;

    19.去重查询:

    select distinct 字段 from 表名;

    20.注释符:#和--

    十二、数据的导入和导出

    1.导入数据:

    • 方法1:mysql -uroot -proot <需要导入的数据库文件(data.sql)注意:data.sql需要自动创建数据库,并且需要选择该数据库
      • 如果data.sql不会自动创建数据库,手动创建数据库
    1 mysql -uroot -proot
    2 create databases 数据库名;
    3 use 数据库名;
    4 source 数据库文件;
    • 方法2:使用phpmyadmin等平台导入数据,如果导入的文件还是不能自动创建数据库,则需要手动创建

    • 方法3:首先需要创建数据库,创建数据表名(表名和导入数据库文件名一致),该表的字段名要和导入的数据的字段保持一致
    1 mysqlimport -uroot -proot --local 被导入的数据库名 需要导入的数据库文件
    2     --local  表示本地任意位置均可导入数据,加上-L即可

    2.导出数据

    • 方法1:借助平台(phpMyAdmin、mysql-fornt、navicat等等)
    • 方法2:
    1 mysqldump -uroot -proot 要导出的数据库名 > 路径./data.sql  导出数据库
    2 mysqldump -uroot -proot 数据库名 要导出的数据表名 > 路径  导出数据表 
    • 方法3:
    1 select 字段 from 表名 into outfile “文件名”;  将数据库中的字段内容导入到文件中
    2 select * from mysql.user into outfile “./123.txt”;
    3 ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
      • 首次从数据库中导出文件,数据库会运行--secure-file-priv安全机制,会限制导入导出文件。查看该安全项的值:
    1 show global variables like ‘%secure_file_priv%’;
    2     secure_file_priv为NULL,表示MySQL限制导入导出
    3     secure_file_priv没有值,表示MySQL不限制导入导出
    4     secure_file_priv值为目录,表示MySQL只能在目录下执行导入导出,其他目录不允许
      • 修改该安全选项:
        • 临时方法:
    1 set global secure_file_priv=’’;
    2 ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable  表示不能通过SQL语句更改 
        • 长久方法:修改配置文件,在配置文件中找到[mysqld],在后面添加secure_file_priv=’’,保存退出,重启服务

    十三、使用PHP操作MySQL数据库

    1.使用mysqli扩展(推荐),只针对mysql数据库

    • 面向对象的方式
     1 <?php
     2 $ser="127.0.0.1";
     3 $name="root";
     4 $pwd="root";
     5 
     6 //面向对象
     7 
     8 @$conn=new mysqli($ser,$name,$pwd);
     9 if($conn -> connect_error){
    10     // echo "连接失败:" . $conn -> connect_error;
    11     die("连接失败:" . $conn -> connect_error);
    12 }else{
    13     echo "数据库连接成功!";
    14 }
    15 $conn->close();
    • 直接方式(面向过程)

     1 <?php
     2 $ser="127.0.0.1";
     3 $name="root";
     4 $pwd="root";
     5 
     6 //面向过程
     7 
     8 $conn=mysqli_connect($ser,$name,$pwd);
     9 if($conn){
    10     echo mysqli_connect_error();
    11 }
    12 echo "连接成功!!!";
    13 var_dump($conn);
    14 mysqli_close($conn);

    2.使用mysql扩展(OHO<=5.5) 2012年开始不建议使用

    3.使用PDO(PHP data objects)技术(防止sql注入)面向对象的方式,即需要new对象(推荐)可以应用在12种数据库种

     1 <?php
     2 $ser="127.0.0.1";
     3 $name="root";
     4 $pwd="root";
     5 
     6 //PDO
     7 try{
     8 $conn=new PDO("mysql:host=$ser;,$name,$pwd");
     9 echo "连接成功!!!";
    10 }
    11 catch(PDOException $ee){
    12 //print_r($ee);
    13 echo $ee->getMessage();
    14 }
    15 $conn=null;

    4.使用mysqli和PDO需要通过phpinfo()查看当前环境中有没有mysqli和pdo的扩展

    5.常用语句

    1 $conn=mysqli_connect(ip:port,name,pwd,db)  连接数据库
    2 $result=mysqli_query(连接$conn,SQL语句)
    3 mysqli_num_rows($result)  查询记录数
    4 mysqli_fetch_assoc($result)  将结果第一行转换为关联数组
    5 mysqli_fetch_all($result)  将结果所有行转换为关联数组和数字数组
    6 mysqli_fetch_array($result)  将结果第一行转换为关联数组和数字数组

    6.创建数据库

     1 <?php
     2 include 'mysql.conf';
     3 $conn=mysqli_connect($ip,$name,$pwd);
     4 $sql="create database teachers";
     5 if(mysqli_query($conn,$sql)){
     6     echo "创建数据库成功!!!";
     7 }
     8 else{
     9     echo mysqli_error($conn);
    10 }
    11 mysqli_close($conn);
    12 
    13 mysql.conf
    14 <?php
    15 $ip="127.0.0.1";
    16 $name="root";
    17 $pwd="root";
    创建数据库.php

    7.创建数据表

     1 <?php
     2 include 'mysql.conf';
     3 $conn=mysqli_connect($ip,$name,$pwd,$db);
     4 $sql1="create database teachers";
     5 $sql2="create table info(
     6 id int(10) unsigned auto_increment primary key,
     7 name varchar(50) not null)";//创建表
     8 //$sql3="insert into info(id,name) values (1,'qwe')";
     9 if(mysqli_query($conn,$sql2)){
    10     echo "创建数据表成功!!!";
    11 }
    12 else{
    13     echo mysqli_error($conn);
    14 }
    15 
    16 mysqli_close($conn);
    17 <?php
    18 $ip="127.0.0.1";
    19 $name="root";
    20 $pwd="root";
    21 $db="teachers";
    创建数据表.php

    8.插入数据

     1 <?php
     2 include 'mysql.conf';
     3 $conn=mysqli_connect($ip,$name,$pwd,$db);
     4 $sql1="create database teachers";
     5 $sql2="create table info(
     6 id int(10) unsigned auto_increment primary key,
     7 name varchar(50) not null,
     8 date timestamp)";//创建表
     9 $sql3="insert into info(name) values ('qwe')";//插入数据
    10 $sql4="insert into info(name) values ('ertt');insert into info(name) values ('sdfddf')";//插入多行数据
    11 if(mysqli_query($conn,$sql3)){
    12     echo "插入数据成功!!!";
    13 }
    14 else{
    15     echo mysqli_error($conn);//打印错误信息
    16 }
    17 
    18 mysqli_close($conn);
    19 <?php
    20 $ip="127.0.0.1";
    21 $name="root";
    22 $pwd="root";
    23 $db="teachers";
    插入数据.php

    9.读取数据

     1 <?php
     2 include 'mysql.conf';
     3 $conn=mysqli_connect($ip,$name,$pwd,$db);
     4 $sql1="create database teachers";
     5 $sql2="create table info(
     6 id int(10) unsigned auto_increment primary key,
     7 name varchar(50) not null,
     8 date timestamp)";//创建表
     9 $sql3="insert into info(name) values ('ccc')";//插入数据
    10 $sql4="insert into info(name) values ('ertt');insert into info(name) values ('sdfddf')";//插入多行数据
    11 $sql5="select * from info";
    12 $result=mysqli_query($conn,$sql5);
    13 if($result){
    14     echo "查询数据成功!!!";
    15     var_dump($result);
    16     $numbers=mysqli_num_rows($result);//查询的记录数
    17     /*$rows=mysqli_fetch_assoc($result);//将执行的结果转化成关联型数组
    18     var_dump($rows);*/
    19     while ($rows=mysqli_fetch_assoc($result)) {
    20         print_r($rows);
    21     }
    22 
    23 }
    24 if(mysqli_query($conn,$sql3)){
    25     echo "插入数据成功!!!";
    26 }
    27 else{
    28     echo mysqli_error($conn);//打印错误信息
    29 }
    30 
    31 mysqli_close($conn);
    32 <?php
    33 $ip="127.0.0.1";
    34 $name="root";
    35 $pwd="root";
    36 $db="teachers";
    读取数据.php
  • 相关阅读:
    Oracle varchar2最大支持长度(转)
    Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结(转)
    Android java.net.SocketException四大异常解决方案
    Android 设定activity的进入和退出效果
    Android TabHost 动态修改图标或者动态改变标题
    Android TabHost中实现标签的滚动以及一些TabHost开发的奇怪问题
    Android 动态Tab分页效果
    Android ActionBar通过Tab进行不同的Fragment之间的交换
    Android 如何动态改变Actionbar上的item图标
    RGB颜色查询对照表
  • 原文地址:https://www.cnblogs.com/yankaohaitaiwei/p/11673621.html
Copyright © 2011-2022 走看看