您的位置:首页 > 数据库 > MySQL

MySQL语句总结1

2016-03-11 09:57 573 查看
http://www.cnblogs.com/tobecrazy/
Mysql数据库基本操作(进入mysql\bin目录下)注意在mysql控制台操作每句后要加分号 ;

初级篇

1、 进入数据库 mysql -u 用户名 -p 密码
2、 导出数据库 mysqldump -u 用户名 -p 密码 数据库名(表名)> 路径 备份.sql
3、 导入数据库 mysql -u 用户名 -p 密码 数据库名< 路径 备份.sql
或者进入mysql,使用source 路径 备份 此方法可以单独导入表
4、 显示所有数据库 show databases;
5、 使用数据库 use 数据库名;
6、 显示所有表 show tables;
7、 创建数据库 create database 数据库名;
8、 创建表 create table 表名(变量名 变量类型(大小)约束条件,变量名 变量类型(变量大小)约束条件,primary key(主键) );
9、 描述表 describe 表名;
10、向表中输入数据 insert into 表名 values( );
11、select 列 from 表 order by 列 desc/asc
select count(*) from 表名 统计表中记录总数
descending 降序排列的意思
ascending 升序排列
12、删除表内容
delete from 表名
truncate table 表名
13、更新表内容
update table 表名 set=' ' where 条件
14、改变表结构
alter table 表名 add id int(10) 【列名 数据类型】 增加列
alter table 表名 drop id 【列名】 删除列
alter table 表名 modify id int(6); 修改列
15、改变表名
rename table 表名1 to 表名2
16、查看数据库、表创建信息
show create database 数据库名
show create table 表名

17、过滤表中重复的信息
select distinct 列名 from 表名

进阶篇

1、将选出内容新建表
create table 表名2(可定义列名以及类型) as select 列名,列名 from 表名2;
将选出结果插入某表
insert 表1 select 列名1,列名2,… From 表 2

2、select语句
select [all/distinct] 列名 from 表名 [where 搜索条件] [group by 组表达式] [having 条件][order by 列名][ASC|DESC]
选择指定前几条
select * from table(表名) limit m , n

m为第几行开始,n为取几条
选择在指定范围内记录
select * from table(表名) where 列名 between value1 and value2
选择在指定内容的记录
select * from table(表名) where in / not in 列(value1,value2 …)
选择指定类似内容
select * from table(表名) where 列名 like / not like 'string '

通配符
含义
%
任意多个字符
_
单个字符
[ ]
指定范围内的单个字符
[ ^ ]
不在指定范围内的单个字符
选择为空的记录

select * from table(表名) where 列名 NULL/ not NULL

选择结果统计

select 列名1 , count(列名2) from table(表名) group by 列名2 having 条件

函数名
功能
count
求组中项数,返回整数
sum
求和,返回表达式中所有值的和
avg
求平均值,返回表达式中所有值的平均值
max
求最大值,返回表达式中所有值的最大值
min
求最小值,返回表达式中所有值的最小值
abs
求绝对值,返回数值表达式的绝对值
ascii
求ASCII码,返回字符型数据的ASCII码
rand
产生随机数,返回一个位于0-1之间的随机数
| student | CREATE TABLE `student` (

`studno` int(5) NOT NULL auto_increment,

`studname` char(10) NOT NULL,

`studcourse` char(50) NOT NULL,

`studscore` float default '0',

PRIMARY KEY (`studno`)

) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=gbk |

mysql> select * from student;

+--------+----------+------------+-----------+-----+

| studno | studname | studcourse | studscore | sex |

+--------+----------+------------+-----------+-----+

| 1 | 祖如辉 | 数据库原理 | 90 | 男 |

| 2 | 马斯洛 | 数据库原理 | 80 | 男 |

| 3 | 莉莉 | 数据库原理 | 94 | 女 |

| 4 | 加红基 | 数据库原理 | 99 | 男 |

| 5 | 马三立 | 数据库原理 | 69 | 男 |

| 6 | 郭冬临 | 数据库原理 | 65 | 男 |

| 7 | 想加你 | 数据库原理 | 55 | 女 |

| 8 | 华正白 | 数据库原理 | 95 | 男 |

| 9 | 黎明 | 数据库原理 | 49 | 男 |

| 10 | 徐晓娟 | 数据库原理 | 79 | 女 |

+--------+----------+------------+-----------+-----+

10 rows in set (0.00 sec)

mysql> select * from class;

+--------+------------------+-----------+

| studno | class | gradecode |

+--------+------------------+-----------+

| 1 | 计算机网络工程 | 3 |

| 2 | 计算机网络工程 | 1 |

| 3 | 计算机网络工程 | 1 |

| 4 | 计算机科学与技术 | 3 |

| 5 | 计算机科学与技术 | 3 |

| 6 | 计算机科学与技术 | 1 |

| 7 | 计算机科学与技术 | 4 |

| 8 | 计算机科学与技术 | 2 |

| 9 | 计算机科学与技术 | 2 |

| 10 | 计算机软件工程 | 2 |

+--------+------------------+-----------+

10 rows in set (0.00 sec)

选出 数据库原理及格的女学生信息(包含学号,姓名,课程,成绩)。

mysql> Select * from student where having (select from studscore student where sex='女' )>60;

创建表视图

create view 视图名 as select 列名 from 表名

创建索引

create unique index 索引列 on 表名(列名)

内联接也叫自然联接,它是组合两个表的常用方法。内联接将两个表中的列进行比较,将两个表中满足联接条件的行组合起来,作为结果。内联接有两种形式的语法: (注:多个表也可)

语法一:

SELECT 列名SELECT 列名 FROM 表1 [INNER] JOIN 表2 ON 表1.列 = 表2.列

语法二:

SELECT 列名FROM 表1,表2 WHERE 表1.列 = 表2.列

在内联接中,只有在两个表中匹配的行才能在结果集中出现。而在外联接中可以只限制一个表,而对另外一个表不加限制(即不加限制的表的所有行都出现在结果集中)。

外联接只能连接两个表

外联接分为左外联接、右外联接。

语法如下:SELECT 列名

FROM 表1 <LEFT|RIGHT > [OUTER] JOIN 表2 ON 表1.列 = 表2.列

联接操作不仅可以在不同的表上进行,而且可以在同一张表内进行自身联接,即将同一个表的不同行联接起来。自联接可以看作一张表的两个副本之间的联接。在自联接中,必须为表指定两个别名,使之在逻辑上成为两张表。

是一种特殊类型的内联接

l 为表名指定别名的方式:

在表名后面直接给出别名:表名 别名
在表名和别名之间添加AS关键字:表名 AS 别名

l MySQL的表别名中不能有特殊字符(如空格)

l 除了在内联接时必须使用表别名之外,表别名也可用在其他的SQL语句中,以简化SQL语句,提高语句的可读性。

l 交叉联接也叫非限制联接,它将两个表不加任何约束的组合起来。在数学上,就是两个表的笛卡尔积。交叉联接后得到的行数是两个被联接表的行数的乘积。

l 语法如下:SELECT 列名 FROM 表1 CROSS JOIN表2

或SELECT 列名 FROM 表1 ,表2

数据库操作

一、创建数据库

语法:Create Database [IF NOTEXISTS] db_name [CHARSET]

参数:

CreateDatabase是创建数据库的命令;

[IFNOT EXISTS]是可选项,如果不存在,再进行创建;

db_name:是要创建的数据库的名称,命名方式跟变量一样,但不加$符号;

[CHARSET]设置数据库的字符集,如果不设置会用MySQL的默认字符集latin1;

举例:

CREATEDATABASE IF NOT EXISTS zhangsan CHARSET utf8;

CREATEDATABASE zhangsan; //使用的是默认字符集latin1

二、显示所有数据库

语法:show databases

三、删除数据库

语法:DROP DATABASE [IF EXISTS] db_name

说明:

Dropdatabase是删除数据库的命令;

[IFEXISTS]是可选项,如果存在,再进行删除,不会出现出错的信息;

举例:

DROPDATABASE IF EXISTS zhang; //删除数据库zhang

四、选择数据库

语法:USE db_name

五、更改数据库默认字符集

1、更改MySQL的配置文件:C:\Program Files (x86)\phpStudy\MySQL\my.ini

客户端(Client Section):default-character-set=gbk

服务器端(Server Section):default-character-set=latin1

2、在MySQL客户端使用命令修改

ALTER DATABASE dbname DEFAULT CHARACTER SET gbk



数据表操作

一个网站可以有多张表:新闻表、管理员表、产品表、留言表.

一、显示当前数据库中的所有表

语法:show tables FROM db_name

说明:查询某一个数据库中的所有的表

二、创建数据表

语法结构:

CREATE TABLE table_name(

列名1 列的类型类型 列的属性,

列名2 列的数据类型 列的属性,

列名3 列的数据类型 列的属性

)

参数说明:

列名1,指定每个字段的名称,命名跟变量一样;

列的数据类型:指定每个字段存储什么样的数据;

列的属性:对列更详细的设置

举例:

?
列的常用属性

(1)not null | null 指定列的值可以为空,还是不空,默认为null,一般id字段不能为空;

(2)DEFAULT default_value ,设置某个列的默认值,默认值可以是字符串或数字。

举例:sex tinyint not null DEFAULT 1;

(3)auto_increment:指定某个列为自动增长型,一般是指为id字段,可以保证id的值永不重复;

(4)primary key:是主键索引。主键索引必须给具有auto_increment属性的字段来添加。主键索引只能是一个,其它的都是普通索引。

索引:就相当于一本书的目录索引,通过目录查询要看的内容,比直接翻书翻到要快得多。

id字段是每个数据表都必须有的字段,id字段必须具有这三个属性:not null、auto_increment、primarykey。

三、修改数据表

语法:ALTER TABLE table_name ……

提示:使用phpMyAdmin来修改数据表

四、删除数据表

语法:DROP TABLE table_name FROM db_name

五、显示表结构

语法:Describe table_name或者Desc table_name

功能:显示某一个表的结构



MySQL数据类型

整型、浮点型、字符型、文本型、日期型

一、整型

tinyint:最小整数,1个字节表示,-128~127(带符号) 0-255、如:性别、邮件是否已读

smallint:小型整数,2个字节表示,0-65535,如:工资

mediumint:中型整数,3个字节表示,0-1677万

int:一般整数,4个字节表示,0-42亿,如:文章的点击率

bigint:大型整数,8个字节表示,2^64-1

二、浮点型

float(m,d):可以精确到小数点后7位,m代表总长度,d代表小数位数;

float(6,2):表示总长度为6位(不含小数点),小数位数是2位。如:1200.65

double:可以精确到小数点后15位。

三、字符型

char(M):固定宽度,取值范围0-255个字符,如:新闻标题、贴子标题等

char[10],假设我存了5个字符,其它的空间会用空格填充。

参数M指定字段的宽度;

varchar(M):自动伸缩型,取值范围0-65535个字符,如:新闻标题、贴子标题等

varchar(10),假设我存了5个字节,它的长度应该是6,这里多出的1是字符长度。

四、文本型

TINYTEXT,1个字节,0-255个字符

TEXT,2个字节,0-65535个字符

MEDIUMTEXT,3个字节,0-1677万个字符

LONGTEXT,4个字节,0-42亿个字符

五、日期时间型

Date:格式YYYY-MM-DD存储,如:2014-08-01

Time:格式HH:mm:ss存储,如:12:09:30

Datetime:格式YYYY-MM-DD HH:mm:ss存储

Timestamp:格式YYYY-MM-DD HH:mm:ss

$addate = time();

Date(“Y-m-d H:i;s”);

注意:在MySQL的客户端如何显示简体中文?

因为MySQL的客户端默认字符集,应该是GBK,因此显示时,要把当前的显示字符集改为GBK;

格式:set names gbk

只需要设置数组库的字符集,数据表将继承数据库中的字符集。

show命令

1、显示MySQL主机的所有数据库:SHOWDATABASES;

2、显示某个数据库中的所有表格:SHOW TABLES [FROM db_name];

3、显示创建数据库时的语句:SHOW create database db_name

4、显示某个数据库中表的结构:SHOW TABLE table_name [FROM db_name]

SQL简介

SQL,Structured Query Language结构化查询语言。SQL是操作和管理数据库的语言。

常用的SQL语句:增加、删除、修改、查询。

一、增加数据 INSERT INTO

语法:INSERT INTOtable_name(title,author,content,addate) VALUES(‘从8月开始每个人都可以申请城市户口’,’admin’,’内容……’,11010101010)

注意事项:

(1) 字段列表与值的内容列表,个数和顺序必须一致;

(2) id字段不需要管它,它是自动增长型。

二、删除记录DELETE FROM

语法:DELETEFROM table_name [WHERE条件]

举例:

DELETEFROM news WHERE id=3; //删除id=3的记录

DELETEFROM news WHERE id<4; //删除id<4的记录

DELETEFROM news WHERE id>10 and id<20; //删除20>id>10的记录

DELETEFROM news WHERE id>10 or author=’admin’ ; //删除id>10的所有记录,或者author=’admin’记录

TRUNCATE table_name

功能:删除所有数据,并重新将id值归0.

说明:与deletefrom删除全部数据要快的多。

举例:TRUNCATEnews

三、修改记录 UPDATE SET

语法:UPDATEtable_name SET 字段1=新值1,字段2=新值2 [WHERE条件]

注意:更新数据时,一定要指定WHERE条件,否则,整个表都会更新为一样

举例:

UPDATEnews SET author=’zhangsan’,hits=100000 WHERE id=120 //id=120的记录修改

UPDATEnews SET title=’新闻的新标题’ WHEREid=130;

……

四、查询数据SELECT

语法:SELECT *"字段列表 FROM table_name [WHERE条件][ORDER BY 字段 ASC|DESC] [LIMIT限定输出的结果]

参数:

*:将列出所有字段的数据,一般是当字段少的时候才用;

字段列表:指定要查询的字段,多个字段间用逗号隔开,如:SELECT id,title,addate FROM 007_news

[WHERE条件]指定查询的条件;

[ORDERBY]对哪些字段进行排序,排序分升序(ASC)和降序(DESC)

[LIMIT]限制输出的记录数

WHERE条件子句

Like运算符:实现字段模糊查询,比如:查询所有标题中含有北京的所有记录。

%:相当于windows系统中的搜索中的匹配符号“*”

WHEREtitle LIKE ‘%北京%’; //标题中含有北京的记录

WHEREauthor LIKE ‘a%’; //查询以“a”字符开头的作者

……

Order By排序子句

对一个字段或多个字段进行排序,排序的关键字有两个:升序(ASC)默认、降序(DESC)

SELECT * FROM news ORDER BY id DESC //对id字段进行降序排列

SELECT * FROM news ORDER BY author ASC,addate DESC //作者升序排列,时间倒序排列

Limit子句

限定要输出的记录数。

语法:LIMIT startrow,rows

参数:startrow表示开始行号,rows表示要显示多少条记录

提示:LIMIT语句主要应用于 ,网页的数据分页。

举例:LIMIT 0,10 //从第0行起,输出10条记录,不包括第0行。

LIMIT 1,10 //从第1行起,输出10条记录,不包括第1行。

LIMIT 15,10 //从第15行起,输出10条记录,不包括第15行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: