[sql]mysql管理手头手册,多对多sql逻辑
各类dbms排名


cs模型

mysql字符集设置

查看存储引擎,字符集
show variables like '%storage_engine%';
show VARIABLES like '%max_allowed_packet%';
show variables like '%storage_engine%';
show variables like 'collation_%';
show variables like 'character_set_%';
临时设置字符集
SET NAMES 'utf8';
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
SET collation_connection = utf8_general_ci;
SET collation_database = utf8_general_ci;
SET collation_server = utf8_general_ci;
缺陷是: 登出后设置的就失效了.
永久设置字符集
参考: http://blog.csdn.net/u013474104/article/details/52486880
D:\Program Files\mysql-5.7.19-winx64\my.ini
[mysqld]
default-storage-engine = innodb
innodb_file_per_table = 1
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
[mysql]
default-character-set = utf8
[mysql.server]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[client]
default-character-set = utf8
mysql配置文件
- 配置文件查找先后顺序
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
C:\windows\my.ini
C:\my.ini
E:\dev\mysql57\my.ini
- 通过配置文件设置字符集
default-storage-engine = innodb
innodb_file_per_table = 1
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
mysql crud语句
- 建表
create table log(ip varchar(40), status int, count int);
- 插入记录
insert into log values ('1','1',1)
- 删除某条记录
delete from mysql.user where user='';
- 查看建表语句
show create database test;
- 查看权限
show grants
- 创建用户并授权
create database bbs;
grant all on bbs.* to dev@localhost identified by '123456';
grant all on bbs.* to dev@'%' identified by '123456';
er图与实体关系映射
不得不说,这个鬼东西是上大学老师讲的图,类似. 坑了我不少年. 当初就不想学这玩意. 后来自己弄,发现并不是那回事,大学里老师讲的类似隔靴搔痒,泯灭了我对sql的兴趣. 这里我重拾sql,不用看这部分了.
数据库设计(一对一、一对多、多对多)
关联映射:一对多/多对一
存在最普遍的映射关系,简单来讲就如球员与球队的关系;
一对多:从球队角度来说一个球队拥有多个球员 即为一对多
多对一:从球员角度来说多个球员属于一个球队 即为多对一数据表间一对多关系如下图:

直观上给人的感觉是, 建一个表时候,觉得一个字段冗余了,独立出去,通过外链方式来访问
这里可以使用navicat操作: 链接:https://pan.baidu.com/s/1hr83YCG 密码:qmi7
- 建库
create database learn;
- 创建球队表
create table qiudui(
id int auto_increment primary key not null,
name varchar(20) not null,
localtion varchar(50) not null
);
- 给球队表插入数据
insert into qiudui(name,localtion) values('qd1', 'xian');
insert into qiudui values(2, 'qd2', 'beijing');
insert into qiudui values(3, 'qd3', 'shanghai');
- 创建球员表, 外键到球队
create table qiuyuan(
id int auto_increment primary key not null,
name varchar(20),
qiudui_id int,
FOREIGN KEY (qiudui_id) REFERENCES qiudui(id)
);
- 给球队表插入数据
insert into qiuyuan values(1,'qy1',1);
insert into qiuyuan values(2,'qy2',2);
insert into qiuyuan values(3,'qy3',3);
- 默认外键策略: 球队表里的记录不能删除,除非与之关联的球员没了
delete from qiudui where id=3;
关联映射:一对一
一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队。
数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联。
一对一外键关联,图示如下:

一对一主键关联:要求两个表的主键必须完全一致,通过两个表的主键建立关联关系。图示如下:

关联映射:多对多
多对多关系也很常见,例如学生与选修课之间的关系,一个学生可以选择多门选修课,而每个选修课又可以被多名学生选择。
数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。
数据表间多对多关系如下图:

[django]主次表如何取出对方数据[主表obj.子表__set()]
navicat
链接:https://pan.baidu.com/s/1hr83YCG 密码:qmi7
使用navicat导出表内容为execl或者json

使用navicat查看ER图(即一对一一对多关系图)

mysql时间字段
mysql运维
总体指引
mysql指引
1,mysql基本安装
2,mysql多实例安装与维护
3,备份恢复
备份数据库
分备数据库
分备表
恢复数据库
阿里云sql某个表的导入导出
msyqldump -h 192.168.1.1 -uroot -p --set-gtid-purged=off --skip-tz-utc bbs bbs_tb1 > bbs_tb1.sql
mysql -uroot -p < bbs_tb1.sql
centos7 安装mysql
yum install mariadb-server mariadb -y
修改my.conf
[mysqld]
default-storage-engine = innodb
innodb_file_per_table
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
systemctl start mariadb && systemctl enable mariadb
linux下查看nginx,apache,mysql,php的编译参数
1、查看linux的内核版本,系统信息,常用的有四种办法:
uname -a
more /etc/issue
cat /proc/version
more /etc/redhat-release
2、nginx编译参数:
#/usr/local/nginx/sbin/nginx -V
3、apache查看版本编译参数
apache版本:
httpd -v
apache编译参数:
# cat /usr/local/apache2/build/config.nice
4、查看php版本及编译参数
php编译参数:
# /usr/local/php/bin/php -i |grep configure
php -v
5、查看mysql版本及参数
查看mysql版本:
mysql -v 或者是--help|grep Distrib来查看;
进入数据库
select version(); 或者status;或者/s;
mysql编译参数:
# cat "/usr/local/mysql/bin/mysqlbug"|grep configure
mysql初始化安装完成后优化
mysql安装方式: 不管哪种方式装完成数据库,都需要对数据库做一些优化.
- 1,yum
- 2,源码
- 3,二进制
- 4,源码+yum
mysql> select host,user from mysql.user;
+-----------+------+
| host | user |
+-----------+------+
| 127.0.0.1 | root |
| ::1 | root |
| localhost | |
| localhost | root |
| www | |
| www | root |
+-----------+------+
6 rows in set (0.00 sec)
- 删掉用户名为null的
mysql> delete from mysql.user where user='';
Query OK, 2 rows affected (0.00 sec)
mysql> select host,user from mysql.user;
+-----------+------+
| host | user |
+-----------+------+
| 127.0.0.1 | root |
| ::1 | root |
| localhost | root |
| www | root |
+-----------+------+
4 rows in set (0.00 sec)
drop user ''@'localhost';
drop user ''@'::1';
drop user 'root'@'lanny';
drop user ''@'lanny';
mysql> select user,host from mysql.user;
mysql>
# 有时候drop删不掉(可能包含特殊字符),才会用delete命令
- 删掉ipv6的:
mysql> delete from mysql.user where host='::1';
Query OK, 1 row affected (0.00 sec)
mysql> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | localhost |
| root | www |
+------+-----------+
3 rows in set (0.00 sec)
- 删掉www的
mysql> delete from mysql.user where host='www';
Query OK, 1 row affected (0.00 sec)
mysql> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | localhost |
+------+-----------+
2 rows in set (0.00 sec)
mysql>
- 删掉test库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
查看库/表大小和修改时间
1.查看数据库的大小
use 数据库名
SELECT sum(DATA_LENGTH)+sum(INDEX_LENGTH) FROM information_schema.TABLES where TABLE_SCHEMA='数据库名';
得到的结果是以字节为单位,除/1024为K,除/1024/1024为M。
2.查看表的最后mysql修改时间
select TABLE_NAME,UPDATE_TIME from INFORMATION_SCHEMA.tables where TABLE_SCHEMA='数据库名';
可以通过查看数据库中表的mysql修改时间,来确定mysql数据库是否已经长期不再使用。
3.查看数据库中各个表占用的空间大小
如果想知道MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开MySQL的 information_schema 数据库。在该库中有一个 TABLES 表,这个表主要字段分别是:
TABLE_SCHEMA : 数据库名
TABLE_NAME :表名
ENGINE :所使用的存储引擎
TABLES_ROWS :记录数
DATA_LENGTH :数据大小
INDEX_LENGTH :索引大小
其他字段请参考MySQL的手册,我们只需要了解这几个就足够了。
所以要知道一个表占用空间的大小,那就相当于是 数据大小 + 索引大小 即可。
SQL:
SELECT TABLE_NAME,DATA_LENGTH+INDEX_LENGTH,TABLE_ROWS FROM TABLES WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名'
4.查看表的最后mysql修改时间
select TABLE_NAME,UPDATE_TIME from INFORMATION_SCHEMA.tables where TABLE_SCHEMA='数据库名';
可以通过查看数据库中表的mysql修改时间,来确定mysql数据库是否已经长期不再使用。
[sql]mysql管理手头手册,多对多sql逻辑的更多相关文章
- mybatis 一次执行多条SQL MySql+Mybatis+Druid之SqlException:sql injection violation, multi-statement not allow
如果用JDBC jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=utf8 ...
- [sql]mysql参数(配置)手册
my-innodb-heavy-4G.cnf配置文件注解 [client] #客户端 port = 3306 #mysql客户端连接时的默认端口号 socket = /application/mysq ...
- SQL Server 管理套件(SSMS)
SQL Server 管理套件(SSMS) 当您按照之前章节的步骤顺利安装完 SQL Server 2014 后,要做的第一件事就是需要打开 SQL Server 管理套件,并且要知道怎样去使用它. ...
- mysql数据库性能优化(包括SQL,表结构,索引,缓存)
优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...
- MySQL 的性能(上篇)—— SQL 执行时间分析
简介 文中内容均为阅读前辈的文章所整理而来,参考文章已在最后全指明 本文分为上下两篇: 上篇:MySQL 的 SQL 执行时间分析 下篇:MySQL 性能优化 后端开发必然会接触到数据库,数据层的优劣 ...
- MySQL基本语法(一):和SQL Server语法的差异小归纳
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- MySQL 的性能(上篇)—— SQL 执行分析
简介 文中内容均为阅读前辈的文章所整理而来,参考文章已在最后全指明 本文分为上下两篇: 上篇:MySQL 的 SQL 执行分析 下篇:MySQL 性能优化 后端开发必然会接触到数据库,数据层的优劣会影 ...
- MySQL与OLAP:分析型SQL查询最佳实践探索
搞点多维分析,糙快猛的解决方式就是使用ROLAP(关系型OLAP)了.数据经维度建模后存储在MySQL,ROLAP引擎(比方开源的Mondrian)负责将OLAP请求转化为SQL语句提交给数据库.OL ...
- 学习笔记之SQL / MySQL
SQL Fiddle(在线执行SQL语句的网站) http://www.sqlfiddle.com/ MySQL https://www.mysql.com/ MySQL :: MySQL 5.7 R ...
随机推荐
- jquery on=>keyup无法绑定未来js添加的元素
$("[name=red_count]").on("keyup", countKeyUpBind);即使使用on的,也无法绑定未来元素, 所以直接在动态添加的时 ...
- 【框架学习】Nancy 框架
Nancy 框架 http://liulixiang1988.github.io/nancy-webkuang-jia.html .是一个轻量级用于构建http相应的web框架: .与mvc类似,有自 ...
- 解决Unknown error: Unable to build: the file dx.jar was not loaded from the SDK folder!
解决Unknown error: to the dx.jar the SDK folder!最近渐渐迁移到Android Studio来了,更新过Android SDK Manager里的东西后,打开 ...
- Message Queue
RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发.同时实现了一个经 ...
- 安装cnpm
使用淘宝镜像的cnpm $ npm install -g cnpm --registry=https://registry.npm.taobao.org
- Android MediaScanner
一.MediaScanner 的使用 1)Intent.ACTION_MEDIA_SCANNER_SCAN_FILE:扫描指定文件 public void scanFileAsync(Context ...
- 【读书笔记】setsockopt
setsockopt 设置套接口的选项. #include <sys/types.h> #include <sys/socket.h> int setsockopt(int ...
- 【CF839E】Mother of Dragons 折半状压
[CF839E]Mother of Dragons 题意:给你一张n个点,m条边的无向图.你有k点能量,你可以把能量分配到任意一些点上,每个点分到的能量可以是一个非负实数.定义总能量为:对于所有边&l ...
- node+express实现文件上传功能
在进行node web开发时,我们可能经常遇到上传文件的问题,这一块如果我们没有经验,可能会遇到很多坑,下面我将跟大家分享一下,实现文件上传的一些方式. 一.node+express文件上传的常用方式 ...
- 【巷子】---webpack配置非CMD规范的模块
一.前言 webpack在配置多页面开发的时候 ,发现用 import 导入 Zepto 时,会报 Uncaught TypeError: Cannot read property 'createEl ...