SQL教程
SQL快速参考手册
SQL数据类型

MySQL的安装

sudo apt-get install mysql-server-5.7

添加用户,新建数据库,用户授权,删除用户,修改密码

http://blog.csdn.net/adu198888/article/details/54092857
创建test用户,密码是1234。登录命令:mysql -u 用户名 -p 密码

mysql -u root -p
CREATE USER “test”@”localhost” IDENTIFIED BY “1234”; #本地登录
CREATE USER “test”@”%” IDENTIFIED BY “1234”; #远程登录
quit
mysql -u test -p #测试是否创建成功

删除账户及权限:

drop user 用户名@’%’;
drop user 用户名@ localhost;

启动mysql服务

sudo service mysqld start

在服务器启动服务后,可以在windows上使用MySQL workbench或者naivget软件远程连接。
mysql workbench 修改字体大小后需要重启。

1、SQL(Structured Query Language)简介

SQL 是用于访问和处理数据库的ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言。

注意:虽然 SQL 是一门 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。

然而,为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的命令(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)。

2、SQL语法

MySQL 非root用户创建database

mysql 用户无法直接通过create database创建数据库(access denied by 。。。),必须在root用户下先创建个数据库再通过授权语句把该database的权限给用户,grant all on user.* to user@host identified by password。

在root用户的数据库中有多个数据库,但是普通用户开始可能就只有一个test,需要给普通用户授权后,普通用户才能看得见授权后的数据库可见。

因此准备工作:为普通用户授权

  • a.授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”; 

  • b.登录MYSQL,这里以ROOT身份登录:

mysql -u root -p

  • c.为用户创建一个数据库(testDB):

create database testDB;
create database testDB default charset utf8 collate utf8_general_ci;

  • d.授权test用户拥有testDB数据库的所有权限:

grant all privileges on testDB.* to “test”@”localhost” identified by “1234”;
flush privileges; #刷新系统权限表

  • e.指定部分权限给用户:

grant select,update on testDB.* to “test”@”localhost” identified by “1234”;
flush privileges; #刷新系统权限表

  • f.授权test用户拥有所有数据库的某些权限:  

grant select,delete,update,create,drop on . to test@”%” identified by “1234”; #”%” 表示对所有非本地主机授权,不包括localhost

常用语句

show databases; 显示数据库
select database(); 显示当前路径
use 数据库名; 进入某个数据库
source sql文件地址; 从外部导入sql文件
set names utf8; 命令用于设置使用的字符集。
SELECT * FROM 表名; 读取数据表的信息。
SELECT column_name,column_name FROM table_name;

请记住:SQL 对大小写不敏感:SELECT 与 select 是相同的。
分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。

1
2
3
4
5
6
7
8
9
10
11
SELECT - 从数据库中提取数据
UPDATE - 更新数据库中的数据
DELETE - 从数据库中删除数据
INSERT INTO - 向数据库中插入新数据
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
  • SQL SELECT DISTINCT 语句
    在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。

DISTINCT 关键词用于返回唯一不同的值。

SELECT DISTINCT column_name,column_name FROM table_name;

  • SQL WHERE 子句
    WHERE 子句用于提取那些满足指定标准的记录。

SELECT column_name,column_name FROM table_name WHERE column_name operator value;

下面的运算符可以在 WHERE 子句中使用:

1
2
3
4
5
6
7
8
9
10
运算符 描述
= 等于
<> 不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值

逻辑运算的优先级:() not and or

特殊条件

  1. 空值判断: is null

Select * from emp where comm is null;
查询 emp 表中 comm 列中的空值。

  1. between and (在 之间的值)

Select * from emp where sal between 1500 and 3000;
查询 emp 表中 SAL 列中大于 1500 的小于 3000 的值。

注意:大于等于 1500 且小于等于 3000, 1500 为下限,3000 为上限,下限在前,上限在后,查询的范围包涵有上下限的值。

  1. In

Select * from emp where sal in (5000,3000,1500);
查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。

  1. like(模糊查询)

Select * from emp where ename like ‘M%’;
查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。

% 表示多个字值, 下划线表示一个字符;
M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
%M% : 表示查询包含M的所有内容。
%M
: 表示查询以M在倒数第二位的所有内容。

1
2
3
4
5
6
7
8
9
10
11
12
不带比较运算符的 WHERE 子句:

WHERE子句并不一定带比较运算符,当不带运算符时,会执行一个隐式转换。当0时转化为 false,当其他值是转化为true。例如:

SELECT studentNO FROM student WHERE 0
则会返回一个空集,因为每一行记录WHERE都返回false。

SELECT studentNO FROM student WHERE 1
或者

SELECT studentNO FROM student WHERE 'abc'
都将返回student表所有行记录的studentNO列。因为每一行记录WHERE都返回true。

文本字段 vs. 数值字段

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。

如果是数值字段,请不要使用引号。

  • SQL ORDER BY 关键字
    ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
    ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

SELECT column_name,column_name FROM table_name ORDER BY column_name,column_name ASC|DESC;

ORDER BY 多列的时候,先按照第一个column name排序,再按照第二个column name排序

  • INSERT INTO 语句可以有两种编写形式。

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO table_name
VALUES (value1,value2,value3,…);

第二种形式需要指定列名及被插入的值:

INSERT INTO table_name (column1,column2,column3,…)
VALUES (value1,value2,value3,…);

  • SQL UPDATE 语法

UPDATE table_name SET column1=value1,column2=value2,… WHERE some_column=some_value;

执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。

set sql_safe_updates=1; 表示开启该参数

  • SQL DELETE 语法

DELETE FROM table_name WHERE some_column=some_value;
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SQL关于删除的三个语句,DROP;TRUNCATE;DELETE的区别。

DROP:

DROP test;
删除表test,并释放空间,将test删除的一干二净。

TRUNCATE:

TRUNCATE test;
删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。

DELETE:

1、删除指定数据

删除表test中年龄等于30的且国家为US的数据

DELETE FROM test WHERE age=30 AND country='US';
2、删除整个表

仅删除表test内的所有内容,保留表的定义,不释放空间。

DELETE * FROM test; 或者 DELETE FROM test;