SQL基本语法

MySQL struggling 1441次浏览 1个评论
<code>
SQL介绍及mysql的安装

SQL同时也是数据库脚本文件的扩展名。

1、打开MySQL

sudo service mysql start #打开MySQL服务 mysql -u root #使用root用户登录

2、查看数据库

“show databases;”

3、连接数据库

use <数据库名>

4、查看表

“show tables;

创建数据库并插入数据

1、新建数据库

CREATEDATABASE mysql_shiyan;

2、连接数据库

“use <数据库名字>”

4、新建数据表

CREATETABLE 表的名字 ( 列名a 数据类型(数据长度), 列名b 数据类型(数据长度), 列名c 数据类型(数据长度) );

CREATETABLE employee (id int(10),name char(20),phone int(12));

mysql> create table employee -> ( -> name CHAR(20), -> num INT(12) -> ); Query OK, 0 rows affected (0.02 sec)

mysql> create table employee -> ( -> name CHAR(20), -> num INT(12) -> ); Query OK, 0 rows affected (0.02 sec)</code>

CHAR和VARCHAR的区别: CHAR的长度是固定的,而VARCHAR的长度是可以变化的,比如,存储字符串“abc”,对于CHAR (10),表示存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR(12)则只占用3个字节的长度,12只是最大值,当你存储的字符小于12时,按实际长度存储。

<code>
ENUM和SET的区别: ENUM类型的数据的值,必须是定义时枚举的值的其中之一,即单选,而SET类型的值则可以多选。

我们通过INSERT语句向表中插入数据,语句格式为

INSERTINTO 表的名字(列名a,列名b,列名c) VALUES(值1,值2,值3);

INSERT INTO employee(id,name,phone) VALUES(01,'Tom',110110110);

INSERT INTO employee VALUES(02,'Jack',119119119);

INSERT INTO employee(id,name) VALUES(03,'Rose');

5、查看表格内容

SELECT * FROM  <表格名字>
</code>

约束

<code>
1、约束分类

约束类型:	主键	默认值	唯一	外键	非空
关键字:	PRIMARY KEY	DEFAULT	UNIQUE	FOREIGN KEY	NOT NULL
2、建立含约束的表

git clone https://github.com/shiyanlou/SQL3

mysql> source /home/shiyanlou/Desktop/SQL3/MySQL-03-01.sql

3、主键

 主键(PRIMARY KEY)是用于约束表中的一行,作为这一行的标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键要求这一行的数据不能有重复且不能为空。

4、默认值约束

5、唯一约束

6、外键约束

外键(FOREIGN KEY)既能确保数据完整性,也能表现表之间的关系。

一个表可以有多个外键,每个外键必须REFERENCES(参考)另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。

7、非空约束
</code>

select详解

<code>
1、基本的SELECT语句

SELECT语句的基本格式为:

SELECT 要查询的列名 FROM 表名字 WHERE 限制条件;

SELECT name,age FROM employee;

2、数学符号条件

WHERE限制条件可以有数学符号 (=,<,>,>=,<=) 

SELECT name,age FROM employee WHERE age>25;

SELECT name,age,phone FROM employee WHERE name='Mary';

3、“AND”与“OR”

OR(或)和AND(且)连接:

SELECT name,age FROM employee WHERE age30; #筛选出age大于25,或age大于30

而刚才的限制条件 age30 可以替换为 age BETWEEN 25 AND 30 ,结果是一样的:

4、IN和NOT IN

用于筛选“在”或“不在”某个范围内的结果

SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN ('dpt3','dpt4');

5、通配符

关键字 LIKE 在SQL语句中和通配符一起使用,

其中 _ 代表一个未指定字符,% 代表不定个未指定字符。

SELECT name,age,phone FROM employee WHERE phone LIKE'1101__';

SELECT name,age,phone FROM employee WHERE name LIKE'J%';

6、对结果排序

默认情况下,ORDER BY的结果是升序排列,而使用关键词ASC和DESC可指定升序或降序排序。

SELECT name,age,salary,phone FROM employee ORDERBY salary DESC;

7、SQL内置函数和计算

函数名:	COUNT	SUM	AVG	MAX	MIN
作用:	计数	求和	求平均值	最大值	最小值
SELECTMAX(salary) AS max_salary,MIN(salary) FROM employee;

mysql> select max(salary),min(salary) from employee;

使用AS关键词可以给值重命名,比如最大值被命名为了max_salary:

8、子查询

上面讨论的SELECT语句都仅涉及一个表中的数据,然而有时必须处理多个表才能获得所需的信息

。

SELECT of_dpt,COUNT(proj_name) AS count_project FROM project WHERE of_dpt IN (SELECT in_dpt FROM employee WHERE name='Tom');

子查询还可以扩展到3层、4层或更多层。

9、连接查询

在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接(join)操作。

SELECT id,name,people_num FROM employee,department WHERE employee.in_dpt = department.dpt_name ORDERBY id;

另一个连接语句格式是使用JOIN ON语法,刚才的语句等同于:

SELECT id,name,people_num FROM employee JOIN department ON employee.in_dpt = department.dpt_name ORDERBY id;
</code>

修改和删除

<code>
1、对数据库的修改

现在我们运行命令删除名为test_01的数据库:

DROPDATABASE test_01;

2、对一张表的修改

(1)重命名一张表

RENAME TABLE 原名 TO 新名字;ALTER TABLE 原名 RENAME 新名;ALTER TABLE 原名 RENAME TO 新名;

 

(2)删除一张表

DROPTABLE 表名字;

3、对一列的修改(即对表结构的修改)

(1)增加一列

ALTER TABLE 表名字 ADD COLUMN 列名字 数据类型 约束; 或: ALTER TABLE 表名字 ADD 列名字 数据类型 约束;

如果要把增加的列插入在指定位置,则需要在语句的最后使用AFTER关键词(“AFTER 列1” 表示新增的列被放置在 “列1” 的后面)。

ALTERTABLE employee ADD test INT(10) DEFAULT11FIRST;

 

(2)删除一列

ALTER TABLE 表名字 DROP COLUMN 列名字; 或: ALTER TABLE 表名字 DROP 列名字;

 

(3)重命名一列

ALTERTABLE 表名字 CHANGE 原列名 新列名 数据类型 约束;

注意:这条重命名语句后面的 “数据类型” 不能省略,否则重命名失败。

当原列名和新列名相同的时候,指定新的数据类型或约束,就可以用于修改数据类型或约束。需要注意的是,修改数据类型可能会导致数据丢失,所以要慎重使用

 

(4)改变数据类型

ALTERTABLE 表名字 MODIFY 列名字 新数据类型;

再次提醒,修改数据类型必须小心,因为这可能会导致数据丢失。在尝试修改数据类型之前,请慎重考虑。

4、对表的内容修改

(1)修改表中某个值

UPDATE 表名字 SET 列1=值1,列2=值2WHERE 条件;

注意:一定要有WHERE条件,否则会出现你不想看到的后果

 

(2)删除一行记录

删除表中的一行数据,也必须加上WHERE条件,否则整列的数据都会被删除。删除语句:

DELETEFROM 表名字 WHERE 条件;

 </code>

其它

<code>
1、索引

在表中已建立索引,在索引中找到符合查询条件的索引值,通过索引值就可以快速找到表中的数据,可以大大加快查询速度。

对一张表中的某个列建立索引,有以下两种语句格式:

ALTERTABLE 表名字 ADDINDEX 索引名 (列名);

CREATEINDEX 索引名 ON 表名字 (列名);

这里我们使用命令 SHOW INDEX FROM 表名字; 查看刚才新建的索引

在使用SELECT语句查询的时候,语句中WHERE里面的条件,会自动判断有没有可用的索引;

2、视图

注意理解视图是虚拟的表:

数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中;
使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;
视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变;
在使用视图的时候,可以把它当作一张表。
创建视图的语句格式为:
CREATEVIEW 视图名(列a,列b,列c) ASSELECT 列1,列2,列3FROM 表名字;
可见创建视图的语句,后半句是一个SELECT查询语句,所以视图也可以建立在多张表上,只需在SELECT语句中使用子查询或连接查询

3、导入

LOADDATAINFILE'文件路径'INTOTABLE 表名字;

4、导出

导出与导入是相反的过程,是把数据库某个表中的数据保存到一个文件之中。导出语句基本格式为:

SELECT 列1,列2INTOOUTFILE'文件路径和文件名'FROM 表名字;

注意:语句中 “文件路径” 之下不能已经有同名文件

5、备份

备份与导出的区别:导出的文件只是保存数据库中的数据;而备份,则是把数据库的结构,包括数据、约束、索引、视图等全部另存为一个文件。

mysqldump是MySQL用于备份数据库的实用程序。它主要产生一个SQL脚本文件,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。
使用mysqldump备份的语句:

mysqldump -u root 数据库名>备份文件名; #备份整个数据库

mysqldump -u root 数据库名 表名字>备份文件名; #备份整个表
6、恢复

source /tmp/SQL6/MySQL-06.sql

mysql -u root test < bak.sql</code>

DevOps-田飞雨 》》转载请注明源地址
喜欢 (2)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 不错的文章,内容文笔犀利. 菱镁板 http://www.chinabomeiban.com/
    匿名2015-04-03 05:24 回复