本文为博主学习 廖雪峰老师mysql教程 的 笔记,如有出错欢迎指出!
目录
2.1 DDL:Data Definition Language
(4)对表字段的约束(primary key,foreign key,unique,check,default,not null)
2.2 DML:Data Manipulation Language
(1)基本查询:select * from students
(5)投影查询:使用SELECT 列1, 列2, 列3则可以仅返回指定列,这种操作称为投影
1、介绍
数据库模型
- 层次模型
- 网状模型
- 关系模型
主流关系数据库
- 商用数据库,例如:Oracle,SQL Server,DB2等;
- 开源数据库,例如:MySQL,PostgreSQL等;
- 桌面数据库,以微软Access为代表,适合桌面应用程序使用;
- 嵌入式数据库,以Sqlite为代表,适合手机应用和桌面程序。
一些概念
- 记录(Record):表的每一行,记录是一个逻辑意义上的数据。
- 字段(Column):表的每一列,同一个表的每一行记录都拥有相同的若干字段。
- 通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。
- 注:
- 安装完MySQL后,除了MySQL Server(真正的MySQL服务器),还附赠一个MySQL Client
- MySQL Client的可执行程序是mysql,MySQL Server的可执行程序是mysqld
- 甲方---乙方产品经理---乙方
- MySQL Client:命令行客户端,可以通过MySQL Client登录MySQL并输入SQL语句执行
- 连接MySQL Server:
- sudo service mysql start
- mysql -u root -p
- 远程连接MySQL Server:mysql -h 10.0.1.99 -u root -p (10.0.1.99:MySQL Server的IP地址)
- 输入SQL语句:在MySQL Client中输入的SQL语句通过TCP连接发送到MySQL Server。默认端口号是3306,即如果发送到本机MySQL Server,地址就是127.0.0.1:3306。
- 连接MySQL Server:
2、SQL
2.1 DDL:Data Definition Language
允许用户定义数据,也就是创建表、删除表、修改表结构这些操作。通常,DDL由数据库管理员执行。
(1)对数据库
(2)对表
为了验证你的表是按你期望的方式创建,使用一个 DESCRIBE
语句或者SHOW语句:
mysql> DESCRIBE pet;
SHOW COLUMNS FROM pets;
(3)对表字段
(4)对表字段的约束(primary key,foreign key,unique,check,default,not null)
有关外键:
在连接两个表的时候并不需要外键约束。对于除InnoDB
表以外的表,可以使用REFERENCES tbl_name(col_name)
语句定义将它的列设置为外键,但是该语句并没有实际的作用,只是作为备注来提醒你现在正在定义的列指向另外一个表的列。在执行该语句的时候需要注意以下几点:
- MySQL 并不会执行任何操作检查列
col_name
是否存在于表tbl_name
中(它甚至不会检查tbl_name
这个表是否真正存在)。 - MySQL 不执行表
tbl_name
中的操作,例如对你正定义的行的进行更改行为,致使 ON DELETE 或 ON UPDATE 语句在该行上不会生效(意思是如果你在REFERENCES子句中写入 ON DELETE 或 ON UPDATE 子句,将被忽略)。 - 该句法可以创建一个列;但不创建任何索引或关键字。
2.2 DML:Data Manipulation Language
为用户提供添加、删除、更新数据的能力,这些是应用程序对数据库的日常操作。
(1)增(INSERT)
(2)删(DELETE)
(3)改(UPDATE)
2.3 DQL:Data Query Language
where后的条件表达式里不允许使用聚合函数,而having可以。
where---group by---select---having(先分组)---order by
允许用户查询数据,这也是通常最频繁的数据库日常操作。
(1)基本查询:select * from students
(2)子查询
(3)条件查询:优先级:NOT、AND、OR
ps: 使用UNION
将表里面的两个关键字一起使用进行搜索
SELECT field1_index, field2_index
FROM test_table WHERE field1_index = '1'
UNION
SELECT field1_index, field2_index
FROM test_table WHERE field2_index = '1';
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
(4)模糊查询
正则表达式匹配:由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP
和NOT REGEXP
操作符(或RLIKE
和NOT RLIKE
,它们是同义词)。
(5)投影查询:使用SELECT 列1, 列2, 列3则可以仅返回指定列,这种操作称为投影
(6)排序查询
(7)分页查询
(8)聚合查询
- 普通聚合
- 分组聚合
查看每种动物的数量:
mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
查看每种性别的动物数量:
mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
按种类和性别组合分类的动物数量:
mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
你也可以不必检索整个表。例如, 当只对狗和猫进行查询时,应为:
mysql> SELECT species, sex, COUNT(*) FROM pet
-> WHERE species = 'dog' OR species = 'cat'
-> GROUP BY species, sex;
(9)多表查询
(10)连接查询
- 内连接(INNER JOIN):只返回同时存在于两张表的行数据,A∩B
- 外连接(OUTER JOIN)