Tagged: MySql

Centos Install Mysql (解压缩版)

下载并解压Mysql

下载地址http://dev.mysql.com/downloads/mysql/ (选择Linux - Generic版本的Linux - Generic (glibc 2.5) (x86, 64-bit), Compressed)

# 检查库文件是否存在,如有删除。
rpm -qa | grep mysql
rpm -e mysql-libs-5.1.52.x86_64 --nodeps

# 下载mysql
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

# 解压
tar zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.18-linux-glibc2.5-x86_64 /usr/local/mysql

添加用户及用户组

# 检查mysql用户及用户组是否存在
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql

# 创建mysql用户及用户组
groupadd mysql
useradd -r -g mysql mysql

授权

# 授权
cd /usr/local
chown -R mysql:mysql mysql/

安装

cd mysql

# 初始化(这里要记录下密码,后续会用到)
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

# 创建执行程序软连接
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

#启动mysql
./support-files/mysql.server start

# 拷贝文件到开机启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --list mysqld # 如果不存在则执行下面命令,存在则不执行下面命令
chkconfig --add mysqld

配置my.cnf

vi /etc/my.cnf

[mysqld]
datadir=/usr/local/mysql/data
user=mysql
character-set-server=utf8
collation-server=utf8_general_ci
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

初始化密码

mysql -u root -h 127.0.0.1 -p
# 这里的密码是刚才初始化时生成的随机密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
flush privileges;

常用命令

service mysqld start
service mysqld stop
service mysqld restart

Windows安装Mysql Zip绿色版

安装服务

REM 自动启动
mysqld --install
mysqld --defaults-file="D:\Program Files\mysql\mysql.ini" --initialize --explicit_defaults_for_timestamp
net start mysql

REM 手动启动
mysqld --install-manual
mysqld --defaults-file="D:\Program Files\mysql\mysql.ini" --initialize --explicit_defaults_for_timestamp
net start mysql

REM 卸载服务
mysqld --remove
# mysql.ini 内容
[mysql]
default-character-set=utf8
 
[mysqld]
basedir = D:\Program Files\mysql
datadir = D:\Program Files\mysql\data
port = 3306
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

初始密码

查看Data目录下**.err文件,搜索"password is generated",结束就是初始密码

mysql初始密码是无法作为登陆使用的,所以登陆mysql必须修改自动生成的密码。

mysql -u root -h 127.0.0.1 -p
Enter password: (enter the random password here)
 
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
mysql> flush privileges;

MySQL基本语句

MySQL脚本的基本组成

与常规的脚本语言类似, MySQL 也具有一套对字符、单词以及特殊符号的使用规定, MySQL 通过执行 SQL 脚本来完成对数据库的操作, 该脚本由一条或多条MySQL语句(SQL语句 + 扩展语句)组成, 保存时脚本文件后缀名一般为 .sql。在控制台下, MySQL 客户端也可以对语句进行单句的执行而不用保存为.sql文件。

标识符

标识符用来命名一些对象, 如数据库、表、列、变量等, 以便在脚本中的其他地方引用。MySQL标识符命名规则稍微有点繁琐, 这里我们使用万能命名规则: 标识符由字母、数字或下划线(_)组成, 且第一个字符必须是字母或下划线。

对于标识符是否区分大小写取决于当前的操作系统, Windows下是不敏感的, 但对于大多数 linux\unix 系统来说, 这些标识符大小写是敏感的。

关键字:

MySQL的关键字众多, 这里不一一列出, 在学习中学习。 这些关键字有自己特定的含义, 尽量避免作为标识符。

语句:

MySQL语句是组成MySQL脚本的基本单位, 每条语句能完成特定的操作, 他是由 SQL 标准语句 + MySQL 扩展语句组成。

函数:

MySQL函数用来实现数据库操作的一些高级功能, 这些函数大致分为以下几类: 字符串函数、数学函数、日期时间函数、搜索函数、加密函数、信息函数。

MySQL中的数据类型

MySQL有三大类数据类型, 分别为数字、日期\时间、字符串, 这三大类中又更细致的划分了许多子类型:

  • 数字类型
    1. 整数: tinyint、smallint、mediumint、int、bigint
    2. 浮点数: float、double、real、decimal
  • 日期和时间: date、time、datetime、timestamp、year
  • 字符串类型
    1. 字符串: char、varchar
    2. 文本: tinytext、text、mediumtext、longtext
    3. 二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob

创建一个数据库

使用 create database 语句可完成对数据库的创建, 创建命令的格式如下:

create database 数据库名 [其他选项];

例如我们需要创建一个名为 samp_db 的数据库, 在命令行下执行以下命令:

create database samp_db character set gbk;

为了便于在命令提示符下显示中文, 在创建时通过 character set gbk 将数据库字符编码指定为 gbk。创建成功时会得到 Query OK, 1 row affected(0.02 sec) 的响应。

注意: MySQL语句以分号(;)作为语句的结束, 若在语句结尾不添加分号时, 命令提示符会以 -> 提示你继续输入(有个别特例, 但加分号是一定不会错的);

提示: 可以使用 show databases; 命令查看已经创建了哪些数据库。

insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);
select 列名称 from 表名称 [查询条件];
select 列名称 from 表名称 where 条件;
update 表名称 set 列名称=新值 where 更新条件;
delete from 表名称 where 删除条件;

Mysql workbench 数据库设计

  • PK:primary key 主键
  • NN:not null 非空
  • UQ:unique 唯一索引
  • BIN:binary 二进制数据(比text更大)
  • UN:unsigned 无符号(非负数)
  • ZF:zero fill 填充0 例如字段内容是1 int(4), 则内容显示为0001
  • AI:auto increment 自增

外键约束

MySQL中定义外键的表,双方必须都是Innodb

子表中外键字段和其对应父表中的字段必须都设为索引主键自动为索引

E-R图中几种关系

  • Identifying Relationship
    需要提供外键给另外一张表作联合主键
  • Non-identifying Mandatory Relationship
    强制外键
  • Non-identifying Optional Relationship
    可选外键
  • One-to-one Relationship Non-specific
    无特殊关系

判别一个关系是Non-Identifying还是Identifying只要区分子实体的主键,看是否需要父实体的外键共同作为主键(类似联合主键?),需要则为Identifying,如果子实体自己的主键就可唯一标识则它为Non-Identifying

  • 虚线1:1关联是添加外键的
  • 实线1:1是添加外键为主键的
-- 多个外键 个人理解 要把该字段设置为索引,再foreign key
CREATE TABLE product (
    category INT NOT NULL,
    id INT NOT NULL,
    price DECIMAL,
    PRIMARY KEY (category , id)
);
 
CREATE TABLE customer (
    id INT NOT NULL,
    PRIMARY KEY (id)
);
 
CREATE TABLE product_order (
    no INT NOT NULL AUTO_INCREMENT,
    product_category INT NOT NULL,
    product_id INT NOT NULL,
    customer_id INT NOT NULL,
    PRIMARY KEY (no),
    INDEX (product_category , product_id),
    FOREIGN KEY (product_category , product_id)
        REFERENCES product (category , id)
        ON UPDATE CASCADE ON DELETE RESTRICT,
    INDEX (customer_id),
    FOREIGN KEY (customer_id)
        REFERENCES customer (id)
);
-- 先给父表,子表中涉及到外键的字段设置索引
ALTER TABLE parts ADD INDEX idx_model (model);
ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);
 
-- 在给pc表设置外键
ALTER TABLE pc ADD CONSTRAINT fk_cpu_model FOREIGN KEY (cpumodel) REFERENCES parts(model) ON UPDATE CASCADE;
 
-- 删除外键
alter table child drop foreign key 外键名

 

JAVA JDBC 报错一则!

Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

MYSQL在高版本的连接中需要指定SSL开启状态

String url = "jdbc:mysql://localhost:3306/bbc?"	+ "user=root&password=privacy&useUnicode=true&characterEncoding=UTF8&useSSL=false";

 

MySql 开启外部访问

# 改表法
mysql -u root -ppassword
use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>flush privileges;
mysql>select host, user from user;
# 授权法
mysql>  grant all privileges on *.* to root@'%' identified by "PASSWORD";
mysql>  FLUSH PRIVILEGES;
  • 第一个*为MySQL中的数据库名。
  • 第二个*为MySQL中的指定的数据库的表名。
  • root为授权用户的用户名。
  • %为任意主机,也可以写指定的ip地址或者主机名。
  • PASSWORD为授权改用户在指定的数据访问MySQL时的密码,如果该密码和本地用户同名用户的密码不一致,远程访问时务必使用该授权密码。
# 防火墙授权
iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save
service iptables restart