MySQL-01 快速上手

1 前言

MySQL是最流行的关系型数据库管理系统

我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

2 安装

2.1 linux下的安装

详情见这里。

2.2 windows下的安装

教程在这里

遇到了按钮不见的问题,用快捷键[alt+n]下一步,[alx+e]执行,[alt+f]完成

安装完成后启动MySQL

如果选择加密方式的时候选择了推荐的第一种新的加密方式,在用navicat连接数据库的时候会遇到下面的问题

Client does not support authentication protocol requested by server; consider upgrading MySQL client

解决方法:

alter user '用户名'@localhost IDENTIFIED WITH mysql_native_password by '你的密码';

3 命令行工具

打开MySQL命令行工具,输入密码后:

MySQL-01 快速上手_第1张图片

3.1 创建数据库

(1)显示数据库

show databases;显示在服务器上存在什么数据库

mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my                 |
| myfirstdatabase    |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| test               |
| world              |
+--------------------+
9 rows in set (0.00 sec)

(2)创建数据库

创建数据库 create database zhou;

mysql> create database zhou;
Query OK, 1 row affected (0.00 sec)

(3)进入数据库

mysql> use xiaohutu
Database changed

3.2 创建表

(1)显示表

show tables;显示在么数据库上存在那些表

mysql> show tables;
Empty set (0.00 sec)

(2)创建表

mysql> create table mytable (name varchar(20), sex char(1),birth date, birthaddr
 varchar(20));
Query OK, 0 rows affected (0.22 sec)

VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。因此,对于那些难以估计确切长度的数据对象来说,使用VARCHAR数据类型更加明智。

(3)显示表结构

mysql> describe mytable;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name      | varchar(20) | YES  |     | NULL    |       |
| sex       | char(1)     | YES  |     | NULL    |       |
| birth     | date        | YES  |     | NULL    |       |
| birthaddr | varchar(20) | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.06 sec)

3.3 向表中添加数据

(1)查看表中数据

mysql> select * from mytable; 
Empty set (0.00 sec)

mysql> select zhou from mytable where id=1
[ { name: 'zhou' } ]

(2)插入数据

mysql> insert into mytable value('xiaoming','f','1994-03-06','china');
Query OK, 1 row affected (0.13 sec)

(3)修改数据

mysql> update mytable set birth="1994-03-06" where birth="0194-03-06";
Query OK, 1 row affected (0.14 sec)
Rows matched: 1  Changed: 1  Warnings: 0

4 数据类型

4.1 数值类型

包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

4.2 日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

4.3 字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET

5 主键

主键(primary key)一列(或一组列),其值能够唯一区分表中的每个行。 唯一标识表中每行的这个列(或这组列)称为主键。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只设计相关的行。

虽然并不总是都需要主键,但大多数数据库设计人员都应保证他们创建的每个表有一个主键,以便于以后数据操纵和管理

5.1 主键的设计原则:

  • MySQL主键应当是对用户没有意义的。
  • MySQL主键应该是单列的,以便提高连接和筛选操作的效率
  • 永远也不要更新MySQL主键
  • MySQL主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等
  • MySQL主键应当有计算机自动生成。

5.2 主键设计的常用方案

(1)自增ID

优点:

  1. 数据库自动编号,速度快,而且是增量增长,聚集型主键按顺序存放,对于检索非常有利。
  2. 数字型,占用空间小,易排序,在程序中传递方便。

缺点

1. 不支持水平分片架构,水平分片的设计当中,这种方法显然不能保证全局唯一。
2. 表锁
3. 自增主键不连续

(2)UUID

优点

  1. 全局唯一性、安全性、可移植性。
  2. 能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
  3. 保证生成的ID不仅是表独立的,而且是库独立的,在你切分数据库的时候尤为重要

缺点

  1. 针对InnoDB引擎会徒增IO压力,InnoDB为聚集主键类型的引擎,数据会按照主键进行排序,由于UUID的无序性,InnoDB会产生巨大的IO压力。InnoDB主键索引和数据存储位置相关(簇类索引),uuid 主键可能会引起数据位置频繁变动,严重影响性能。
  2. UUID长度过长,一个UUID占用128个比特(16个字节)。主键索引KeyLength长度过大,而影响能够基于内存的索引记录数量,进而影响基于内存的索引命中率,而基于硬盘进行索引查询性能很差。严重影响数据库服务器整体的性能表现。
  3. 3.

参考

  • https://zhuanlan.zhihu.com/p/36087723
  • http://www.runoob.com/mysql/mysql-tutorial.html
  • https://blog.csdn.net/chenriyang0306/article/details/54587034
  • http://www.cnblogs.com/xiekeli/p/5398374.html

你可能感兴趣的:(数据库)