mysql-yu

数据库的相关概念 db: 数据库 DBMS: 数据库管理系统 软件产品 SQL: 结构华查询语言

组 集合 文件

数据 放到 表 放到 库

mysql数据库隶属于mysql ab公司,总部位于瑞典,08先被sun收购,09后被orcle收购

mysql优点 开放源码 免费 效率高

dbms分为两类 基于共享文件系统的dbms -access 基于客户机 - 服务器的dbms mysq,orcle db2

mysql社区版 - 免费 mysql企业版 - 收费

5.5, 5.6, 5.7等

安装 centos7 mysql -5.6

需要解决依赖 mysql-client 5.6.40 mysql-devel mysql-server mysql-shared yum install ncurses-devel libaio-devel gcc make cmake -y

wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.50.tar.gz

useradd -s /sbin/nologin -M mysql -创建用户 idmysql -查看用户

下载完成后,解压,tar -zxvf 进入目录 查看并没有makefile ,执行cmake,生成makefile,用于编译安装

cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.50 \ -DMYSQL_DATADIR=/application/mysql-5.6.50/data \ -DMYSQL_UNIX_ADDR=/application/mysql-5.6.40/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGIN=1 \ -DWITH_ZLIB=bundled \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0 -DWITH_SSL=bundled \

make make && make install

ln -s /appcation/mysql-5.6.50 ./mysql 创建软链接

初始化操作 /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql

cp support-files/mysql.server /etc/init.d/mysqld - chmod 700 /etc/init.d/mysqld -改权限 export PATH=/application/mysql/bin:$PATH -修改变量 source /etc/profile -刷新生效


mysql修改密码 mysqladmin -uroot -p password xxxx

----- ------------- mysql 多实例管理 初始化三次,生成3个独立的实例

下载安装二进制源码包 wget https://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz

--- 清理环境 vim /etc/profile

#export PATH=$PATH:/usr/local/mysql/bin -把path注释掉 停止正在运行的mysql service mysql stop

创建用户 因为这前已创建,这里无需创建。 id mysql 查看用户情况

准备好多实例目录 mkdir -p /my_mysql/{3306,3307} tree /my_mysql/

解压二进制包 tar -zxvf xxx -C /application/ -C指定目录 进入目录 mysql-5.6.50-linux-glibc2.12-x86_64

准备多个实例的配置文件 找到3306实例的my.conf

basedir=/usr/local/mysql datadir=/usr/local/mysql/data port=3306 socket=/tmp/mysql.sock log-error=/usr/local/mysql/data/mysql.err character_set_server=utf8mb4 server_id = 10 log-bin=/usr/local/mysql/data/binlog

配置第二个实例3307 注意修改如下参数 所有的3306换成 3307 server_id 不能重复

basedir=/application/mysql-5.6.50-linux-glibc2.12-x86_64/ datadir=/my_mysql/3307 port=3307 socket=/my_mysql/3307/mysql.sock log-error=/my_mysql/3307/mysql_3307_error.err character_set_server=utf8mb4 server_id = 12 log-bin=/my_mysql/3307/mysql-bin

--------- ddl 定义数据库 -标准写法,内置的sql关键字全部大写,自定义的数据可自定义大小写

create database abc; create database if not exists abc default charset UTF8_general_ci; -创建库,如果该库不存在的话,设置字符集 SHOW CREATE DATABASE abc; -查看创建的库信息,如字符集

------- DQL 查询 use mysql; -使用库 select database(); -查看当前mysql,在哪个库中 show tables; -量看当前库里的表 desc user -显示查看表users select host,user,password from user; -查看表user的host,user,password信息

-----dml 数据操作 select user,host,password from mysql.user where user='root'; delete from mysql.user where user='root' and host='::1';

------- dcl 授权控制语句 select user,host,password from mysql.user;
delete from mysql.user where user=' '; -删除user为空的信息

创建用户并设置权限 create user 名字@‘允许登录的主机网段’ identified by '密码'; 允许登录的主机网段: % = 所有的 ,10.0.0.%

create user yu@'%' identified by '123456'; -创建用户

grant usage on . to 'yu'@'%' identified by '123456'; -创建只登录权限on所有表,to用户yu,认证密码为'123456'

show grants for yu@'%'; -查看权限, USAGE表示只有登录的权限

grant 给与的权限 on 数据库.表 to 用户@'允许登录的主机' identified by '密码' with grant option -with grant option 允许该用户进行授权

grant select on mysql.user to yu@'%'; -添加select查看的权限,只能查看user表,to用户yu show grants for yu

-------------ddl 定义数据库 查看帮助 create, alter, drop ? data definition;
? create database;

-------------dcl 数据控制 查看帮助 grant, revoke, commit ? Account Management

--------------dml 数据操作 查看帮助 slect, insert, delete, update ? data manipulation

------------- mysql 解析原理 create database 'kings' /!40100 default character set utf8 / show variables like 'char%'; -查看字符集相关

show databases like 'k%'; show tables from kings;

create table tb_name(字段名 字段数据类型,字段名2 字段数据类型); ? create table

create table if not exists 'tanks' ( id int unsigned auto_increment, name varchar(100) not null, skills varchar(255) price int not null, primary key (id) )engine=innoDB default carset-utf8 -unsigined 无符号, engine=innodb 指定引擎

show tables; show create table tanks; -查看表tanks的创建信息 select * from tanks;

? insert insert into tanks (id,name,skills,price) values(1,'程咬金','大招回血,血量低',999),(2,'大鱼圧周','免疫所有',888);

? drop drop database if exists lol; -加上if exists 判断语句,如果要表不在也不会报错 drop table tanks;


通过多种客户端读写mysql mysql命令 navicat 工具 php python

----------- 实践 ------- 通过后端连端mysql 安装 yum install php-mysqlnd php -y

读取mysql数据的php脚本

<?php $servername = "10.0.0.12"; $username = "yu"; $password = "123"; $dbname = "mysql";

$conn = mysqli_connect($servername, $username, $password, $dbname);

mysqli_query($conn, "SET NAMES UTF8");

if (!$conn) { die("连接失败:" ); }

------------------------------------------查询 $sql="select * from mysql.user"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { echo "user:" . $row["User"] . "-host:" . $row["Host"] . "-password:" . $row["Password"] . "\n"; } }else{ echo "---没有结果返回---";

}

--------------------------------------- 插入数据 $sql="insert into mysql.user(User,Host,Password) values('user1','10.0.0.%','abc111'),('user2','192.168.1.%','abc222')"; if (mysqli_query($conn,$sql)) { echo "新记录插入成功"; }else { echo "error:" . $sql . "
" . mysqli_error($conn);

}

mysqli_close($conn); ?>


使用python 读取,操作mysql yum install python3 python3-devel -y which pip3 pymysql pip install pymysql

编写脚本 vim python3_mysql_read_write.py

import pymysql

conn=pymysql.Connect(host="10.211.55.19",port=3306,user="yuchao",passwd="yuchao668",db="kings")

cursor =conn.cursor()

sql="insert into mysql.user(user,host,passwd) values('uname1','10.0.0.%','abc123')"

rows=cursor.execute(sql) print(f"插入了{row}行数据")

cursor.execute("select * from heros;") print(f"查出的结果是:{cursor.fetchall()}")

conn.commit() cursor.close() conn.close() :wq

执行脚本 python3 python3_mysql_read_write.py

-------- 修改数据表 rename rename table 新的名字 to 旧的名字; rename table mysql.user to user_newName;

alter alter table 旧表名 rename to 新表名; alter table user_newName rename to mysql.user;

desc 表名 show create table 表名;

添加字段 alter table 表名 add 字段名 字段的数据类型(长度) 额外的字段属性 alter table user add introduction varchar(255) not null; desc mysql.user -查看表结构 查看添加的字段 字段:user,host,password,introdution

添加指定位置的字段 ENUM('flush','fire')二选一 alter table mysql.user add summoner ENUM('flush','fire') not null default 'flush' after;

删除table的字段 alter table user drop introduction;

一次性添加多个字段 alter table user add camp varchar(50),add pic varchar(255) ater password; -添加camp和pic到pasword后面 alter table user add camp varchar(50) after user,add pic varchar(255) after password;

修改表字段的类型 alter table 表名 change 旧字段名 新字段名 新数据类型 alter table user chang camp camp_new int;

------ 表的查看和管理 索引 show index from mysql.user\G -查看 primary key 是主键,也是索引 alter table tanks add index name_index(name); -添加索引 alter table tanks drop index name_index(name); -删除索引

--------- 数据表的删除 drop database 数据库名; drop table 表名;

delete from 表名; -删除所有内容 delete from 表名 where 字段名;
delete 是一行一行的删除, bug:删除有自增的ip 会保留id的位置 delete from tanks where id=3 -删除字段id

alert table tanks modify id int(11) primary key auto_increment; -给字段id添加主键auto_increment表示自增,解决重复报错的问题 alert table tanks modify id int(11) auto_increment;

删除这tuncate 语法 -解决 delete 数据后id序号错乱 truncate table mysql.user;

limit -限制显示多少条记录 select * from mysql.user where password!=null limit 2; -用法(limit 2,5)

order by -排序功 能 select * from mysql.user order by;

update -更新表数据 - -注意要添加 where条件,否则会修改全部的记录 update mysql.user set host='%',password='111' where user='user1'; -修改user1的host,password属性

ch14
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。