MySQL常用SQL语句

MySQL常用SQL语句

一些概念

关系型数据模型:建立在严格的数据概念基础上,用二维表来描述实体与实体间的联系。

关系:对应通常所说的一张表

元组:表中的一行

属性:表中的一列

主键:表中的某个属性(组),它可以唯一确定一个元组

关系型数据库模型的操作:

SELECT

SELECT...INTO 创建一个查询表

INSERT INTO

UPDATE

DELETE

INNER JOIN 内连接

LEFT JOIN 左连接

RIGHT JOIN 右连接

PARAMETERS

UNION 用于创建一个联合查询

1、UNION 结果集中的列名总是等于第一个 SELECT 语句中的列名
2、UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。如果不想去掉重复的行,可以使用union all

三大范式

第一范式(1NF)数据库表的每一列都是不可分割的原子数据项

第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性

第三范式(3NF)在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

MySQL数据类型

1、整型

MySQL数据类型

含义(有符号)

tinyint(m)

1个字节  范围(-128~127)

smallint(m)

2个字节  范围(-32768~32767)

mediumint(m)

3个字节  范围(-8388608~8388607)

int(m)

4个字节  范围(-2147483648~2147483647)

bigint(m)

8个字节  范围(+-9.22*10的18次方)

取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。 
int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度,不知道这个m有什么用。

2、浮点型(float和double)

MySQL数据类型

含义

float(m,d)

单精度浮点型    8位精度(4字节)     m总个数,d小数位

double(m,d)

双精度浮点型    16位精度(8字节)    m总个数,d小数位

设一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。

3、定点数

浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。 
decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。

4、字符串(char,varchar,_text)

MySQL数据类型

含义

char(n)

固定长度,最多255个字符

varchar(n)

固定长度,最多65535个字符

tinytext

可变长度,最多255个字符

text

可变长度,最多65535个字符

mediumtext

可变长度,最多2的24次方-1个字符

longtext

可变长度,最多2的32次方-1个字符

char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。 
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。 
3.char类型的字符串检索速度要比varchar类型的快。

varchar和text: 
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。 
2.text类型不能有默认值。 
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

5.二进制数据(_Blob)

1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。 
2._BLOB存储的数据只能整体读出。 
3._TEXT可以指定字符集,_BLO不用指定字符集。

6.日期时间类型

MySQL数据类型

含义

date

日期 '2008-12-2'

time

时间 '12:25:36'

datetime

日期时间 '2008-12-2 22:06:44'

timestamp

自动存储记录修改时间

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

数据类型的属性

 

MySQL关键字

含义

NULL

数据列可包含NULL值

NOT NULL

数据列不允许包含NULL值

DEFAULT

默认值

PRIMARY KEY

主键

AUTO_INCREMENT

自动递增,适用于整数类型

UNSIGNED

无符号

CHARACTER SET name

指定一个字符集

 

数据库基本操作

show databases;查看数据库

create database dbname;创建数据库dbname

drop database dbname;删除数据库 dbname

表操作

创建表

CREATE TABLE <表名>

(字段名1,数据类型 [列级别约束条件][默认值],

....

[表级别约束条件]

);

列级别约束条件包括:PRIMARYKEY, not null, UNIQUE, DEFAULT, AUTO_INCREMENT

 

修改表

ALTER TABLE <旧表名> RENAME <新表名>;

ALTER TABLE <表名> MODIFY <字段名> <数据类型>; 修改字段类型

ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新字段类型>; 修改字段名

ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件][FIRST|AFTER];增加字段

ALTER TABLE <表名> DROP <字段名>;

ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;修改字段排序

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>; 删除外键

DROP TABLE [IF EXISTS] 表1 表2 ...;删除没有被关联的表

设置索引

索引是将数据库中单列或者多列的值进行排序的结构,可以优化数据库的查询速度。

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名

ON 表名(属性 [(length)][ASC | DESC]);创建索引

DROP INDEX 索引名ON 表名;删除索引

记录查询

SELECT 属性列表 FROM 表名或视图名

[WHERE 条件表达式]

[GROUP BY属性名[HAVING 条件表达式]]

[ORDER BY 属性名 [ASC|DESC]]

group by 将结果按照group by子句后属性进行分组,having使得满足条件的组才能输出

order by 子句后面的属性进行升序或降序排列

 

LIMIT

使用LIMIT限制查询结果数量,在Java web中用于分页显示查询结果。

limit x, y//第一个参数指定返回记录行的偏移量(从0开始),第二个参数指定返回记录行的最大数目。

select * from student limit 2;返回2行记录

select * from student limit 1,3;返回第2行开始的3行数据。

 

(内)连接查询

select student.sno sname,cno,grade fromstudent,sc

where student.sno=sc.sno;

等同于

select student.sno sname,cno,grade fromstudent

inner join sc onstudent.sno=sc.sno;

 

外连接查询

leftjoin,join左表中所有记录和右表中满足连接的记录

select student.sno sname,cno,grade fromstudent

left join sc on student.sno=sc.sno;

rightjoin,join右表中所有记录和左表中满足连接的记录

select student.sno sname,cno,grade fromstudent

right join sc onstudent.sno=sc.sno;

子查询

子查询是将一个查询语句嵌套在另一个查询语句中。

例如select *from t1 where column1 = (select column1 from t2)

子查询中常用操作符有ANY(SOME)、ALL、IN、EXISTS

比较值<=子查询所返回的每一个值,<=ALL为true

比较值<=子查询所返回的任一个值,<=ANY为true

IN和NOT IN,查询结果是否在内层查询返回的数据列集合中。如:

select sno, sname from student

where sno in (select sno from sc wherecno=1);

合并查询结果

MySQL中使用UNION关键字,可将多个SELECT结果集合并为单个结果集,要求参加合并的结果集对应的列数和数据类型必须相同。语法:

SELECT...

UNION [ALL|DISTINCT]

SELECT...

[UNION [ALL|DISTINCT]

SELECT...]

 

记录更新

插入

INSERT

[LOW_PRIORITY | DELAYED | HIGH_PRIORITY]//可选,表优先级

[IGNORE]//可选,出现错误当做警告处理

[INTO] 表名//可选

[(字段名,...)]//可选,若不选需要插入所有列的数据

VALUES(值1,值2...), (值1,值2...), (值1,值2...)//必选,可插入多条数据

[ON DUPLICATE KEY UPDATE 字段=表达式,...]//可选,如果UNIQUE出现重复值将修改插入的值

 

insert into student (name,age) values (“小明”,20);

insert into student (name,age) values(“小花”,20), (“小白”,20), (“小绿”,20)//插入多条

insert into student .. select ..//可以将SELECT结果集插入表中

 

修改

UPDATE 表名 SET 字段1 = 新值1,字段2=新值2,... where 条件表达式;

删除

DELETE FROM 表名 WHERE 条件表达式;

TRUNCATE [TABLE] 表名;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值