MySQL数据库_1

一、概述

  1、数据(DATA)

    描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字、图片,图像、声音、语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机。

  2、数据库(DataBase,简称DB)

    数据库就是一个文件夹!

    数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的。

    过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用。

    数据库是长期存放在计算机内、有组织、可共享的数据即可。

    数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享。

  3、数据库管理系统(DataBase Management System,简称DBMS)

    在了解了Data与DB的概念后,如何科学地组织和存储数据,如何高效获取和维护数据成了关键。

    这就用到了一个系统软件---数据库管理系统。

    如MySQL、Oracle、SQLite、Access、MS SQL Server

    mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
    oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
    sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。

  4、数据库管理人员(Database administrator)

  5、结构化查询语言(Structured Query Language,简称SQL)

二、MySQL介绍

  1、介绍

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

  2、MySQL是什么?

    * mysql就是一个socekt服务端
    * 客户端软件
       mysql自带
       python模块  

  3、其它类型的数据库

    关系型:MySQL、sqllite,db2,oracle,access,sql server

    非关系型:mongodb,redis,memcache

三、语句概述

  SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。由IBM公司开发。

  1、SQL规范

    #################### 注意事项 ###################

    1)、在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。建议命令大写,表名库名小写;

    2)、SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。(不见“;”不结束啊)

    3)、用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。

    4)、注释:  单行注释:--

      多行注释:/*......*/

    5)、sql语句可以折行操作

    6)、DDL,DML和DCL区别:     

      DDL(data definition language)语句 数据库定义语言: 数据库、表、视图、索引、存储过程,

        例如CREATE DROP ALTER

      DML(data manipulation language)语句 数据库操纵语言:

        插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT

      DCL(Data Control Language)语句 数据库控制语言:

        例如控制用户的访问权限GRANT、REVOKE

  2、MySQL 基本管理 之修改登录密码

 mysqladmin -uroot -p"旧密码" password "新密码"    --注意语句格式
 -- 登陆MySQL
mysql -uroot -p

  3、数据库的操作

 -- 1 创建数据库
CREATE DATABASE chaoxuan(db_name) [CHARACTER SET GBK]; -- 2 查看数据库
SHOW DATABASES; -- 查看所有数据库
SHOW CREATE DATABASE chaoxuan(db_name); -- 查看指定数据库信息 -- 3 修改数据库
ALTER DATABASE chaoxuan(db_name) CHARACTER SET UTF8; -- 修改设置 -- 4 删除数据库
DROP DATABASE chaoxuan(db_name); -- 5 使用数据库
USE oldboy_test2(db_name); -- 使用数据库
SELECT DATABASE(); -- 查看当前的数据库

  4、数据表的操作

 -- 1 创建数据表
CREATE TABLE salary(
-> ID int primary key auto_increment,
-> NAME varchar(20),
-> TIME date,
-> JOB varchar(20),
-> SALARY double(5,2) unsigned,
-> RESUME text -- 最后一个字段不加逗号
-> ); /* 约束:
primary key (非空且唯一) :能够唯一区分出当前记录的字段称为主键!
unique
not null
auto_increment :用于主键字段,主键字段必须是数字类型
*/ -- 2 查看表结构
DESC salary;
/*
+--------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------------------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(20) | YES | | NULL | |
| TIME | date | YES | | NULL | |
| JOB | varchar(20) | YES | | NULL | |
| SALARY | double(5,2) unsigned | YES | | NULL | |
| RESUME | text | YES | | NULL | |
+--------+----------------------+------+-----+---------+----------------+
*/ -- 3 查看表结构
SHOW COLUMNS FROM salary; -- 4 查看当前数据库中的所有表
SHOW TABLES; -- 5 查看当前数据库建表语句
SHOW CREATE TABLE salary(db_name);
-- 1 增加列字段
ALTER TABLE salary ADD maxsalary double(5,2); -- 2 修改一列类型
ALTER TABLE salary MODIFY JOB int; -- 3 修改列名
ALTER TABLE salary CHANGE JOB JOBNB int; -- 4 删除一列
ALTER TABLE salary DROP maxsalary;
---- 删除多列,再加一列
ALTER TABLE salary DROP JOBNB,
-> ADD job int,
-> DROP TIME; -- 5 修改表名
RENAME TABLE salary TO lala; -- 6 修改表用的字符集
ALTER TABLE lala CHARACTER SET utf8;
-- 删除表格
DROP TABLE dachao;

  5、表记录的操作

/*
数据类型:
int 整型
varchar(20) 字符串
Text 大文本字符串
float(6,2) 浮点型,小数点后两位,一共6位有效数字最大:9999.99
其它:
auto_increment 自增 1、2、3……
*/

  

CREATE TABLE teacher(
id int PRIMARY KEY auto_increment,
gender BIT DEFAULT 1,
name VARCHAR(20) NOT NULL,
age int,
salary FLOAT(8,2) unsigned,
work_time DATE,
resume text
);

 
-- 插入表记录 insert

INSERT INTO teacher (gender,name,age,salary,work_time) VALUES (0,"egon",18,10000,"1990-12-12"),
(1,"yuanhao",78,2000,"1980-1-12"),
(0,"alex",998,666666,"2000-6-6"),
(0,"wusir",5,9999,"1212-8-8"); -- 修改表记录 update
WHERE (条件) -- 筛选条件 UPDATE teacher SET salary = 9999 WHERE id = 1; UPDATE teacher SET salary=salary+4444 WHERE name="alex"; -- 在alex的salary的基础上,再加4444。 -- 删除表记录
-- deletedelete只能用来删除一行记录
-- delete语句只能删除表中的内容,不能删除表本身,想要删除表,用drop
DELETE FROM table_name 字句; DELETE FROM teacher WHERE name="wusir";
TRUNCATE TABLE table_name; -- 可以删除表中所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在事务中恢复。 -- ***查询表记录***
/*
查询语法 SELECT di,name... FROM teacher
WHERE 条件
GROUP BY fielg_name
HAVING 筛选
ORDER BY field_name
LIMIT 限制条数
*/ CREATE TABLE shop_menu(
id int PRIMARY KEY auto_increment,
p_name VARCHAR (20),
p_price FLOAT(6,2),
p_date DATE,
p_number INT unsigned,
class VARCHAR (20)
) CHARACTER SET utf8; INSERT INTO shop_menu (p_name,p_price,p_date,p_number,class) VALUES ("苹果",5,20170725,100,"水果"),
("香蕉",10,20170725,500,"水果"),
("床单",100,20170725,10,"家具"),
("西瓜",2,20170720,30,"水果"),
("冰箱",1000,20170725,1000,"电器"),
("沙发",800,20170720,20,"家具"),
("电饭煲",200,20170725,100,"电器"); /*
+----+-----------+---------+------------+----------+--------+
| id | p_name | p_price | p_date | p_number | class |
+----+-----------+---------+------------+----------+--------+
| 1 | 苹果 | 5.00 | 2017-07-25 | 100 | 水果 |
| 2 | 香蕉 | 10.00 | 2017-07-25 | 500 | 水果 |
| 3 | 床单 | 100.00 | 2017-07-25 | 10 | 家具 |
| 4 | 西瓜 | 2.00 | 2017-07-20 | 30 | 水果 |
| 5 | 冰箱 | 1000.00 | 2017-07-25 | 1000 | 电器 |
| 6 | 沙发 | 800.00 | 2017-07-20 | 20 | 家具 |
| 7 | 电饭煲 | 200.00 | 2017-07-25 | 100 | 电器 |
+----+-----------+---------+------------+----------+--------+
*/ SELECT id,p_name,p_price,p_number FROM shop_menu;
/*
+----+-----------+---------+----------+
| id | p_name | p_price | p_number |
+----+-----------+---------+----------+
| 1 | 苹果 | 5.00 | 100 |
| 2 | 香蕉 | 10.00 | 500 |
| 3 | 床单 | 100.00 | 10 |
| 4 | 西瓜 | 2.00 | 30 |
| 5 | 冰箱 | 1000.00 | 1000 |
| 6 | 沙发 | 800.00 | 20 |
| 7 | 电饭煲 | 200.00 | 100 |
+----+-----------+---------+----------+
*/ SELECT id,p_name 姓名,p_price 价格,p_number 数量 FROM shop_menu; -- 临时指定字段的名字,只在显示时变化
/*
+----+-----------+---------+--------+
| id | 姓名 | 价格 | 数量 |
+----+-----------+---------+--------+
| 1 | 苹果 | 5.00 | 100 |
| 2 | 香蕉 | 10.00 | 500 |
| 3 | 床单 | 100.00 | 10 |
| 4 | 西瓜 | 2.00 | 30 |
| 5 | 冰箱 | 1000.00 | 1000 |
| 6 | 沙发 | 800.00 | 20 |
| 7 | 电饭煲 | 200.00 | 100 |
+----+-----------+---------+--------+
*/ /* -- WHERE
> < >= <= !=
between 1 and 100 -- 在1和100之间,含1,100!!!
in(5,10,100) -- 含值5,10,100的
like "a%" -- 开头含a "a___" -- 开头含a且后面有3个字符串
and or not
*/ SELECT * FROM shop_menu WHERE p_price BETWEEN 1 AND 100;
/*
+----+--------+---------+------------+----------+--------+
| id | p_name | p_price | p_date | p_number | class |
+----+--------+---------+------------+----------+--------+
| 1 | 苹果 | 5.00 | 2017-07-25 | 100 | 水果 |
| 2 | 香蕉 | 10.00 | 2017-07-25 | 500 | 水果 |
| 3 | 床单 | 100.00 | 2017-07-25 | 10 | 家具 |
| 4 | 西瓜 | 2.00 | 2017-07-20 | 30 | 水果 |
+----+--------+---------+------------+----------+--------+
*/ SELECT * FROM shop_menu WHERE p_price IN(5,10,100);
/*
+----+--------+---------+------------+----------+--------+
| id | p_name | p_price | p_date | p_number | class |
+----+--------+---------+------------+----------+--------+
| 1 | 苹果 | 5.00 | 2017-07-25 | 100 | 水果 |
| 2 | 香蕉 | 10.00 | 2017-07-25 | 500 | 水果 |
| 3 | 床单 | 100.00 | 2017-07-25 | 10 | 家具 |
+----+--------+---------+------------+----------+--------+
*/ SELECT * FROM shop_menu WHERE p_name LIKE "苹%";
/*
+----+--------+---------+------------+----------+--------+
| id | p_name | p_price | p_date | p_number | class |
+----+--------+---------+------------+----------+--------+
| 1 | 苹果 | 5.00 | 2017-07-25 | 100 | 水果 |
+----+--------+---------+------------+----------+--------+
*/ SELECT * FROM shop_menu WHERE p_name LIKE "苹_";
/*
+----+--------+---------+------------+----------+--------+
| id | p_name | p_price | p_date | p_number | class |
+----+--------+---------+------------+----------+--------+
| 1 | 苹果 | 5.00 | 2017-07-25 | 100 | 水果 |
+----+--------+---------+------------+----------+--------+
*/ -- order by 字段名称 排序查询
-- 默认从小到大(ASC)从大到小排序
SELECT * FROM shop_menu ORDER BY p_price;
-- 后面加(DESC)默认从大到小排序
SELECT * FROM shop_menu ORDER BY p_price DESC;
/*
+----+-----------+---------+------------+----------+--------+
| id | p_name | p_price | p_date | p_number | class |
+----+-----------+---------+------------+----------+--------+
| 5 | 冰箱 | 1000.00 | 2017-07-25 | 1000 | 电器 |
| 6 | 沙发 | 800.00 | 2017-07-20 | 20 | 家具 |
| 7 | 电饭煲 | 200.00 | 2017-07-25 | 100 | 电器 |
| 3 | 床单 | 100.00 | 2017-07-25 | 10 | 家具 |
| 2 | 香蕉 | 10.00 | 2017-07-25 | 500 | 水果 |
| 1 | 苹果 | 5.00 | 2017-07-25 | 100 | 水果 |
| 4 | 西瓜 | 2.00 | 2017-07-20 | 30 | 水果 |
+----+-----------+---------+------------+----------+--------+
*/ -- 分组查询 ***group by*** SELECT * FROM shop_menu GROUP BY class;
/*
+----+--------+---------+------------+----------+--------+
| id | p_name | p_price | p_date | p_number | class |
+----+--------+---------+------------+----------+--------+
| 3 | 床单 | 100.00 | 2017-07-25 | 10 | 家具 |
| 1 | 苹果 | 5.00 | 2017-07-25 | 100 | 水果 |
| 5 | 冰箱 | 1000.00 | 2017-07-25 | 1000 | 电器 |
+----+--------+---------+------------+----------+--------+
*/ SELECT class,SUM(p_price) FROM shop_menu GROUP BY class; -- 按类分组后,再显示每组价格总和
/*
+--------+--------------+
| class | SUM(p_price) |
+--------+--------------+
| 家具 | 900.00 |
| 水果 | 17.00 |
| 电器 | 1200.00 |
+--------+--------------+
*/ SELECT class,SUM(p_price) FROM shop_menu GROUP BY class HAVING SUM(p_price)>100; -- 按类分组后,再显示每组价格总和大于100
/*
+--------+--------------+
| class | SUM(p_price) |
+--------+--------------+
| 家具 | 900.00 |
| 电器 | 1200.00 |
+--------+--------------+
*/ -- 聚合函数就是应用在group by --<1> 统计表中所有记录 -- COUNT(列名):统计行的个数
-- 统计一共有多少行,再用count包上
SELECT COUNT(*) FROM shop_menu;
-- 统计价格大于100的商品有多少个?
SELECT COUNT(p_price) FROM shop_menu WHERE p_price>100;
-- 统计总价格大于10000的商品有多少?
SELECT COUNT(p_name) FROM shop_menu WHERE (ifnull(p_price,0)*ifnull(p_number,0))>10000;
-- 注意:count(*)统计所有行; count(字段)不统计null值. ifnull(p_price,0) 如果输入为空,则为0. -- SUM(列名):统计满足条件的行的内容和
-- 统计所有水果p_price的总价?先查出所有的水果,再用sum包上每种水果总价
SELECT SUM(p_price*p_number) AS 总价格 FROM shop_menu WHERE class="水果";
SELECT SUM(p_price*p_number) AS 总价格 FROM shop_menu GROUP BY class HAVING class="水果";
-- 注意:sum仅对数值起作用,否则会报错。 -- AVG(列名):
-- 求平均价格?先查出所有的价格,然后用avg包上。
SELECT AVG(p_price) FROM shop_menu; -- Max、Min
-- 求单价最高和最低(数值范围在统计中特别有用)
SELECT MAX(p_price) AS 单价最高 FROM shop_menu;
SELECT Min(p_number) AS 数量最少 FROM shop_menu; -- 注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!
-- -----ifnull(JS,0) -- having 配合使用 /*
having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;
<2>使用where语句的地方都可以用having进行替换
<3>having中可以用聚合函数,where中就不行。
*/ -- limit 表记录限制 SELECT * FROM shop_menu LIMIT 2,3; -- 限制显示id2后三行的内容
/*
+----+--------+---------+------------+----------+--------+
| id | p_name | p_price | p_date | p_number | class |
+----+--------+---------+------------+----------+--------+
| 3 | 床单 | 100.00 | 2017-07-25 | 10 | 家具 |
| 4 | 西瓜 | 2.00 | 2017-07-20 | 30 | 水果 |
| 5 | 冰箱 | 1000.00 | 2017-07-25 | 1000 | 电器 |
+----+--------+---------+------------+----------+--------+
*/ -- 正则表达式 REGEXP SELECT * FROM shop_menu WHERE p_name REGEXP "^床";
/*
+----+--------+---------+------------+----------+--------+
| id | p_name | p_price | p_date | p_number | class |
+----+--------+---------+------------+----------+--------+
| 3 | 床单 | 100.00 | 2017-07-25 | 10 | 家具 |
+----+--------+---------+------------+----------+--------+
*/

  6、出现的问题

--  出现的问题 

select * from shop_menu group by class;

/*
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and
表达式select list 不在group by分句中
contains nonaggregated column 'day_25.shop_menu.id' which is not functionally dependent on columns
in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
*/ SELECT @@sql_mode; -- 查询,并去掉ONLY_FULL_GROUP_BY
SET @@sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

Day 1 MySQL数据库的更多相关文章

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

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

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

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

  3. MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  4. 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库

    说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...

  5. CentOS下mysql数据库常用命令总结

    mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆 ...

  6. [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...

  7. mysql数据库主从同步

    环境: Mater:   CentOS7.1  5.5.52-MariaDB  192.168.108.133 Slave:   CentOS7.1  5.5.52-MariaDB  192.168. ...

  8. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  9. mysql数据库开发常见问题及优化

    mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...

  10. 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库

    昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...

随机推荐

  1. Python学习笔记(七)加密加盐

    MD5加密和加盐 Python的MD5加密 Python的hashlib模块的MD5加密,是比较简单一种加密,md5函数必须传入编译后的结果,否则会报错: Traceback (most recent ...

  2. A1012 The Best Rank (25)(25 分)

    A1012 The Best Rank (25)(25 分) To evaluate the performance of our first year CS majored students, we ...

  3. 图学java基础篇之集合工具

    两个工具类 java.utils下又两个集合相关_(准确来说其中一个是数组的)_的工具类:Arrays和Collections,其中提供了很多针对集合的操作,其中涵盖了一下几个方面: 拷贝.填充.反转 ...

  4. c++ primer plus 第6版 部分三 9章 - 章

    c++ primer plus 第6版                                               部分三 9章 - 章 第9章   内存模型和名称空间 1.单独编译 ...

  5. CSU-2019 Fleecing the Raffle

    CSU-2019 Fleecing the Raffle Description A tremendously exciting raffle is being held, with some tre ...

  6. Leetcode 599.两个列表的最小索引总和

    两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答 ...

  7. html基础标签之head和body标签

    什么是标签标签是由一对尖括号包裹的单词构成的,也有一些单闭和标签,仅仅就自己出现就可以了,例如meta,link 1. 这里介绍了几种html语言里常见的head标签 <!DOCTYPE htm ...

  8. 删除 node 【笔记】

    sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receip ...

  9. rsync 使用小记

    工作中遇到了有关rsync使用的问题,在这里记录下供有同样需求的人参考一下 先说下环境 服务端配置 pid file = /rsyncdata/rsyncd.pid port = 873 addres ...

  10. openssl-1.0.1c交叉编译动态库(转)

    linux编译相关(13)  版权声明:本文为博主原创文章,未经博主允许不得转载. #交叉编译openssl ------直接修改Makefile新加这一行:CROSS_COMPILE= arm-un ...