使用MySQL数据库,首先安装MySQL数据库,本文所有SQL脚本在MySQL上测试和执行。

安装Mysql服务器;
安装Mysql workbench客户端,可以以图形化界面管理mysql;
安装phpMyadmin客户端,可以通过bs方式图形化管理Mysql;

1. Mysql服务器操作


windows下为例,win+r 进入cmd界面

启动服务器:net start mysql
停止服务器:net stop mysql
连接服务器:mysql -h localhost -u root -p password

2. Database基本操作


create database db_bookstore; //创建数据库:
use database db_bookstore; //使用数据库:
drop database db_bookstore; //删除数据库:

3. DDL 表操作


(1)创建表

creat table table_name(id int not null auto_increment primary key,
name char(50)
) if not exists;

(2)查看表结构

show columns from tb_name from db_name;
desc table_name;

(3)删除表:

drop table tb_name if exists;

(4)修改表: alter tb_name alter/modify/change [column] ...
ALTER COLUMN:设置或删除列的默认值(操作速度非常快)
例子:

alter table film alter column rental_duration set default 5;
alter table film alter column rental_duration drop default;

CHANGE COLUMN:列的重命名、列类型的变更以及列位置的移动
例子:

ALTER TABLE MyTable CHANGE COLUMN foo bar VARCHAR(32) NOT NULL FIRST;
ALTER TABLE MyTable CHANGE COLUMN foo bar VARCHAR(32) NOT NULL AFTER baz;

MODIFY COLUMN:除了不能给列重命名之外,他干的活和CHANGE COLUMN是一样的
例子:

ALTER TABLE MyTable MODIFY COLUMN foo VARCHAR(32) NOT NULL AFTER baz;

(5)重命名表

ALTER tb_name RENAME [AS] new_tb_name;
RENAME TABLE tb_name TO new_tb_name;

注意:[]内的是可以选择的,包括change,modify,alter后满的COLUMN

4. DML语言:数据操纵语言

(1)插入

INSERT INTO tb_name(field1,...) VALUES(value1,...);

(2)修改

UPDATE tb_name SET f1=v1,f2=v2...;

(3)删除

DELETE FROM tb_name WHERE condition

5.DQL:数据查询,SELECT专题


SELECT f1,f2,... FROM tb_name
WHERE primary_constraint
GROUP BY grouping_columns
ORDER BY column_name DESC/ASC
HAVING secdonary_constraint
LIMIT count;

关键语法:

SELECT *
SELECT DISTINCT *
SELECT TOP count *

(1)单表查询

SELECT * FROM tb_name; // 所有字段
SELECT id,name FROM tb_name; // 指定字段
SELECT * FROM tb_name WHERE id<5 // 查询符合条件的字段

(2)IN, NOT IN, BETWEEN AND (这是指明字段的范围,后面还有一个IN用于子查询)

SELECT * FROM tb_name WHERE id IN(1,2,3);
SELECT * FROM tb_name WHERE id NOT IN(1,2,3);
SELECT * FROM tb_name WHERE id BETWEEN 1 AND 5;

(3)使用LIKE + 通配符

%:匹配一个或者多个字符
_: 匹配任意单个字符

SELECT * FROM tb_name WHERE user LIKE 'm%r_';// 以m开头,中间若干个字符,r后面一个字符结尾

(4)空值查询IS NULL,IS NOT NULL

SELECT * FROM tb_name WHERE row IS NULL;
SELECT * FROM tb_name WHERE row IS NOT NULL;

(5)多条件查询AND, OR

SELECT * FROM tb_name WHERE id=1 AND name='Jack';
SELECT * FROM tb_name WHERE id=1 OR name='Jack';

(6)去掉重复行

SELECT DISTINCT * FROM tb_name;

(7)使用ORDER BY [ASC/DESC]

SELECT * FROM tb_name ORDER BY id DESC
SELECT * FROM tb_name ORDER BY id ASC

(8)GROUP BY 子句
注意:没有出现在GROUP BY子句中的字段,不能出现在SELECT 子句中,聚合函数除外
如果SELECT 子句出现GROUP BY中没有出现的字段,则结果只显示每一组的一条记录;
一般形式为:

SELECT field,func_name(field) FROM tb_name GROUP BY field;

(9)多字段分组: 2个字段的笛卡尔积

SELECT field1,field2 FROM tb_name GROUP BY field1,field2;

(10)LIMIT限制结果集

SELECT * FROM db_name WHERE id<5 LIMIT 3; // 显示结果的3行
SELECT * FROM db_name WHERE id<5 LIMIT 5,10; // 从第5行开始,的10行

(11)聚合函数:MIN(),AGV,MAX,COUNT
聚合函数的特点是根据一组数据计算出一个值,聚合函数只能对非NULL值进行计算,NULL值被忽略;

(12)连接查询:

理解:就是有至少2张表,查询结果是两张表满足某种条件的拼接;
        不带查询条件,则是2张表的笛卡尔积;

①内连接查询,最常见的是等值连接

SELECT * FROM tb_left,tb_right WHERE tb_left.id=tb_right.id;
SELECT * FROM tb_left INNER JOIN tb_right WHERE tb_left.id=tb_right.id;

②外连接查询:
左外连接: 内连接结果,还包含不符合条件的左表数据,右表相应列加NULL

SELECT * FROM tb_left LEFT [OUTER] JOIN tb_right WHERE tb_left.id=tb_right.id;

右外连接:

SELECT * FROM tb_left RIGHT [OUTER] JOIN tb_right WHERE tb_left.id=tb_right.id;

全外连接:

SELECT * FROM tb_left FULL OUTER JOIN tb_right WHERE tb_left.id=tb_right.id;

(13)子查询:

①IN

SELECT * FROM tb_name WHERE id IN(SELECT id FROM tb_2);

②ANY

SELECT * FROM tb_name WHERE id<ANY(SELECT id FROM tb_2);

③ALL

SELECT * FROM tb_name WHERE id<ALL(SELECT id FROM tb_2);

④EXISTS 子查询返回一个bool值

SELECT * FROM tb_1 WHERE row>=90 AND EXISTS(SELECT * FROM tb_2 WHERE score='优秀');
// 如果有score为优秀的记录,则查询 row>=90的记录

⑤关系运算,子查询返回唯一值

SELECT * FROM tb_name WHERE id >(SELECT id FROM tb_2 WHERE id=1);

注:子查询一般都是一个单列列表,SELECT list FROM tb_name; list为单列列表
  使用EXISTS时候除外;
  使用关系运算符是子查询返回唯一值;

(14)合并查询结果

UNION: 合并查询结果,除去相同的行
UNION ALL : 合并查询结果,简单的把两个集合的元素混合

SELECT id,name UNION SELECT id,author; // 正确
SELECT id,name UNION SELECT id; // 错误,字段数目不同,无法UNION

注意:前提条件是,左边和右边的字段列表的字段数必须相同

6. Mysql函数


6.1 数学函数

(1)ABS(X) 取绝对值

SELECT ABS(-1); // 结果为1

(2)取整函数

CEIL(); // 向上取整
FLOOR(); // 向下取整

(3)随机数生成器

RAND(); // 0-1 随机数
RAND(X); // 产生0-1随机数,x相同时,随机数相同

(4)符号检测器

SIGN(X); // 返回-1,0,1作为参数的符号

(5)圆周率

SIGN(X); // 返回-1,0,1作为参数的符号

(6)小数位截断函数

TRUNCATE(X,Y) // 保留x后y位小数

(7)圆整(向最近的整数靠近)

ROUND(X) // 返回离X最近的整数
ROUND(X,Y) // 返回x,后面保留y位小数,截断时四舍五入
// 例如ROUND(3.1415,3)=3.142

(8)平方、开方

POW(X,Y) // x的y次方
SQRT(X); // 对x开平方
MOD(X,Y) // 求余数

(9)指数对数

EXP(X); // e的x次方
LOG(X);
LOG10(X);

(10)弧度角度转换

DEGREES(radians) // 弧度---角度
RADIANS(degree) // 度数---弧度

(11)三角函数

SIN(X); // x是弧度
ASIN(X);
COS(X);
ACOS(X);
TAN(X);
ATAN(X);
COT(X);

6.2 字符串函数


(1)长度

CHAR_LENGTH(str);

(2)转换大小写

UPPER(str);UCASE(str);
LOWER(str);LCASE(str);

(3)修剪函数(针对前导、结尾空格)

LTRIM(s);RTRIM(s);TRIM(s);//删除引导空格;结尾空格;引导和结尾空格
TRIM(s1 from s_src); //删除s2开始和结尾处的s1

(4)替换、子串、反转

REPLACE(s,s1,s2); //用s2替换s中的s1
SUBSTRING(s,n,len); //s处n开始长度为len的字符串
LEFT(s,n),RIGHT(s,n) //返回左边或者右边长度为n的字符串
REVERSE(s); //字符串倒序

更多请参考:PHP 学习路线图《MySQL快速入门》

6.3 日期和时间函数---------DATE
        |----------TIME


(1)日期、时间

CURRENT_DATE(); // 2014-08-07
CURRENT_TIME(); // 10:30:30

(2)日期和时间(时间戳)

NOW(); // 2014-08-07 10:30:30
CURRENT_TIMESTAMP();// 2014-08-07 10:30:30 LOCALTIME(); // 2014-08-07 10:30:30
LOCALTIMESTAMP(); // 2014-08-07 10:30:30
SYSDATE(); // 2014-08-07 10:30:30

(3)以秒形式的时间戳

UNIX_TIMESTAMP(); // 当前UNIX时间戳
UNIX_TIMESTAMP(d);
FROM_UNIXTIME(d);

(4)年月日、时分秒

YEAR(d);
MONTH(d);
DAY(d);
HOUR(t);
MINUTE(t);
SECOND(t);

(5)工具函数

DATEDIFF(d1,d2) // d1-d2 的天数,d1是最近的日期,d2是早些的日期
ADDDATE(d,n);
SUBDATE(d,n);

更多请参考:PHP 学习路线图《MySQL快速入门》

6.4 条件判断函数


6.5 系统信息函数


(1)版本号、连接数

VERSION(); // 获取版本
CONNECTION_ID(); // 获取连接数

(2)当前数据库名

DATABASE();SCHEMA(); // 当前数据库

(3)当前用户

USER();SYSTEM_USER();SESSON_USER(); // 当前用户
CURRENT_USER();

(4)字符集

CHARSET();

(5)最后插入的ID

LAST_INSERT_ID();

6.6 加密函数


MD5(str); // 普通数据加密
PASSWORD(s); // 不可逆加密,对用户名加密 ENCODE(str_dst,pass_str); // 用pass_str加密str_dst,返回二进制数,用blob类型存储
DECODE(crypt_str,psss_str);// 用pass_str解密crpyt_str,加密和解密用的pass_str相同

MySQL学习之路(1):SQL脚本语言的更多相关文章

  1. MySQL学习之路(一)——初涉MySQL。

    MySQL学习之路(一) 1.1MySQL的概述 MySQL由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一个开源的关系型数据库管理系统. MySQL分为社区版和企业版. 1 ...

  2. MySql 学习之路-高级1

    Mysql自学之路-高级1 目录: 1.CREATE DATABASE 创建数据库 2.CREATE TABLE 创建数据表 3.INSERT INTO SELECT 把一个表中的数据拷贝到另一个表中 ...

  3. MySql 学习之路-基础

    Mysql 自学之路 本文包含基础部分与高级部分 一.基础 数据库操作 Show databases:显示所有的数据库 Show tables: 显示所有的数据库表 Use databasename: ...

  4. jdbc在mysql下一次执行多条sql脚本

    默认连接mysql的时候一次只能执行一条sql.要批量执行sql需要在jdbcUrl中增加“allowMultiQueries=true”参数,完整jdbcUrl如下:  jdbc:mysql://l ...

  5. MySQL命令行下执行.sql脚本详解

    本文主要介绍一个在MySQL命令行下执行脚本文件的例子,通过这个例子让我们来了解一下在命令行下MySQL是怎样执行脚本的吧.现在我们开始介绍这一过程. 1.首先编写sql脚本,保存为的:book.sq ...

  6. mysql下命令行执行sql脚本

    1. 登录mysql mysql -uroot -p 2. 执行脚本 mysql>use dbname; mysql>source /home/db/xx.sql

  7. InstallShield在MySQL和Oracle中执行SQL脚本的方法InstallShield在MySQL和Oracle中执行SQL脚本的方法

    简述 InstallShield已经内建了对MySQL和Oracle的支持.但是这个功能是通过ODBC实现的,它对SQL脚本的格式要求非常严格,因此已经通过官方客户端测试的脚本在IS中执行时往往就会报 ...

  8. MySQL学习之路1-Mac下启动连接MySQL服务

    MySQL简介 (MySQL是目前最流行的关系型数据库管理系统,现属于Oracle公司.) MySQL主要特点: 支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64 ...

  9. CUBRID学习笔记 28 执行sql脚本文件

    一下命令在csql下执行. insert_commands.sql为sql脚本文件 ;CL ;READ insert_commands.sql ;RU 第一行的cl 清空命令缓存,等同clear第二行 ...

随机推荐

  1. JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式!

    为什么单线程是一个限制? 在发布的第一篇文章中,思考了这样一个问题:当调用堆栈中有函数调用需要花费大量时间来处理时会发生什么? 例如,假设在浏览器中运行一个复杂的图像转换算法. 当调用堆栈有函数要执行 ...

  2. WebGL简易教程(六):第一个三维示例(使用模型视图投影变换)

    目录 1. 概述 2. 示例:绘制多个三角形 2.1. Triangle_MVPMatrix.html 2.2. Triangle_MVPMatrix.js 2.2.1. 数据加入Z值 2.2.2. ...

  3. 【产品】PM常用的流程图

    一.流程图分类 UML有很多种,大体可以分类两类:行为型的图和结构型的图.平时工作中的流程图,只要能把事情清晰的表明,用何种流程图表现形式,其实都无所谓. 但是,作为一名产品经理,共有哪些种类的流程图 ...

  4. 2019年最新超级有趣好玩的html+css网页布局课程,前端入门基础,html5+css3零基础入门课程-黑马程序员pink老师精心录制

    大家好,我是黑马程序员pink老师!! 本次视频是前端零基础入门的课程,pink老师采取有趣好玩讲法,带你快乐的学习枯燥的html+css知识,学完之后让你能快速布局pc端页面.代码也可以讲的好玩有趣 ...

  5. MySQL InnoDB如何保证事务特性

    如果有人问你"数据库事务有哪些特性"?你可能会很快回答出原子性.一致性.隔离性.持久性即ACID特性.那么你知道InnoDB如何保证这些事务特性的吗?如果知道的话这篇文章就可以直接 ...

  6. Python 爬虫入门实战

    1. 前言 首先自我介绍一下,我是一个做 Java 的开发人员,从今年下半年开始,一直在各大技术博客网站发表自己的一些技术文章,差不多有几个月了,之前在 cnblog 博客园加了网站统计代码,看到每天 ...

  7. Step ‘Publish JUnit test result report’ failed: No test report files were found问题解决

    1. 查看配置 2.路径设置错误,修改路径和path一致即可 修改后的测试报告路径 重新构建成功

  8. 前端Vue知识小白

    感觉是已好久没写博文了.今日难得有时间,便写一篇文章.此文章是关于前端知识的,我本身是后端,因工作或其他需要,便学习了前端Vue.此文章是在菜鸟教程上学习的.那么下面进入正文! 首先,Vue.js是一 ...

  9. 你也可以写个服务器 - C# Socket学习2

    前言 这里说的服务器是Web服务器,是类似IIS.Tomcat之类的,用来响应浏览器请求的服务. Socket模拟浏览器的Url Get请求 首先浏览器的请求是HTTP协议.我们上一篇说过,HTTP是 ...

  10. MVC ValidationAttribute 验证一个字段必须大于另一个字段

    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter)] pu ...