零基础学习MySql数据库—0

一、数据库的安装

网上安装教程有很多,这里找了比较靠谱的安装教程,分别是在Windows下安装和配置在Linux下安装与配置
这篇文章主要介绍的是在 Windows 下使用 MySql 数据库。

二、MySql 数据库基础

1、什么是数据库?

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

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

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

2、目前主流的数据库

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

3、mysql的基本使用
  1. 连接到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 数据操纵语言,用来对数据进行操作(表中的内容)
代表指令:insertdeleteupdate
  • DML中又单独分了一个DQL
数据查询语言如select
  • DCL数据控制语言,主要负责权限管理和事务
代表指令:grantrevokecommit

三、库的操作

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;

校验规则:

  1. 区分大小写:
    创建一个数据库,校验规则使用 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)

猜你喜欢

转载自blog.csdn.net/yubujian_l/article/details/81118200
今日推荐