mysql中from days,MySQL(day_15)

数据库服务器(关系型数据库管理系统)

RDBMS  =  管理员(manager) + 仓库(database)

database = N个table

table:-> 表结构:定义表的列名和列类型!

-> 标记录:一行一行的记录!

1. 什么是DBMS:数据的仓库

> 方便查询

> 可存储的数据量大

> 保证数据的完整、一致

> 安全可靠

2. DBMS的发展:今天主流数据库为关系型数据库管理系统(RDBMS 使用表格存储数据)

3. 常见DBMS:Orcale、MySQL、SQL Server、 DB2 、Sybase

4. DBMS = 管理程序 + 多个数据库(DB)

5. DB = 多个table(不只是table,但这里先不介绍其他组成部分)

6. table的结构(即表结构)和 table 的记录(即表记录)的区别!

7. 应用程序与DBMS:应用程序使得DBMS来存储数据!

服务器操作

1) 开启服务器(必须保证mysql为windows服务):net start mysql

> 查看进程表中是否存在:mysqld.exe进程(存在)

2) 关闭服务器(必须保证mysql为windows服务):net stop mysql

> 查看进程表中是否存在:mysqld.exe进程(不存在)

客户端操作(DOS命令)

1. 登录服务器:mysql  -uroot  -p123456  -hlocalhost

> -u:后面跟随用户名

> -p:后面跟随密码

> -h:后面跟随IP

2. 退出服务器:exit/quit

SQL

1. 什么是SQL:结构化查询语言(Structured  Query  Language)

2. SQL的作用:客户端使用SQL来操作服务器

> 启动mysql.exe,连接服务器后,就可以使用 sql 来操作服务器了

> 将来会使用 Java 程序连接服务器,然后使用 sql 来操作服务器

3. SQL标准(例如SQL99)

> 由国际标准组织(ISO)制定的,对DBMS的统一操作方法

4. SQL方言

> 某种DBMS不只支持SQL标准,而且还会有一些自己独有的语言

5. SQL语法

> SQL语句可以在单行或多行书写,以分号结尾

> 可以利用空格和缩进来增强语句的可读性

> 不区分大小写,关键字用大写

6. SQL语句分类(★★★)

> DDL:数据库或表的结构操作

> DML;对表的记录进行更新(增、删、改)

> DQL:对表的记录的查询

> DCL:对用户的创建,及授权!

DDL

1)数据库

* 查询当前所有数据库    ——>  SHOW  DATABASES;

* 切换(选择要操作的)数据库    ——>  USE  数据库名;

* 创建数据库    ——>  CREATE  DATABASE  [IF  NOT  EXISTS]  数据库名 [CHARSET = UTF8];

* 删除数据库    ——>  DROP  DATABASE  [IF  EXISTS] 数据库名;

* 修改数据库编码    ——>  ALTER  DATARASE  数据库名  CHARACTER  SET  utf8;

2)数据类型(列表型)

* int:整型

* double:浮点型 例如double(5,2)表示最多5位,其中小数两位,最大为999.99

* decimal:浮点型 该类型不会出现精度缺失问题

* char:固定长度字符串类型 -> char(255)

当数据长度不足指定长度,补足到指定长度

* varchar:可变长度字符串类型 -> varchar(65535)

* text(clob):字符串类型

* blob:字节类型

* date:日期类型,格式为:yyyy-MM-dd

* time:时间类型,格式为:hh:mm:ss

* timestamp:时间戳类型

3)表

* CREATE  TABLE  表名(

列名  列类型,

列名  列类型,

....);

* 查看当前数据库中所有表名称:SHOW  TABLES;

* 查看指定表的创建语句:SHOW  CREATE  TABLE  表名(了解);

* 查看表结构:DESC  表名;

* 删除表:DROP  TABLE  表名;

* 修改表:前缀 —— ALTER  TABLE  表名

>  修改之添加列:

ALTER  TABLE 表名  ADD {

列名  列类型,

...

}

> 修改之修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在的数据)

ALTER  TABLE  表名  MODIFY  列名  列类型;

> 修改之修改列名:ALTER  TABLE  表名  CHANGE  原创名  新列名  列类型;

> 修改之删除列:ALTER  TABLE  表名  DROP  列名;

> 修改之修改表名称:ALTER  TABLE  原表名 RENAME  TO 新表名;

DML:数据库操作语言

1)插入数据

* INSERT  INTO  表名(列名1,列名2,...) VALUES(列值1,列值2....);

>  在表名后给出要插入的列名,其他没有指定的列等同与插入null值

> 在VALUES 后给出列值,值的顺序和个数必须与前面指定的列对应

* INSERT INTO 表名 VALUES(列值1,列值2);

> 没有给出要插入的类,那么表示插入所有列

> 值的个数必须是该表列的个数

> 值的顺序,必须与表创建时给出的列的顺序相同

2)修改数据

* UPDATE 表名  SET  列名1 = 列值1,列名2 = 列值2, ...[WHERE 条件]

* 条件(条件可选的):

>  条件必须是一个 boolean 类型的值或者表达式。

> 运算符:= != <> > < <= >= BETWEEN...AND IN(...) IS NULL NOT OR AND

3)删除数据

* DELETE FROM 表名 [WHERE 条件];

DCL(理解即可)

* 一个项目创建一个用户!一个项目对应的数据库只有一个!

* 这个用户只能对这个数据库有权限,其他数据库你就操作不了!

1) 创建用户

* CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';

> 用户只能在指定的IP地址上登录

* CREATE USER 用户名@'%' IDENTIFIED BY '密码';

> 用户可以在任意IP地址上登录

2)给用户授权

* GRANT 权限1,....,权限n ON 数据库.* TO 用户名@IP地址;

> 权限、用户、数据库

> 给用户分派在指定的数据库上的指定的权限

> 例如:GRANT CREATE,...,SELECT ON mydb1.* TO user1@localhost;

* 给用户分派在mydb1数据库上的CREATE,...,DELETE,SELECT权限

* GRANT ALL ON 数据库.* TO 用户名@IP地址;

> 给用户分派指定数据库上的所有权限

3)撤销授权

* REVOKE 权限1,....,权限n ON 数据库.* FROM 用户名@IP地址;

> 撤销指定用户在指定数据库上的操作权限

4)查看权限

* SHOW GRANTS FOR 用户名@IP地址;

> 查看指定用户的权限

5)删除用户

* DROP USER 用户名@IP地址;

DQL(数据查询语言):

1)查询所有列:

* SELECT * FROM 表名    --> 其中 * 表示查询所有列

2)查询指定列

* SELECT 列1,列2,... FROM 表名;

3)列运算

I.数量类型的列可以做加、减、乘、除运算

> SELECT 列元素*1.5 FROM 表名;

--> 如果列元素非数字类型,则值为0;若为NULL,无论是什么运算结果仍为null

II.字符串类型可以做连接

> SELECT CONCAT(列元素1, 列元素2) FROM 表名;

--> 列元素1和列元素2均为字符串或者字符类型

III.转换null值

> SELECT IFNULL(列元素, 0) + 1000 FROM 表名;

--> IFNULL(列元素, 0) 如果该列元素为null值,则当成0进行计算

IV.给列起别名

> SELECT 列元素1 as job, 列元素2.... FORM 表名;

--> 这里的as可以省略,其中job叫做列元素1的别名

4)条件查询

与前面介绍的UPDATE的DELETE语句一样,SELECT语句也可以使用WHERE子句来控制记录。

* SELECT 列元素1,列元素2... FROM 表名 WHERE 条件语句;

5)模糊查询

该查询有利于对数据名称不确定情况下的查询

* SELECT * FROM 表名 WHERE name like '张_'      查询名字两个字,且姓张的数据

* SELECT * FROM 表名 WHERE name like '_ _ _'    查询名字由三个字组成的数据

--> 模糊查询需要使用到运算符: like  ,其中'_' 匹配一个字符 而'%'匹配0-n个字符!!!

* SELECT * FROM 表名 WHERE name like '张%'      查询姓张的数据

* SELECT * FROM 表名 WHERE name like '%小%'      查询名字中带有小字的数据

* SELECT * FROM 表名 WHERE name like '%'        等同于没有设立条件,名字为null的无法查询到

6)排序

I. SELECT * FROM 表名 ORDER BY 列元素 ASC; 按列元素进行升序排列

II. SELECT * FROM 表名 ORDER BY 列元素 DESC; 按列元素进行降序排列

III. SELECT * FROM 表名 ORDER BY 列元素1 ASC, 列元素2 DESC;

--> 先按列元素1进行升序排列,若列元素1数据相同的,再按列元素2进行降序排序

7)聚合函数

I. COUNT

SELECT COUNT(*) FROM 表名;

--> 计算该表中所有列的记录的行数(如果某列的记录均为null,不计入)

II. MAX/MIN

SELECT MAX(列元素) FROM 表名;

--> 查询该列元素最大值

SELECT MIN(列元素) FROM 表名;

--> 查询该列元素最小值

III. SUM

SELECT SUM(列元素) FROM 表名;

--> 查询该列元素的总和

IV. AVG

SELECT AVG(列元素) FROM 表名;

--> 查询该列元素的平均值

8)分组查询

把记录使用某一列进行分组,然后查询组信息。

例如:查看所有部门的记录数

SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;

--> 使用deptno分组,查询部门编号和每个部门的记录数

SELECT job, MAX(SAL) FROM emp GROUP BY job;

--> 使用job分组,查询每种工作的最高工资

组条件

以部门分组,查询每组记录数。条件为记录数大于3

SELECT deptno, COUNT(*) FROM emp GROUP BY deptno HAVING COUNT(*) > 3;

9)limit 子句(方言)

LIMIT用来限定查询结果的起始行以及总行数

例如:查询起始行为第5行,一共查询3行记录

SELECT * FROM emp LIMIT 4, 3;

--> 其中4表示从第5行开始,其中3表示一共查询3行。

一页的记录数:10行, 查询第3页

SELECT * FROM emp LIMIT 20, 10;

--> (当前页-1) * 每页记录数

(3 - 1)*10 , 10

练习题:

db0611b34992

db0611b34992

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值