写在前言:本篇博客从mysql的安装开始说起,至于什么是数据库以及数据的由来什么的,不在详谈!!!

第一:mysql安装

linux安装:两种方式

1.apt安装 

apt install mysql-server

2.源码安装

.解压tar包
cd /software
tar -xzvf mysql-5.6.-linux-glibc2.-x86_64.tar.gz
mv mysql-5.6.-linux-glibc2.-x86_64 mysql-5.6. .添加用户与组
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql mysql-5.6. .安装数据库
su mysql
cd mysql-5.6./scripts
./mysql_install_db --user=mysql --basedir=/software/mysql-5.6. --datadir=/software/mysql-5.6./data .配置文件
cd /software/mysql-5.6./support-files
cp my-default.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysql
vim /etc/init.d/mysql #若mysql的安装目录是/usr/local/mysql,则可省略此步
修改文件中的两个变更值
basedir=/software/mysql-5.6.
datadir=/software/mysql-5.6./data .配置环境变量
vim /etc/profile
export MYSQL_HOME="/software/mysql-5.6.21"
export PATH="$PATH:$MYSQL_HOME/bin"
source /etc/profile .添加自启动服务
chkconfig --add mysql
chkconfig mysql on .启动mysql
service mysql start .登录mysql及改密码与配置远程访问
mysqladmin -u root password 'your_password' #修改root用户密码
mysql -u root -p #登录mysql,需要输入密码
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; #允许root用户远程访问
mysql>FLUSH PRIVILEGES; #刷新权限 源码安装mysql

window 安装:

#、下载:MySQL Community Server 5.7.
http://dev.mysql.com/downloads/mysql/ #、解压
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\mysql-5.7.-winx64 #、添加环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,用 ; 分割】 #、初始化
mysqld --initialize-insecure #、启动MySQL服务
mysqld # 启动MySQL服务 #、启动MySQL客户端并连接MySQL服务
mysql -u root -p # 连接MySQL服务器

2.把mysql搞成一个服务:

# 制作MySQL的Windows服务,在终端执行此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --install # 移除MySQL的Windows服务,在终端执行此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --remove 注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令或者在windows服务管理点击开启或者关闭:
# 启动MySQL服务
net start mysql # 关闭MySQL服务
net stop mysql

第二:数据库中sql相关操作:

1.数据库操作

 1.1 查看数据库

show databases;

默认数据库:

information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象 
mysql: 授权库,主要存储系统用户的权限信息
test: MySQL数据库系统自动创建的测试数据库

1.2 使用数据库

use dbname;

 1.3 创建数据库

数据库命名规则:
,可以由字母、数字、下划线、@、#、$
.区分大小写
.唯一性
.不能使用关键字如 create select
.不能单独使用数字
.最长128位 创建数据库
CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 查看数据库
show databases;
show create database db1;
select database(); 删除数据库
DROP DATABASE db1; 修改数据库
alter database db1 charset utf8;

 1.4 用户管理

    用户管理特殊命令
创建用户
    create user '用户名'@'IP地址' identified by '密码';
create user zzl@localhost identified by '';
删除用户
    drop user '用户名'@'IP地址';
drop user 'zzl'@localhost;
修改用户
    rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';
rename user 'zl'@localhost to zzll@127.0.0.1;
修改密码
    set password for '用户名'@'IP地址' = Password('新密码')
   set password for root@localhost = Password('');
PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

 1.5 授权管理

    show grants for '用户'@'IP地址'                  -- 查看权限
show grants for 'zzll'@'localhost' 
grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权
grant select on test.tb1 to zzll@localhost;
revoke 权限 on 数据库.表 from '用户'@'IP地址'      -- 取消权限
revoke select on test.tb1 to zzll@localhost;
all privileges  除grant外的所有权限
select 仅查权限
select,insert 查和插入权限
...
usage 无访问权限
alter 使用alter table
alter routine 使用alter procedure和drop procedure
create 使用create table
create routine 使用create procedure
create temporary tables 使用create temporary tables
create user 使用create user、drop user、rename user和revoke all privileges
create view 使用create view
delete 使用delete
drop 使用drop table
execute 使用call和存储过程
file 使用select into outfile 和 load data infile
grant option 使用grant 和 revoke
index 使用index
insert 使用insert
lock tables 使用lock table
process 使用show full processlist
select 使用select
show databases 使用show databases
show view 使用show view
update 使用update
reload 使用flush
shutdown 使用mysqladmin shutdown(关闭MySQL)
super 使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆
replication client 服务器位置的访问
replication slave 由复制从属使用

所有权限

  对于目标数据库以及内部其他:
数据库名.* 数据库中的所有
数据库名.表 指定数据库中的某张表
数据库名.存储过程 指定数据库中的存储过程
*.* 所有数据库

对于数据库权权限

     用户名@IP地址         用户只能在改IP下才能访问
用户名@192.168..% 用户只能在改IP段下才能访问(通配符%表示任意)
用户名@% 用户可以再任意IP下访问(默认IP地址为%)

对于数据库与ip的权限

2.数据表相关操作

1.存储引擎

查看支持的存储引擎:
show engines;

介绍各个存储引擎:

.数据存储在内存中,数据库重启或者挂掉,数据将会丢失,
.使用的是hash索引

memory存储引擎

暂略

2.表介绍

表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段

3.表相关操作:

#创建数据库
mysql> create database db_name charset utf8;
Query OK, row affected (0.01 sec) #切换到db_name数据库中
mysql> use db_name
Database changed #创建表
mysql> create table t1(
-> nid int not null,
-> name varchar(),
-> sex enum('male','female'),
-> age int()
-> );
Query OK, rows affected (0.06 sec) #查看表
mysql> show tables;
+-------------------+
| Tables_in_db_name |
+-------------------+
| t1 |
+-------------------+
row in set (0.01 sec) #查看表结构
mysql> desc t1;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| nid | int() | NO | | NULL | |
| name | varchar() | YES | | NULL | |
| sex | enum('male','female') | YES | | NULL | |
| age | int() | YES | | NULL | |
+-------+-----------------------+------+-----+---------+-------+
rows in set (0.01 sec) #查看表的数据
mysql> select * from t1;
Empty set (0.00 sec) #插入数据到表中
mysql> insert into t1 values(,'zzl','male',);
Query OK, row affected (0.01 sec) #查看数据
mysql> select * from t1;
+-----+------+------+------+
| nid | name | sex | age |
+-----+------+------+------+
| | zzl | male | |
+-----+------+------+------+
row in set (0.00 sec)

4.基本数据类型

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

4.1:数值类型:

  1.整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT

  一般存储的是:年龄,等级,各种号码等等

######################################
tinyint[(m)] [unsigned] [zerofill] 小整数,数据类型用于保存一些范围的整数数值范围:
有符号:
- ~
无符号:
~ PS: MySQL中无布尔值,使用tinyint()构造。 ##########################################
int[(m)][unsigned][zerofill] 整数,数据类型用于保存一些范围的整数数值范围:
有符号:
- ~
无符号:
~ #############################################
bigint[(m)][unsigned][zerofill]
大整数,数据类型用于保存一些范围的整数数值范围:
有符号:
- ~
无符号:

验证:

tinyint默认有符号

#-129 插入不进去
#有符号,最小值为-128
#有符号,最大值127
#128插入不进去

#设置无符号tinyint

# -1插入不进去

#无符号,最小值为0

#无符号,最大值为255

#256插入不进去

int有符号

#默认为有符号整数

#-2147483649存不进去
#有符号,最小值为-2147483648
#有符号,最大值为2147483647
#2147483648存不进去

int无符号

| -1 |#-1存不进去,超出范围

| 0 | #无符号,最小值为0
| 4294967295 | #无符号,最大值为4294967295
| 4294967295 | #存不进去,超出范围

bigint有符号

bigint无符号

用zerofill测试整数类型的显示宽度

超过宽度限制后,仍然可以存

注意:为该类型指定宽度时,仅仅只是指定查询结果的显示宽度,与存储范围无关,存储范围如下

其实我们完全没必要为整数类型指定显示宽度,使用默认的就可以了

int的存储宽度是4个Bytes,即32个bit,即2**32

无符号最大值为:4294967296-1

有符号最大值:2147483648-1

有符号和无符号的最大数字需要的显示宽度均为10,而针对有符号的最小值则需要11位才能显示完全,所以int类型默认的显示宽度为11是非常合理的

最后:整形类型,其实没有必要指定显示宽度,用默认的就行了

 2.浮点数类型

*******************************************************
#FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 定义:
单精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30 有符号:
-3.402823466E+38 to -1.175494351E-38,
1.175494351E-38 to 3.402823466E+38
无符号:
1.175494351E-38 to 3.402823466E+38 精确度:
**** 随着小数的增多,精度变得不准确 **** ***************************************************
#DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 定义:
双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。m最大值为255,d最大值为30 有符号:
-1.7976931348623157E+308 to -2.2250738585072014E-308
2.2250738585072014E-308 to 1.7976931348623157E+308 无符号:
2.2250738585072014E-308 to 1.7976931348623157E+308 精确度:
****随着小数的增多,精度比float要高,但也会变得不准确 **** ***************************************************
decimal[(m[,d])] [unsigned] [zerofill] 定义:
准确的小数值,m是数字总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。 精确度:
**** 随着小数的增多,精度始终准确 ****
对于精确数值计算时需要用此类型
decaimal能够存储精确值的原因在于其内部按照字符串存储。

浮点数类型介绍

示例:

mysql> create table t1(x float(,));
ERROR (): Too big scale specified for column 'x'. Maximum is .
mysql> create table t1(x float(,));
ERROR (): Display width out of range for column 'x' (max = )
mysql> create table t1(x float(,)); #建表成功
Query OK, rows affected (0.02 sec) mysql> create table t2(x double(,)); #建表成功
Query OK, rows affected (0.02 sec) mysql> create table t3(x decimal(,));
ERROR (): Too big scale specified for column 'x'. Maximum is .
mysql> create table t3(x decimal(,));
ERROR (): Too-big precision specified for 'x'. Maximum is .
mysql> create table t3(x decimal(,)); #建表成功
Query OK, rows affected (0.02 sec) mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| t1 |
| t2 |
| t3 |
+---------------+
rows in set (0.00 sec) mysql> insert into t1 values(1.1111111111111111111111111111111); #小数点后31个1
Query OK, row affected (0.01 sec) mysql> insert into t2 values(1.1111111111111111111111111111111);
Query OK, row affected (0.00 sec) mysql> insert into t3 values(1.1111111111111111111111111111111);
Query OK, row affected, warning (0.01 sec) mysql> select * from t1; #随着小数的增多,精度开始不准确
+----------------------------------+
| x |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
row in set (0.00 sec) mysql> select * from t2; #精度比float要准确点,但随着小数的增多,同样变得不准确
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
row in set (0.00 sec) mysql> select * from t3; #精度始终准确,d为30,于是只留了30位小数
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
row in set (0.00 sec)

  3.位类型(作为了解)

BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。
注意:对于位字段需要使用函数读取
    bin()显示为二进制
    hex()显示为十六进制

4.2:日期/时间类型:

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

        YEAR
YYYY(/) DATE
YYYY-MM-DD(--/--) TIME
HH:MM:SS('-838:59:59'/'838:59:59') DATETIME YYYY-MM-DD HH:MM:SS(-- ::/-- :: Y) TIMESTAMP YYYYMMDD HHMMSS(-- ::/ 年某时)

验证:

year:

time,date,datetime

timestamp:

通过上面的两个示例,对比下datetime与timestamp的区别:

.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。

.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。

.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。

.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。

区别

4.3:字符串类型:  

#char类型:定长,简单粗暴,浪费空间,存取速度快
字符长度范围:-(一个中文是一个字符,是utf8编码的3个字节)
存储:
存储char类型的值时,会往右填充空格来满足长度
例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储 检索:
在检索或者说查询时,查出的结果会自动删除尾部的空格,除非我们打开pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';) #varchar类型:变长,精准,节省空间,存取速度慢
用来保存变长字符类型,对于 VARCHAR 类型,N 的范围为 ~

4.4 枚举类型和集合类型

字段的值只能在给定范围中选择,如单选框,多选框
enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female
set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

示例:

 

5.表的完整性约束

http://www.cnblogs.com/ylqh/p/8479435.html

3.数据内容相关操作

 http://www.cnblogs.com/ylqh/p/8484203.html

MySQL之爱之初体验的更多相关文章

  1. 2.MySQL入门基本操作初体验

    启动和关闭mysql服务器: 一.启动方式 1.使用 mysqld 脚本启动:/etc/inint.d/mysqld start 2.使用 守护进程safe_mysqld 启动:safe_mysqld ...

  2. 爱之初体验---编译加载内核模块hello

    1. hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h ...

  3. javaCV:爱之初体验

    最近实验室有了新任务,要求使用java进行模式识别,在具体点就是人脸识别.精确的边缘检测. 第一个问题便是环境配置,搭建工作台.(其实也不是什么难事,但是本人虽然从事较多的java开发,但很少接触模式 ...

  4. Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

    Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...

  5. Mysql Workbench初体验

    可以画图,建立表关系. 分类整理数据表. 可以直接导出sql语句. 可以导出png图片. 可以连接mysql数据库. 基本满足了各项需求. 这次初体验只是基本的功能,这个软件对于mysql还是很牛的.

  6. JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

    JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...

  7. 你不知道的MySQL,以及MariaDB初体验

    MySQL 是一个跨世纪的伟大产品,它最早诞生于 1979 年,距今已经有 40 多年的历史了,而如今比较主流的 Java 语言也只是 1991 年才诞生的,也就是说 MySQL 要比 Java 的诞 ...

  8. Question2Answer初体验

    Question2Answer初体验   高质量的问答社区十分有价值,很多无法解决的问题能通过问答社区找到解决办法,而对于站长来说,垂直的问答社区也很有潜力.最近盯上问答这一块,发现和我的一些思路很符 ...

  9. YII学习,初体验 ,对YII的一些理解.

    先说点没用的: 不会选择,选择后不坚持,不断的选择.这是人生中的一个死循环,前两一直迷茫.觉得自己前进方向很不明朗.想去学的东西有很多.想学好YII,想学PYTHON 想学学hadoop什么的,又想研 ...

随机推荐

  1. jetty切换tomcat中文乱码

    项目中文在jetty下正常,换tomcat下出现乱码. 问题是web.xml中的encodingFilter不是第一个,要设置为第一个 <filter> <filter-name&g ...

  2. Moment.js简单使用

    1.设置语言环境,如设置中文环境: moment.locale("zh-cn"); 2.当前时间.指定时间: // 假设当前时间为:2018年12月10日 moment(); // ...

  3. 【转】Oracle之索引

    简介 1.说明 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的目录.在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用目录可以不用翻阅整本书即可找到想要的信 ...

  4. cocos2dx 开启控制台

    打开 SimulatorWin.cpp 把这句启用: #define SIMULATOR_WITH_CONSOLE_AND_MENU 1 这句本来因为#define隐藏了

  5. PostMan如何做Post请求测试

    首先要下载 一个Postman的软件,我这里没有下载地址,据说要翻 墙 下面是使用postman模拟post请求的步骤 我这里请求的API地址和请求的参数都是乱填写的,使用的时候请自行替换你们需要的A ...

  6. Microsoft Graph API -----起题 Graph API

    最近因为工作需要,接触学习使用了Microsoft Graph API.在看完Microsoft的Graph官方文档之后,也做了一些简单的案例,在Stack Overflow上做过一些回答.整体来说, ...

  7. ubuntu,装完PYTHON3 pip3 install 报错

    ubuntu,装完PYTHON3 pip3  install 报错CalledProcessError: Command 'lsb_release -a' returned non-zero exit ...

  8. SpringBoot的自动配置

    1.根据条件来装配bean,SpringBoot的自动配置,根据条件进行自动配置. 首先创建一个接口,如下所示: package com.bie.encoding; /** * * @Descript ...

  9. mysql 数据库扫描行数

    EXPLAIN SELECT * FROM tablename1 WHERE a1 '

  10. docker异常问题解决

    解决方法: 发现这个问题出现的时候,并不是所有的docker都会出现,只影响某个docker 停下:docker stop app-6019-bonus 再起来:docker start app-60 ...