一、数据库的安装

网上安装教程有很多,这里找了比较靠谱的安装教程,分别是在Windows下安装和配置
<http://blog.51cto.com/aiilive/2116476>和在Linux下安装与配置
<http://blog.51cto.com/aiilive/2119890>。
这篇文章主要介绍的是在 Windows 下使用 MySql 数据库。

二、MySql 数据库基础

1、什么是数据库?

存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:

文件的安全性问题
文件不利于查询和对数据的管理
文件不利于存放海量数据
文件在程序中控制不方便

为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,他能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。
数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存)

2、目前主流的数据库

SQL Sever:微软的产品,.Net程序员的最爱,中大型项目
Oracle:甲骨文产品,Java程序员,大型项目,适合处理复杂的业务逻辑,对并发一般来说不如MySQL。
MySQL:sun公司产品,现在也属于甲骨文,中型和大型项目。并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
DB2:IBM公司,处理海量数据,大型项目,功能很强悍。
informix:IBM公司,安全非常强。

3、mysql的基本使用

* 连接到mysql,在Windows的命令行窗口输入下面的命令再输入密码,就可以连接到数据库了 mysql -u root -p
C:\Users\LiuWang>mysql -u root -p Enter password: **** Welcometo the MySQL
monitor. Commandsend with ; or \g. Your MySQL connection id is 143 Server
version: 5.7.21-log MySQL Community Server (GPL) Copyright (c) 2000, 2018,
Oracleand/or its affiliates. All rights reserved. Oracle is a registered
trademarkof Oracle Corporation and/or its affiliates. Other names may be
trademarksof their respective owners. Type 'help;' or '\h' for help. Type '\c'
to clear the current input statement.
2.数据库服务器。数据库和表的关系

* 所谓安装数据库服务器,只是在机器上安装了一个数据库管理程序,这个管理程序可以管理多个数据
库,一般开发人员会针对每一个应用创建一个数据库。
* 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
建库基本语句:
create database 库名;
使用库:
use 库名;
3.数据在数据库中的存储方式


4.基本语句:
建表:
create table 表名( 字段1 列类型1, 字段2 列类型2, ... 字段n 列类型n );
向表中插入数据:
insert into 表名(字段名1, 字段2, ...) values(values1, value2);
查看表中数据:
select * from 表名;
5.SQL分类

* DDL 数据定义语言,用来维护存储数据的结构 代表指令:create, drop, alter
* DML 数据操纵语言,用来对数据进行操作(表中的内容) 代表指令:insert,delete,update
* DML中又单独分了一个DQL 数据查询语言如select
* DCL数据控制语言,主要负责权限管理和事务 代表指令:grant,revoke,commit
三、库的操作

1. 创建数据库

语法:CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] …]
create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE
collation_name
说明:

* 大写的表示关键字
* [] 是可选项
* CHARACTER SET: 指定数据库采用的字符集
* COLLATE:指定数据库字符集的比较方式(默认utf8_ general_ ci,一般不指定)
* 查看系统默认字符集以及校验规则的命令为:
show variables like ‘character_set_database’;
show variables like ‘collation_database’;
2. 字符集和校验规则

查看数据库支持的字符集:
show charset;
校验规则:

* 区分大小写:
创建一个数据库,校验规则使用 utf8_general_ci [不区分大小写] mysql> create database bbb collate
utf8_general_ci; Query OK, 1 row affected (0.00 sec) mysql> use bbb; Database
changed mysql> create table person(name varchar(20)); Query OK, 0 rows affected
(0.01 sec) mysql> insert into person values('a'); Query OK, 1 row affected
(0.00 sec) mysql> insert into person values('A'); Query OK, 1 row affected
(0.00 sec)mysql> select * from person where name='a'; +------+ | name | +------+
| a || A | +------+ 2 rows in set (0.01 sec)
创建一个数据库,校验规则使用 utf8_general_bin [区分大小写]
mysql> create database ccc collate utf8_bin; Query OK, 1 row affected (0.00
sec)mysql> use ccc; Database changed mysql> create table person(name
varchar(20)); Query OK, 0 rows affected (0.01 sec) mysql> insert into person
values('a'); Query OK, 1 row affected (0.00 sec) mysql> insert into person
values('A'); Query OK, 1 row affected (0.00 sec) mysql> select * from person
where name='a'; +------+ | name | +------+ | a | +------+ 1 row in set (0.00
sec)
2.影响排序
mysql> use ccc; mysql> select * from person order by name; +------+ | name |
+------+ | A | | B | | a | | b | +------+ mysql> use bbb; mysql> select * from
person order by name; +------+ | name | +------+ | a | | A | | b | | B |
+------+
3. 操纵数据库

1、查看数据库:show databases;
mysql> show databases; +--------------------+ | Database |
+--------------------+ | information_schema | | mysql | | test |
+--------------------+ 3 rows in set (0.00 sec)
2、显示数据库创建语句:show create database 数据库名;
mysql> show create database mytest;
+----------+-----------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------+
| mytest | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
说明: 1) MySQL 建议我们关键字使用大写,但是不是必须的。 2) 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字 3) /*!40100
default.... */ 这个不是注释,表示当前mysql 版本大于4.01版本,就执行这句话。
3、数据库删除:DROP DATABASE [IF EXISTS] db_name;

4、查看当前MySQL数据库的连接情况:show processlist;
mysql> show processlist;
+----+------+-----------+------+---------+------+-------+------------------+ |
Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+-------+------------------+ |
2 | root | localhost | test | Sleep | 1386 | | NULL || 3 | root | localhost |
NULL | Query | 0 | NULL | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数
据库被人入侵了。如果发现自己数据库比较慢时,可以用这个指令来看看数据库连接情况。

5、备份和恢复数据库
基本思路:

mysqldump -u root -p密码 数据库名> 数据库存放路径
示例:将memo库备份到桌面 mysqldump -u root -p memo > ./memo.sql 这时,可以打开看看 memo.sql
文件里的内容,其实把我们整个建库,建表,导入数据的语句都装载这个文件中。
C:\Users\LiuWang>mysqldump -u root -p memo > C:\Users\LiuWang\Desktop\memo.sql
Enter password: ****
恢复数据库,进入mysql控制台,我们先删除原来的库。
mysql> drop database memo; Query OK, 3 rows affected (0.12 sec) mysql> show
databases; +--------------------+ | Database | +--------------------+ |
information_schema | | bit_bao | | bit_student | | books_management | | mysql |
| performance_schema | | scott | | sys | +--------------------+ 8 rows in set
(0.00 sec)
要恢复数据库,必须先创建一个空的数据库。最好和以前的数据库名字一致。
mysql> create database memo; Query OK, 1 row affected (0.00 sec) mysql> use
memo; Database changed -- 将数据库恢复回来 mysql> source C:\Users\LiuWang\Desktop\memo
.sql
备份数据库注意事项:

* 如果备份的不是整个数据库,而是其中的一张表,怎么做?? mysqldump -u root -p密码 数据库名 表名1 表名2 > ./mytest.
bk
* 如何恢复指定的表?? mysql> source 备份的文件路径
* 在使用source 恢复数据时,保证use对应的数据库
* 同时备份多个数据库 mysqldump -u root -p密码-B 数据库名1 数据库名2
… > 数据库存放路径
* 同时恢复多个数据库mysql > source 备份的文件
* 如过我们备份一个数据库时,也带上-B参数,在恢复数据库时,不需要再创建空数据库。
4. 修改库

语法:
ALTER DATABASE [IF EXISTS] db_name [alter_spacification [,alter_spacification]...
] alter_spacification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE
collation_name
说明:对数据库的修改主要指的是修改数据库的字符集,校验规则。

示例:将mytest数据库字符集改成gbk
mysql> alter database mytest charset=gbk; Query OK, 1 row affected (0.00 sec)
mysql> show create database mytest;
+----------+----------------------------------------------------------------+ |
Database | Create Database |
+----------+----------------------------------------------------------------+ |
mytest | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+----------------------------------------------------------------+
5. 删除库
drop database 数据库名字;
当执行这句话后:
   1.数据库内部看不到对应的数据库
   2.对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
注意:不要随意删除数据库。

四、表的操作

1. 创建表

语法:
CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype )
character set 字符集collate 校验规则engine 存储引擎;
说明:

* field 表示列名
* datatype 表示列的类型
* character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准。
* collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。
创建一张表:
mysql> create table users ( -> `id` int, -> `name` varchar(20) comment '用户名',
->`password` varchar(32) comment '密码是32位的md5值', -> `birthday` date comment '生日'
->) character set utf8 engine MyISAM;

查看表结构:
desc 表名;
示例:


2. 修改表


在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column datatype
]...); ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column
datatype]...); ALTER TABLE tablename DROP (column);
1.在 users 表中添加一个字段,用于保存图片路径
mysql> alter table users add image varchar(100) comment '图片路径' after birthday;
mysql> desc users; +----------+--------------+------+-----+---------+-------+ |
Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+ | id | int(11) | YES
| | NULL | | | name | varchar(20) | YES | | NULL | | | password | varchar(32) |
YES | | NULL | | | birthday | date | YES | | NULL | || image | varchar(100) |
YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 5
rows in set (0.00 sec)
插入新字段后,对原来表中的数据没有影响:
mysql> select * from users; +------+------+----------+------------+-------+ |
id | name | password | birthday | image |
+------+------+----------+------------+-------+ | 1 | a | b | 1982-01-04 | NULL
|<= 原来的数据仍然存在| 2 | b | c | 1984-01-04 | NULL |
+------+------+----------+------------+-------+
2.修改name,将其长度改成60
mysql> alter table users modify name varchar(60); Query OK, 0 rows affected
(0.02 sec) Records: 0 Duplicates: 0 Warnings: 0mysql> desc users;
+----------+--------------+------+-----+---------+-------+ | Field | Type |
Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+ | id | int(11) | YES
| | NULL | | | name | varchar(60) | YES | | NULL | | | password | varchar(32) |
YES | | NULL | | | birthday | date | YES | | NULL | || image | varchar(100) |
YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 5
rows in set (0.00 sec)
3.删除password列(删除字段一定要小心,删除字段及其对应的列数据都没了)
mysql> alter table users drop password; mysql> desc users; mysql> desc users;
+----------+--------------+------+-----+---------+-------+ | Field | Type |
Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+ | id | int(11) | YES
| | NULL | | | name | varchar(60) | YES | | NULL | | | birthday | date | YES |
| NULL | || image | varchar(100) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+ 4 rows in set (0.00
sec)
4.修改表名为 employee
mysql> alter table users rename to employee; Query OK, 0 rows affected (0.00
sec)mysql> select * from employee; +------+------+------------+-------+ | id |
name | birthday | image | +------+------+------------+-------+ | 1 | a |
1982-01-04 | NULL || 2 | b | 1984-01-04 | NULL |
+------+------+------------+-------+
5.修改字符集为 gbk
mysql> alter table employee charset=gbk;
6.将 name 列修改为 xingming
mysql> alter table employee change name xingming varchar(60); --新字段需要完整定义
mysql> desc employee; +----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+ | id | int(11) | YES
| | NULL | | | xingming | varchar(60) | YES | | NULL | | | birthday | date |
YES | | NULL | || image | varchar(100) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+ 4 rows in set (0.00
sec)

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信