数据库、数据表的基本操作及查询数据
数据库的基本操作
1. 创建数据库CREATE DATABASE database_name
database_name为要创建的数据库的名称
2. 删除数据库DROP DATABASE database_name
database_name为要删除的数据库的名称
3. 数据库存储引擎
数据库存储引擎是数据库底层软件组成,数据库管理系统(DBMS)使⽤数据引擎进⾏创建、查询、更新和删除数据操作。
MySQL的核⼼就是存储引擎。
存储引擎⽐较
功能MyISAM Memory InnoDB Archive
存储限制256TB RAM64TB None
⽀持事务No No Yes No
⽀持全⽂索引Yes No No No
⽀持数索引Yes Yes Yes No
⽀持哈希索引No Yes No No
⽀持数据缓存No N/A Yes No
⽀持外键No No Yes No
数据表的基本操作
创建数据表
1. 创建表的语法形式
CREATE TABLE<;表名>
(
字段名1 数据类型 [列级别约束条件] [默认值],
字段名2 数据类型 [列级别约束条件] [默认值],
……
[表级别约束条件]
);
2. 使⽤主键约束
主键约束要求主键列的数据唯⼀,并且不允许为空。他能唯⼀地标识表中的⼀条记录,可以结合外键来定义不同数据表之
间的关系,并且可以加快数据库查询的速度。
1. 单字段主键
1. 在定义列的同时指定主键。字段名数据类型 PRIMARY KEY [默认值]
2. 在定义完所有列之后指定主键。[CONSTRAINT <;约束名>] PRIMARY KEY [字段名]
2. 多字段联合主键
主键由多个字段联合组合⽽成。PRIMARY KEY [字段1、字段2...]
其位置放置在定义完所有的主键之后
3. 使⽤外键约束
外键⽤来在两个表的数据之间建⽴链接,它可以是⼀列或者多列。⼀个表可以有⼀个或多个外键。
[CONSTRAINT<;外键名>] FOREIGN KEY 字段1[,字段2...] REFERENCES<;主表名> 主键列1[,主键列2...]
4. 使⽤⾮空约束
⾮空约束指字段的值不能为空。对于使⽤了⾮空约束的字段,如果⽤户在添加数据时没有指定值,数据库系统会报错。字段名数据类型NOT NULL
5. 使⽤唯⼀性约束
唯⼀性约束要求该列唯⼀,允许为空,但只能出现⼀个空值。
唯⼀约束可以确保⼀列或者⼏列不出现重复值。
1. 在定义完列之后直接指定唯⼀约束。字段名数据类型 UNIQUE
2. 在定义完所有列之后指定唯⼀约束。[CONSTRAINT<;约束名>] UNIQUE(<;字段名>)
6. 使⽤默认约束
默认约束指定某列的默认值。字段名数据类型 DEFAULT 默认值
7. 设置表的属性值⾃动增加
在数据库应⽤中,可以通过为表的主键添加AUTO_INCREMENT关键字来实现:当每新增加⼀条记录,使该主键⾃动加⼀。⼀个表只能有⼀个字段使⽤AUTO_INCREMENT约束,且该字段必须为主键的⼀部分。其约束的字段可以是任何整数类型。
字段名数据类型 AUTO_INCREMENT
查看数据表结构
1. 查看表基本结构语句
DESCRIBE 表名;或者简写为DESC 表名;
2. 查看表详细结构语句
SHOW CREATE TABLE <;表名/G>;
如果不加/G参数,显⽰的结果可能⾮常混乱,加上参数/G后,可使显⽰结果更加直观,易于查看。
修改数据表
1. 修改表名
ALTER TABLE <;旧表名> RENAME [TO] <;新表名>;
2. 修改字段的数据类型
ALTER TABLE <;表名> MODIFY <;字段名> <;数据类型>;
3. 修改字段名
ALTER TABLE <;表名> CHANGE <;旧字段名> <;新字段名> <;新数据类型>;
4. 添加字段
ALTER TABLE <;表名> ADD <;新字段名> <;新数据类型> [约束条件] [FIRST|AFTER 已存在字段名];
5. 删除字段
ALTER TABLE <;表名> DROP <;字段名>;
6. 修改字段的排列位置
ALTER TABLE <;表名> MODIFY <;字段1> <;数据类型> FIRST|AFTER <;字段2>;
7. 更改表的存储引擎
ALTER TABLE <;表名> ENGINE=<;更改后的存储引擎名>;
8. 删除表的外键约束
ALTER TABLE <;表名> DROP FOREIGN KEY <;外键约束名>;
删除数据表
DROP TABLE [IF EXISTS] 表1,表2...表n;
查询数据
基本查询语句
SELECT
{*|<;字段列表>}
[
FROM <;表1>,<;表2>...
[WHERE <;表达式>]
[GROUP BY <group by definition>]
mysql删除重复的数据保留一条[HAVING <expression>[{<operator><expression>}...]]
[ORDER BY <order by definition>]
[LIMIT [offset,] <row count>]
]
SELECT [字段1,字段2,...,字段n]
FROM [表或视图]
WHERE [查询条件];
单表查询
1. 查询所有字段
SELECT * FROM 表名;
2. 查询指定字段
SELECT 字段名1[,字段名2,...,字段名n] FROM 表名;
3. 查询指定记录
在SELECT语句中,通过WHERE⼦句可以对数据进⾏过滤。
SELECT 字段名1[,字段名2,...,字段名n] FROM 表名 WHERE 查询条件;
4. 带IN关键字的查询
IN操作符⽤来查询满⾜指定范围内的条件的记录,使⽤IN操作符,将所有检索条件⽤括号括起来,检索条件之间⽤逗号隔开,只要满⾜条件范围内的⼀个值即为匹配项。
在IN关键字前⾯加上NOT即可使得查询的结果正好相反。
5. 带BETWEEN AND的范围查询
BETWEEN AND⽤来查询某个范围内的值,该操作符需要有两个参数,即范围的开始值和结束。如果字段值满⾜指定的范围查询条件,则这些记录被返回。
同样,在BETWEEN AND关键字前⾯加上NOT即可使得查询的结果正好相反。
6. 带LIKE的字符匹配查询
LIKE关键字即是使⽤通配符来进⾏匹配查。通配符是⼀种在SQL的WHERE条件⼦句中拥有特殊意思的字符,可以和LIKE⼀起使⽤的通配符有%和_。
百分号通配符%,匹配任意长度的字符,甚⾄包括零字符。
下划线通配符_,⼀次只能匹配任意⼀个字符。
7. 查询空值
空值不同于0,也不同于空字符串。空值⼀般表⽰数据未知、不适⽤或将在以后添加数据。
在SELECT语句中使⽤IS NULL⼦句,可以查询某字段内容为空记录。
8. 带AND的多条件查询
AND主要⽤于WHERE⼦句中,⽤来链接两个甚⾄多个查询条件,表⽰所有的条件都需要满⾜才会返回值。
9. 带OR的多条件查询
OR也主要⽤于WHERE⼦句中,⽤来链接两个甚⾄多个查询条件,表⽰所有的条件仅需满⾜其中之⼀
项便会返回值。
10. 查询结果不重复
在SELECT语句中,使⽤DISTINCT关键字来指⽰MySQL消除重复的记录。
SELECT DISTINCT 字段名 FROM 表名;
11. 对查询结果排序
⽤ORDER BY语句来对查询的结果进⾏排序。
在后⾯添加DESC表⽰降序排序
在后⾯添加ASC或默认,表⽰升序排序
12. 分组查询
在MySQL中使⽤GROUP BY来对数据进⾏分组
[GROUP BY 字段] [HAVING <;条件表达式>] [WITH ROLLUP]
HAVING关键字⽤来过滤数据,因为WHERE不能和GROUP BY混⽤
WITH ROLLUP关键字是在所有查询出的记录之后增加⼀条记录,该记录计算查询出的所有记录的总和,即统计记录数量。但是ROLLUP和能够与GROUP BY同时使⽤的ORDER BY不能同时使⽤。
13. 使⽤LIMIT限制查询结果的数量
LIMIT [位置偏移量,] ⾏数
使⽤集合函数查询
函数作⽤
AVG()返回某列的平均值
COUNT()返回某列的⾏数
MAX()返回某列的最⼤值
MIN()返回某列的最⼩值
SUM()返回某列值的和
连接查询
1. 内连接查询
在内连接查询中,只有满⾜条件的记录才能出现在结果关系中。两个表之间的关系通过(INNER) JOIN指定。使⽤这种语法的时候,连接的条件使⽤ON⼦句给出,⽽不是⽤WHERE。
2. 外连接查询
1. LEFT JOIN左连接
返回包括左表中的所有记录和右表中连接字段相等的记录。
2. RIGHT JOIN右连接
返回包括右表中的所有记录和左表中连接字段相等的记录。
3. 复合条件连接查询
复合条件连接查询是在连接查询的过程中,通过添加过滤条件,限制查询的结果,使查询的结果更加准确。
⼦查询
⼦查询指⼀个查询语句嵌套在另⼀个查询语句内部的查询。
1. 带ANY、SOME关键字的⼦查询
ANY和SOME关键字是同义词,表⽰满⾜其中任⼀条件,它们允许创建⼀个表达式对⼦查询的返回值列表进⾏⽐较,只要满⾜内层⼦查询中的任何⼀个⽐较条件,就返回⼀个结果作为外层查询的条件。
2. 带ALL关键字的⼦查询
使⽤ALL时,需要同时满⾜所有内层查询的条件。
3. 带EXISTS关键字的⼦查询
EXISTS关键字后⾯的参数是⼀个任⼀的⼦查询,系统对⼦查询进⾏运算以判断它是否返回⾏,如果⾄少返回⼀⾏,那么EXISTS的结果为true,此时外层查询语句将进⾏查询;如果⼦查询没有返回任何⾏,那么EXISTS的结果为false,此时外层语句不进⾏查询。
4. 带IN关键字的⼦查询
使⽤IN关键字进⾏⼦查询时,内层查询语句仅仅返回⼀个数据列,这个数据列⾥的值将提供给外层查询语句进⾏⽐较操作。当外层查询语句内只要有⼀个内层查询语句返回的数据列中的数据时,则判断为满⾜条件,外层查询语句将进⾏查询。
5. 带⽐较运算符的⼦查询
⼦查询可以使⽤如'<','<=','=','>','>=','!='等⽐较运算符。
合并查询结果
利⽤UNION关键字,可以给出多条SELECT语句,并将他们的结果组合成单个结果集。合并时,两个表对应的列数和数据类型必须相同。各个SELECT语句之间使⽤UNION或UNION ALL关键字分割。UNION不适⽤关键字ALL,执⾏的时候删除重复的记录,所有返回的⾏都是唯⼀的;使
⽤关键字ALL的作⽤时不删除重复⾏也不对结果进⾏⾃动排序。
为表和字段取别名
1. 为表取别名
表名 [AS] 表别名
2. 为字段取别名
列名 [AS] 列别名
使⽤正则表达式查询
MYSQL中使⽤REGEXP关键字指定正则表达式的字符匹配模式。
正则表达式常⽤字符匹配列表
选项说明
^匹配⽂本的开始字符
$匹配⽂本的结束字符
.匹配任何单⼦符
*匹配零个或多个在他前⾯的字符
+匹配前⾯的字符1次或多次
<;字符串>匹配保护指定的字符串的⽂本
[字符集合]匹配字符集合中的任何⼀个字符
[^]匹配不在括号中的任何字符
字符串{n,}匹配前⾯的字符串⾄少n次
字符串{n,m}匹配前⾯的字符串⾄少n次,⾄多m次

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。