写在前言:本篇博客从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. AppCan

    启动服务 将app程序寄宿在计算机上,在计算机上调试:访问服务地址,将appToken值复制一下 在浏览器输入192.168.2.102:3000/appToken的值/文件路径后即可调试 入口文件 ...

  2. Android Ndef Message解析

    @concept:NDEF NFC Form论坛定义的NFC数据交换通用数据格式. 如上所示:一条NDEF消息由诸多Record记录组成,Record又由Header和Payload组成,Header ...

  3. GX/GZOI2019 day2 解题报告

    GX/GZOI2019 day2 解题报告 题目链接 逼死强迫症 旅行者 旧词 t1 逼死强迫症 显然地,记 \(f(i)\) 为长度为 \(i\) 的木板的答案,可得: \(\\\) \[f(i)= ...

  4. .Net业务搭配实用技术栈(转)

      前言 昨天有篇文章在讨论webform的设计思路,我已经四五年不用webform了,虽然它也提供了HttpModule和httphandle来处理请求,提供了一般处理程序ashx来简化处理流程,但 ...

  5. 在django admin中添加自定义视图

    来自https://blog.csdn.net/qq_35753140/article/details/84881757   django admin提供了完善的用户管理和数据模型管理,方便实用.研究 ...

  6. 收藏一个可以学习javascript prototype的链接

    https://github.com/mqyqingfeng/Blog/issues/2

  7. iOS unity 互相调用加载高德地图时

    需要增加 mapView.delegate = self 这是一种设计模式,有的人称为代理,有的人称为委托,比如有A,B两个控制器,由A可以push到B,B可以pop回A,现在有一种情况,A中有一个l ...

  8. VisualVM远程监控Java

    1.服务器启动jstatd服务设置: jstatd将使用RMISecurityPolicy,并且需要指定安全策略文件. 安全策略文件必须符合安全策略语法,通过命令 jstatd -J-Djava.se ...

  9. 记录下在阿里云linux上安装与配置Mysql

    环境:阿里云ECS服务器,系统为centos7.2 用户:root 参考博客:https://blog.csdn.net/kunzai6/article/details/81938613 师兄的哈哈哈 ...

  10. vmware 虚拟机报错 删除文件夹,可以恢复