MySQL

MySQL介绍

是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一!是基于socket编写的一款C/S架构的软件

1、常见的数据库

关系型数据库(需要有表结构)

  • MySQL 是一款免费、开源、支持大中型企业的数据库,运用广泛,后来被Sun公司收购,最后由Oracle公司将Sun公司合并,mysql的创始人又开发了一款MariaDB,完全兼容mysql,使用起来跟mysql一模一样!!
  • Oracle 是一款闭源且收费的分布式数据库,其功能极其强大!
  • SQLsever 是微软旗下的,仅支持Windows系统,局限性强
  • DB2 是IBM开发的数据库软件,闭源、收费,与IBM的机器绑定销售

非关系型(key-value形式储存,没有表结构)

  • MongoDB
  • Redis
  • HBASE
  • memcache 

2、Linux系统下的MySQL安装方法

1.解压tar包
cd /software
tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21

2.添加用户与组
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql mysql-5.6.21

3.安装数据库
su mysql
cd mysql-5.6.21/scripts
./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data

4.配置文件
cd /software/mysql-5.6.21/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.21
datadir=/software/mysql-5.6.21/data

5.配置环境变量
vim /etc/profile
export MYSQL_HOME="/software/mysql-5.6.21"
export PATH="$PATH:$MYSQL_HOME/bin"
source /etc/profile

6.添加自启动服务
chkconfig --add mysql
chkconfig mysql on

7.启动mysql
service mysql start

8.登录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;     #刷新权限
Linux系统中安装MySQL
1. 解压
tar zxvf  mariadb-5.5.31-linux-x86_64.tar.gz   
mv mariadb-5.5.31-linux-x86_64 /usr/local/mysql //必需这样,很多脚本或可执行程序都会直接访问这个目录

2. 权限
groupadd mysql             //增加 mysql 属组 
useradd -g mysql mysql     //增加 mysql 用户 并归于mysql 属组 
chown mysql:mysql -Rf  /usr/local/mysql    // 设置 mysql 目录的用户及用户组归属。 
chmod +x -Rf /usr/local/mysql    //赐予可执行权限 

3. 拷贝配置文件
cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf     //复制默认mysql配置 文件到/etc目录 

4. 初始化
/usr/local/mysql/scripts/mysql_install_db --user=mysql          //初始化数据库 
cp  /usr/local/mysql/support-files/mysql.server    /etc/init.d/mysql    //复制mysql服务程序 到系统目录 
chkconfig  mysql on     //添加mysql 至系统服务并设置为开机启动 
service  mysql  start  //启动mysql

5. 环境变量配置
vim /etc/profile   //编辑profile,将mysql的可执行路径加入系统PATH
export PATH=/usr/local/mysql/bin:$PATH 
source /etc/profile  //使PATH生效。

6. 账号密码
mysqladmin -u root password 'yourpassword' //设定root账号及密码
mysql -u root -p  //使用root用户登录mysql
use mysql  //切换至mysql数据库。
select user,host,password from user; //查看系统权限
drop user ''@'localhost'; //删除不安全的账户
drop user root@'::1';
drop user root@127.0.0.1;
select user,host,password from user; //再次查看系统权限,确保不安全的账户均被删除。
flush privileges;  //刷新权限

7. 一些必要的初始配置
1)修改字符集为UTF8
vi /etc/my.cnf
在[client]下面添加 default-character-set = utf8
在[mysqld]下面添加 character_set_server = utf8
2)增加错误日志
vi /etc/my.cnf
在[mysqld]下面添加:
log-error = /usr/local/mysql/log/error.log
general-log-file = /usr/local/mysql/log/mysql.log
3) 设置为不区分大小写,linux下默认会区分大小写。
vi /etc/my.cnf
在[mysqld]下面添加:
lower_case_table_name=1

修改完重启:#service  mysql  restart
Linux系统中安装MariaDB

3、windows绿色版安装及密码修改(版本为5.6.42)

# 1、下载MySQL:
http://dev.mysql.com/downloads/mysql/

# 2、解压
# 将下载的压缩包解压到想要安装的目标盘下的文件夹

# 3、添加环境变量,将解压缩后的bin文件添加至系统环境变量,如:C:Program Files (x86)mysql-5.6.42-winx64in

# 4、注册为系统服务,注:需要以管理员身份运行cmd
mysqld --install

# 5、启动mysqld服务
net start MySQL

# 6、启动mysql客户端连接至mysql服务
mysql -uroot -p

# 7、关闭mysql服务
net stop MySQL 或 taskill /f /pid PID号 或 tskill mysqld

# 8、重启mysql客户端
mysql -uroot -p     # 初始密码为空,直接回车进入

# 9、修改密码(须退出mysql操作)
mysqladmin -uroot password "自己的密码"   # 原密码为空时可以不用-p
mysqladmin -uroot -p"旧密码" password "新密码"

4、忘记密码解决办法

Windows平台中的密码破解方式(mysql5.7版本),5.6版本为密码的字段为password

#1 关闭mysql服务

#2 在cmd中执行(跳过授权表登录操作):mysqld --skip-grant-tables

#3 在新的cmd中执行:mysql

#4 执行如下sql命令:
update mysql.user set authentication_string=password('新密码') where user = 'root';

# 刷新权限
flush privileges;

#5 tskill mysqld #或taskkill /f /pid pid号

#6 重新启动mysql
方式一
#1. 关闭mysql,可以用tskill mysqld将其杀死

#2. 在解压目录下,新建mysql配置文件my.ini
#3. my.ini内容,指定
[mysqld]
skip-grant-tables

#4.启动mysqld
#5.在cmd里直接输入mysql登录,然后操作
update mysql.user set authentication_string=password('新密码') where user='root and host='localhost';

# 刷新权限
flush privileges;

#6.注释my.ini中的skip-grant-tables,然后启动myqsld,然后就可以以新密码登录了
方式二

Linux平台中的密码破解方式(mysql5.7版本)

1. 停止mysql
    /etc/init.d/mysqld stop
2. 启动数据库为无密码验证模式
    mysqld_safe --skip-grant-tables --skip-networking  &
3. 更新密码
    update mysql.user set authentication_string=PASSWORD('456') where user='root' and host='localhost';
4. 重启
    /etc/init.d/mysqld restart
5. 登录
    mysql -uroot -p456
View Code

5、统一字符编码

#1. 修改配置文件my.ini
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

#mysql5.5以上:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

#2. 重启mysql服务

#3. 查看修改结果:
mysql>s
mysql>show variables like '%char%'
View Code

6、为mysql服务指定配置文件(my.ini

#在mysql的解压目录下,找到my.ini,然后配置
#1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效
[mysqld]
port=3306
character-set-server=utf8
default-storage-engine=innodb
innodb_file_per_table=1


-----------------针对5.7版本--------------------------
#解压的目录
basedir=D:mysql-5.7.23-winx64
#data目录
datadir=D:mysql-5.7.23-winx64data #在mysqld --initialize时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据
-----------------------------------------------------


#2. 针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效
[client]
port=3306
default-character-set=utf8
# 可以将用户名密码配置在ini文件
user=root
password=123

#3. 只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置
[mysql]
port=3306
default-character-set=utf8

#!!!如果没有[mysql],则用户在执行mysql命令时的配置以[client]为准

7、mysql再次启动时显示失败的解决方案

问题1:在使用net start msql启动时提示“服务没有报告任何错误”,启动失败!!
解决方案:先在配置文件my.ini中将data的路径和文件的根目录添加进去,如(datadir=D:mysql-5.7.23-winx64data;basedir=D:mysql-5.7.23-winx64),注意不是让你自己新建data文件夹!!而是当你在mysql的bin目录下执行mysqld --initialize-insecure的命令时自动添加的,第一次执行这个命令可能会等待的时间较长,并且控制台没有任何返回结果。只是需要稍等即可,完了你就可以看到mysql的根目录下会自己多出一个data文件夹

问题2:没有先执行mysqld  --initialize-insecure,而是先执行net start mysql了,启动失败
解决方案:此时的解决方案是:删除data文件夹,然后执行mysqld - initializemysqld  --initialize-insecure,再net start mysql

问题4:mysql安装完了,可高兴的输入“mysql或者mysql -uroot -p”一回车,居然没有进去,出现“ERROR 1045 Access denied for user 'xxx' NO”的错误
解决方案:mysql默认安装会有密码生成,密码文件直接写在 log-error日志文件中(在5.6版本中是放在 root/.mysql_secret 文件里,更加隐蔽,不熟悉的话可能会无所适从),MySQL5.7在安装完后,第一次启动时,会在root目录下生产一个随机的密码,文件名为.mysql_secret

进去之后重置密码:SET PASSWORD = PASSWORD('new password');
View Code

SQL语句

# 1. 操作文件夹
增:
    create database db1 charset utf8;
查:
    show databases;
    show create database db1;
改:
    alter database db1 charset utf8;
删:
    drop database db1;


# 2. 操作文件
先切换到文件夹下:use db1
增:
    create table t1(id int,name char,...);
查:
    show tables;
    show create table db1;
    desc db1;
改:
    alter table t1 modify name char(1);
    alter table t1 change old_name new_name char(2);
    alter table t1 add name int;
    改字符编码:
        alter table t1 default character set gbk
    改文件名:
        rename table t1 to t2
删:
    drop table t1;


# 3. 操作文件中的内容/记录
增:
    insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
查:
    select * from t1;
    select id name from t1;
改:
    update t1 set name = 'sb' where id = 2;
删:
    delete from t1 where id = 1;


清空表:
delete from t1;  # 如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
truncate table t1; 数据量大,删除速度比上一条快,重建表,清空所有数据

auto_increment 表示:自增
primary key 表示:约束(不能重复且不能为空);加速查找

表相关之存储引擎

1、什么是存储引擎

mysql中建立的库就是一个文件夹

库中建立的表就是一个文件

现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等

数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。

2、如何查看存储引擎

   #查看所有支持的存储引擎

show enginesG

 #查看正在使用的存储引擎

show variables like 'storage_engine%';  

3、使用存储引擎

  方法一:建表时指定

create table innodb_t1(id int,name char)engine=innodb;

create table innodb_t2(id int)engine=innodb;

show create table innodb_t1;

show create table innodb_t2;

方法二:从配置文件中指定

[mysqld]

default-storage-engine=INNODB

innodb_file_per_table=1

表相关之表的创建

1、介绍表

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

id,name,age称为字段,其余每一行内容称之为一条记录

2、创建表

语法

create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);

注意

 在同一张表中,字段名是不能相同
 宽度和约束条件可选
 字段名和类型是必须的

数据类型之整型

1、所占的字节数

tinyint    1
smallint    2
mediumint  3
int      4
bigint     8

2、非严格模式下

默认情况下整型是有符号的,需要用一个二进制位存储符号

给整型加上约束unsigned来表示无符号

如果数据超出范围就保存最大的值,例如:在无符号下保存256 其实存的255

如果有符号 例如 tinyint 保存-129 其实存的是-128

查看当前模式命令 show variables like "sql_mode";

修改为严格模式命令 set global sql_mode = "STRICT_TRANS_TABLES";

3、严格模式下

如果值超出范围就直接报错,在一些版本中默认就是严格模式

在我们的正常开发中,我们应该先判断数据的正确性,没有问题在发给数据库

4、长度限制对于整型的意义

create table t1(id int(1));
insert into t1 value(454555);
select *from t1;

发现这个数也存储成功
说明这里长度指的不是存储容量限制而是显示的宽度
如果你的数据超过了显示宽度,有几个长度就显示几个,其余的都不会显示出来
如果不足,则补全到指定长度:create table t2(id int(10) zerofill);

5、怎么选择整数型

可根据实际情况来判断,能够保存你的数据的最小类型即可

数据类型之字符型

1、分类

char    定长字符
varchar  变长字符

char 类型的长度是固定 无论你存储的数据有多长 占用的容量都一样

char(3) 存储的数据为"a  " 在硬盘保存的数据还是占3字符长度 实际保存的是"a  "

varchar 长度是可变的 存储的数据有多长就占用多长

varchar(3) 存储的数据为"a  " 在硬盘保存的数据还是占1字符长度 实际保存的是"a"

yxx exx lxx zxx cx wxx char(3)
(1bytes+yx)(1bytes+exx)(1bytes+lx)(1bytes+zxx) varchar(3)

如果是可变长度 则有问题 不知道数据从哪里开始到哪里结束 所以需要有一个位置保存数据的长度

vharchar 能支持的最大长度是65535 用于保存数据长度的数据最长2bytes

如果是char类型,如果你的数据不足指定长度,就在后面用空格补全

2、验证

char_length 函数 可以查看字符的长度

create table t18(a char(4),b varchar(4));
insert into t18 value("x","x");
select char_length(a),char_length(b) from t18;
两个字段的长度都为1

3、结论

这是因为 mysql在存储时 自动加上的空格 对使用者而言是没有意义的 所以mysql自动帮你处理掉空格了
我们可以设置sql模式 来让它现出原形
set global sql_mode = "PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"
设置完成后重启msyql 再次查询长度

4、注意

当你在执行这样的查询语句时 mysql会自动将参数末尾的空格去除
select *from t19 where name = "yh"
当你在使用模糊搜索时 要注意 定长字符 后面可能会有空格 所以最好在后面加上百分号 %
select *from t19 where name like "%yh%";

%   任意个数的任意字符
_     1个任意字符

5、如何选择

char

存取效率高
浪费存储空间

varchar

存取效率低于char
节省存储空间

char和varchar 长度都比较小 最大就是65535

6、大文本类型

TEXT系列  TINYTEXT TEXT MEDIUMTEXT LONGTEXT    文本是带有编码
BLOB 系列   TINYBLOB BLOB MEDIUMBLOB LONGBLOB   也是字符数据 但是不带编码

二进制类型: 用于存储多媒体数据 比如视频 但是我们一般不会将多媒体数据存到数据 而是存储文件路径地址
BINARY系列   BINARY VARBINARY    存储二进制数据

数据类型之浮点型

1、所占字节数

float      4
double    8
decimal   不确定(手动指定)

2、给浮点设置宽度限制

float(m,d)
double(m,d)
decimal(m,d)

3、长度说明

m 表示这个浮点数整体的长度
d 表示小数部分的长度
例如: float(5,3) 最大值: 99.999

4、区别

相同点:

小数部分最大长度都是 30
float 和 double 的最大长度为 255

不同点:

decimal 的整体最大长度 65
精度不同
double 比 float 精度高
decimal 是准确的 不会丢失精度,对精确度要求高就使用 decimal

数据类型之日期型

1、分类

time       时分秒      HH:MM:SS
year       年份
date         日期        年 月  日
datetime    日期 + 时间    年 月  日  时  分  秒     年份最大是9999
timestamp 时间戳       从1970-1-1开始算       年份最大是2037

2、共同点

时间的存取通过字符串类型

都可以使用 now() 函数来插入当前时间

datetime 和 时间戳都能够表示日期和时间

3、不同点

年份最大范围不同
时间戳可以为空,即代表当前时间
时间戳在你更新记录时会自动更新为当前时间

 

完整性约束

原文地址:https://www.cnblogs.com/rongge95500/p/9629538.html