数据库命令:
创建create database 数据库名 charset=utf8;
删除drop database 数据库名;
查看所有数据库:show databases;
使用数据库:use 数据库名;
----------------------------------------
表命令:
create table 表名(列...);
唯一标识的要求:id
类型:int unsigned
约束1:not null
约束2:primary key
约束3:auto_increment
列的格式:列的名称 类型 约束
create table stu(
-> id int not null primary key auto_increment,
-> name varchar(10) not null,
-> gender bit default 1,
-> birthday datetime,
-> isDelete bit default 0,
-> );
查看表show tables;
查看表结构desc 表名;
修改表:alter table 表名 add|modify|drop 列名 类型 约束;
alter table stu modify column isDelete bit not null default 0;
删除表:drop table 表名;
----------------------------------------
数据命令:
添加数据:insert into 表名(列名) values(值),(值)...;
修改数据:update 表名 set 列1=值1,... where ...;
删除数据:delete from 表名 where ...;
逻辑删除:update ....
备份:mysqldump >
恢复:mysql <

数据库、表、字段、行

问:查询姓黄或洪的男生
分析:数据从哪来,哪个表stu
条件:姓黄或洪name or
and
男生gender
答:select * from stu where gender=1 and (name like '黄%' or name like '洪%')

distinct
条件:where 字段 运算符 常量
分组聚合:group by ... having ...

关系的存储方案
1:1-》存储在任何一个表中
1:n-》存储在n的表中,新增一个字段
m:n-》新建表

成绩表:id,成绩,学生,科目
关系,第三范式,外键

问题:两个表之间有关系吗?分析的依据是当前系统的业务,够用就行
怎么存储这个关系?参照“关系的存储方案”
关系字段的类型是什么?根据第三范式,引用主键,所以主键的类型,就是这个字段的类型
关系字段的数据有效性怎么保证?外键

create table sco(
id int not null auto_increment primary key,
stu_id int,
sub_id int,
score int(3),
foreign key(stu_id) references stu(id),
foreign key(sub_id) references sub(id)
);

insert into sco values(0,1,1,100);

select distinct * from 表名
where ...
group by ...
having ...
order by ...
limit ...

关系的问题
(1)是什么样的对应关系
(2)存储关系的字段,使用什么类型
(3)存入数据时错了怎么办?

查:学生姓名及所在的班级名称
分析:stu,class
stu.class_id=class.id
答:select * from stu inner join class on stu.class_id=class.id

查询学生的姓名、平均分
分析:姓名->stu
平均分->先sco查分数,再聚合avg
需要从两张表中获取数据,所以需要连接
连接的条件:stu.id=sco.stu_id
实现一:获取所有的原始数据
select name,score from stu inner join sco on stu.id=sco.stu_id
继续分析:对每个学生求平均分
让姓名相同的信息,分成一组
select name,avg(score) from stu inner join sco on stu.id=sco.stu_id
group by name

查询男生的姓名、总分
分析:姓名->stu
男生->stu
总分->sum(),分数->sco
连接条件:stu.id=sco.stu_id
实现一:select * from sco inner join stu on stu.id=sco.stu_id
where gender=1
实现二:分组
。。。 group by name

查询科目的名称、平均分
sub.title->sub
avg(),score->sco
sub.id=sco.sub_id

查询学生姓名、科目名称、分数
stu
sub
sco

查询省的名称为“山西省”的所有城市
select * from areas where title='山西省'

查询‘广州市’的所有区县
#select * from areas where title='淄博市' #370300
#select * from areas where pid='370300' #370301
#select * from areas where pid='370301'

#areas as shi where shi.title='广州市'
#areas as qu on qu.pid=shi.id
#areas as qu1 on qu1.pid=qu.id

select qu.*,qu1.*
from areas as shi
inner join areas as qu on qu.pid=shi.id
left join areas as qu1 on qu1.pid=qu.id
where shi.title='淄博市'

子查询
#查询广州市、淄博市的所有区
#select id from areas where title='广州市' or title='淄博市'
select * from areas where pid in(select id from areas where title='广州市' or title='淄博市')

源码安装:python setup.py install

MySQLdb
Connection
Cursor

查询:fetchone(),fetchall()
封装:将数据库操作的代码封装到一个类中,helper
用户的登录注册成功
hashlib
sha1()
update()
hexdigest()

linux下数据库操作:

mysql -h localhost -u 用戶名 -p密碼                //連接數據庫
use desk_show;                                          //使用數據庫
show tables;                                              //顯示數據表
describe desk6_0;                                     //顯示表結構

mysql其他命令:

show databases; 显示数据库

create database name; 创建数据库

use databasename; 选择数据库

drop database name 直接删除数据库,不提醒

show tables; 显示表

describe tablename; 显示具体的表结构

select 中加上distinct去除重复字段

mysqladmin drop databasename

删除数据库前,有提示。

显示当前mysql版本和当前日期

select version(),current_date;

我们quit或者exit退出mysql。

1、显示数据库

 show databases;

2、选择数据库

use 数据库名;

3、显示数据库中的表

show tables;

4、显示数据表的结构

describe 表名;

5、显示表中记录

SELECT * FROM 表名

6、建库

 create databse 库名;

7、建表

create table 表名 (字段设定列表);

mysql> create table name(
-> id int auto_increment not null primary key ,
-> uname char(8),
-> gender char(2),
-> birthday date );
Query OK, 0 rows affected (0.03 sec) mysql> show tables;
+------------------+
| Tables_in_userdb |
+------------------+
| name |
+------------------+
1 row in set (0.00 sec) mysql> describe name;
+----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| uname | char(8) | YES | | NULL | |
| gender | char(2) | YES | | NULL | |
| birthday | date | YES | | NULL | |
+----------+---------+------+-----+---------+----------------+
4 rows in set (0.00 sec) 注: auto_increment 自增
primary key 主键

8、增加记录

 insert into name(uname,gender,birthday) values('张三','男','1971-10-01');

9、修改记录

update name set birthday='1971-01-10' where uname='张三';

10、删除记录

delete from name where uname='张三';

11、删除表

drop table 表名

12、删除库

 drop database 库名;

13、备份数据库

mysqldump -u root -p --opt 数据库名>备份名; //进入到库目录

14、恢复

mysql -u root -p 数据库名<备份名; //恢复时数据库必须存在,可以为空数据库

15、数据库授权

 格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"

例1、增加一个用户user001密码为123456,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:

 mysql> grant select,insert,update,delete on *.* to user001@"%" Identified by "123456";

例2、增加一个用户user002密码为123456,让此用户只可以在localhost上登录,也可以设置指定IP,并可以对数据库test进行查询、插入、修改、删除的操作 (localhost指本地主机,即MySQL数据库所在的那台主机)

//这样用户即使用知道user_2的密码,他也无法从网上直接访问数据库,只能通过MYSQL主机来操作test库。
        //首先用以root用户连入MySQL,然后键入以下命令:

  mysql>grant select,insert,update,delete on test.* to user002@localhost identified by "123456";

MySQL——总结的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

  3. LINUX篇,设置MYSQL远程访问实用版

    每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...

  4. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  5. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  6. 闰秒导致MySQL服务器的CPU sys过高

    今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...

  7. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  9. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  10. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

随机推荐

  1. vue+element ui 的时间控件选择 年月日时分

    前言:工作中用到 vue+element ui 的前端框架,需要选择年月日时分,但element ui官网demo有没有,所以记录一下.转载请注明出处:https://www.cnblogs.com/ ...

  2. 移动端Web Meta标签

    原文  http://blog.segmentfault.com/jianjian_532633/1190000000654839 添加到推刊   在介绍移动端特有 meta 标签之前,先简单说一下 ...

  3. DW如何打开已经关闭的站点文件提示框

    DW在已经新建成功站点后,若将站点文件提示框关闭后,如何重新打开呢?即如下图所示的提示框: 点击站点下拉菜单中的‘在站点定位’即可打开关闭的提示框.

  4. js和jquery中获取非行间样式

    样式又分为了行间样式和非行间样式.一般来说行间样式用的是比较少的,因为它能够作用的范围就只有一个元素,而非行间样式的作用范围可以是一类元素(即拥有相同德标签,或者说是有相同的类名,(当然id名不可能相 ...

  5. Spring Boot—07应用application.properties中的配置

    方法1 @Value("${test.msg}") private String msg; 方法2 @Autowired private Environment env; Stri ...

  6. 一步一步 Pwn RouterOS之exploit构造

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前面已经分析完漏洞,并且搭建好了调试环境,本文将介绍如何利用漏洞写 ...

  7. JS数组与对象的遍历方法大全

    本文简单解析各种数组和对象属性的遍历方法: 原生for循环.for-in及forEach ES6 for-of方法遍历类数组集合 Object.key()返回键名的集合 jQuery的$.each() ...

  8. 带你从零学ReactNative开发跨平台App开发(九)

    ReactNative跨平台开发系列教程: 带你从零学ReactNative开发跨平台App开发(一) 带你从零学ReactNative开发跨平台App开发(二) 带你从零学ReactNative开发 ...

  9. react-ssr

    为什么使用SSR 与传统 SPA(Single-Page Application - 单页应用程序)相比 服务器端渲染(SSR)的优势主要在于: 更好的 SEO,由于搜索引擎爬虫抓取工具可以直接查看完 ...

  10. Java动态代理和反射机制

    反射机制 Java语言提供的一种基础功能,通过反射,我们可以操作这个类或对象,比如获取这个类中的方法.属性和构造方法等. 动态代理:分为JDK动态代理.cglib动态代理(spring中的动态代理). ...