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)

浙公网安备 33010602011771号