MYSQL

_____egon新书来袭请看:https://egonlin.com/book.html

一 数据库是什么

存储数据的仓库,最基本的,该仓库对外提供优化好的增删改查数据的功能。

二 为什么要有数据库

数据的存储方式依次经历了

三 数据库技术构成

1.数据库系统DBS

DBMS(DataBase Management System):MySQL,SQL Server,Oracle,DB2,mariadb

RDBMS((Relational Database Management System):上述DBMS被称之为关系型数据库

2.SQL语句

  • DDL语句:数据库定义语言,库、表、视图、索引、存储过程,包含create DROP ALTER语句
  • DML语句:数据库操纵语言,包含INSERT,DELETE,UPDATE,SELECT
  • DCL语句:数据库控制语言。包含GRANT,REVOKE等

3.数据库访问技术

  • JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API
  • ODBC(Open Database Connectivity,开放数据库连接)它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口),ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

四 MySQL及其他数据库介绍

Mysql是最流行的关系型数据库管理系统之一,在WEB应用方面MySQL是最好的RDBMS:关系数据库管理系统)应用软件之一。由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • Mysql是开源的,体积小,适用于linux平台,一般用于网站设计和小型软件。。
  • MySQL使用标准的SQL数据语言形式。
  • 使用c和c++编写 保证源代码的可移植性。支持多种操作系统 linx,mac os,freeBSD,windos,aix...
  • 为多种语言提供了api,包括(C C++ java php python等)
  • 支持tcp/ip,ODBC和JDBC等多种数据的连接途径
  • 支持多线程,充分利用cpu资源
  • 支持多种存储引擎(MyISAM、InnoDB、MEMORY等)
  • Mysql对PHP有很好的支持,PHP+mysql 被誉为完美结合。。
  • MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
  • Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。

缺点:
相对于oracle DB2 SQLserver来讲规模小,功能有限(mysql cluster的功能和效率比较差)

 

在异常处理等方面还有待提升。
与其他数据库对比:

SQL server 是Microsoft的数据库,上手容易,简单,非常适合新手。一般用于.net 程序设计

oracle 是大型的关系型数据库,体积大。可以支持多个实例同时运行,功能非常强大;(所有的问题都用一个方案解决,效率低)

五 安装及管理

安装

在linux平台

1 yum -y install mariadb mariadb-server
2 或者
3 yum -y install mysql mysql-server

在windows平台

1 http://dev.mysql.com/downloads/mysql/ 

启动

1 service mysqld start #开启
2 chkconfig mysqld on #设置开机自启
3 或者
4 systemctl start mariadb
5 systemctl enable mariadb

查看

1 ps aux |grep mysqld #查看进程
2 netstat -an |grep 3306 #查看端口

设置密码

1 mysqladmin -uroot password '123'#设置初始密码,初始密码为空因此-p选项没有用
2 mysqladmin -u root -p123 password '1234' #修改root用户密码

登录

1 mysql #本地登录,默认用户root,空密码,用户为root@127.0.0.1
2 mysql -uroot -p1234 #本地登录,指定用户名和密码,用户为root@127.0.0.1
3 mysql -uroot -p1234 -h 192.168.31.95 #远程登录,用户为root@192.168.31.95

忘记密码

#方法一:启动mysql时,跳过授权表
[root@controller ~]# service mysqld stop
[root@controller ~]# mysqld_safe --skip-grant-table &
[root@controller ~]# mysql
mysql> select user,host,password from mysql.user;
+----------+-----------------------+-------------------------------------------+
| user     | host                  | password                                  |
+----------+-----------------------+-------------------------------------------+
| root     | localhost             | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root     | localhost.localdomain |                                           |
| root     | 127.0.0.1             |                                           |
| root     | ::1                   |                                           |
|          | localhost             |                                           |
|          | localhost.localdomain |                                           |
| root     | %                     | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+----------+-----------------------+-------------------------------------------+
mysql> update mysql.user set password=password("123") where user="root" and host="localhost";
mysql> flush privileges;
mysql> exit
[root@controller ~]# service mysqld restart
[root@controller ~]# mysql -uroot -p456

 

#方法二:删除与权限相关的库mysql,所有的授权信息都丢失,主要用于测试数据库或者刚刚建库不久没有授权数据的情况(从删库到跑路)
[root@controller ~]# rm -rf /var/lib/mysql/mysql
[root@controller ~]# service mysqld restart
[root@controller ~]# mysql

六 sql语句

库操作

语法
create database 数据库名;
数据库命名规则:
首字符是字母,其余部分可以是字母、数字、下划线、@、$
不能是关键字,如create database create
最长128位
不能是纯数字
#号代表注释

创建数据库
mysql> create database school charset utf8;
Query OK, 1 row affected (0.00 sec)

查看
mysql> show create database school;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| school   | CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | #虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数(用户表信息,列信息,权限信息,字符信息),存放于内存中
| mysql              | #授权库,存放mysql所有的授权信息
| performance_schema | #存放mysql服务的性能参数
| school             |
| test               | #测试库
+--------------------+
5 rows in set (0.00 sec)

选择数据库
mysql> use school;
Database changed
mysql> select database(); #查看当前use了哪个库
+------------+
| database() |
+------------+
| school     |
+------------+
1 row in set (0.00 sec)

修改
mysql> alter database school charset gbk;
Query OK, 1 row affected (0.00 sec)

mysql> show create database school;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| school   | CREATE DATABASE `school` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+----------------------------------------------------------------+

删除
mysql> drop database school;
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

表操作

建表:一张表必须属于一个库
表分成:标题+记录,标题也称为字段
id   hostname           port    #三个字段
1    webserver01        8080    #下面的都是表中的记录
2    webserver02        8081
3    database01         3306
4    LB_01              80
5    webapp01           9000
6    dns01              53

语法:
create table 表名(
    字段名1 类型(宽度) 约束条件,
    字段名2 类型(宽度) 约束条件,
    字段名3 类型(宽度) 约束条件,
);
注意:
同一张表中,字段名不能相同
字段名和类型必须有
宽度和约束条件为可选项

 

#新建表
mysql> create database egon charset utf8;
Query OK, 1 row affected (0.00 sec)

mysql> use egon;
Database changed
mysql> create table host(
    -> id int(10),
    -> hostname char(20),
    -> port int(5)
    -> );
Query OK, 0 rows affected (0.02 sec)

 

#查看
mysql> show create table host; #查看刚刚新建的表详细信息
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                             |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| host  | CREATE TABLE `host` (
  `id` int(10) DEFAULT NULL,
  `hostname` char(20) DEFAULT NULL,
  `port` int(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> desc host; #查看表结构
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| id       | int(10)  | YES  |     | NULL    |       |
| hostname | char(20) | YES  |     | NULL    |       |
| port     | int(5)   | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> show tables; #查看当前库下有多少表
+----------------+
| Tables_in_egon |
+----------------+
| host           |
+----------------+
1 row in set (0.00 sec)

mysql> select id,port,hostname from host; #查看,按照id,port,hostname的顺序
Empty set (0.00 sec)

mysql> select * from host; #查看所有,按照表中字段的顺序
Empty set (0.00 sec)

mysql> select id from host; #只查看id
Empty set (0.00 sec)

 

 

#插入内容
#语法:
insert into 表名(字段1,字段2,字段3...) values(值1,值2,值3)

单条插入
mysql> insert into host(id,hostname,port) values(1,'webapp01',8080);
Query OK, 1 row affected (0.01 sec)

多条插入
mysql> insert into host(id,hostname,port) values
    -> (2,'webapp02',8081),
    -> (3,'webapp03',8082),
    -> (4,'LB_01',80);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

指定插入
mysql> insert into host(hostname) values ('LB_02');
Query OK, 1 row affected (0.00 sec)

查看刚刚插入的数据
mysql> select * from host;
+------+----------+------+
| id   | hostname | port |
+------+----------+------+
|    1 | webapp01 | 8080 |
|    2 | webapp02 | 8081 |
|    3 | webapp03 | 8082 |
|    4 | LB_01    |   80 |
| NULL | LB_02    | NULL |
+------+----------+------+
5 rows in set (0.00 sec)

 

posted @ 2017-01-19 06:51  linhaifeng  阅读(686)  评论(0)    收藏  举报