一、数据库的安装
网上安装教程有很多,这里找了比较靠谱的安装教程,分别是在Windows下安装和配置和在Linux下安装与配置。
这篇文章主要介绍的是在 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: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 143
Server version: 5.7.21-log MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of 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: 0
mysql> 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)