MySQL 必知必会
一直就有对MySQL 知识点进行小结的想法,现在就着《MsSQL必知必会》这本书,对相关的内容进行一些整理,主要记录实际操作性的内容,对于概念性的内容,就不再赘述了。(主要是自己的想法,所以有些部分会选择忽略)
一、 MySQL 的连接使用
- 1.1 数据库连接方式
- 1.2 基本信息查看
二、数据库基础使用
- 2.1 表的基本操作
- 2.2 插入、更新、删除数据
三、数据检索
- 3.1 简单SELECT 语句的使用
- 3.2 过滤操作(组合WHERE子句使用)
- 3.3 通配符的使用
- 3.4 正则表达式的使用
- 3.5 函数的使用(函数、聚集函数)
- 3.6 数据分组
- 3.7 使用子查询
- 3.8 联结表
- 3.9 组合查询
四、其他相关应用
- 4.1 视图简单使用
- 4.2 存储过程使用
- 4.3 游标使用
- 4.4 触发器使用
- 4.5 管理事务处理
- 4.6 全球化和本地化
- 4.7 安全管理
- 4.8 数据库维护
- 4.9 性能改善
一、 MySQL 的连接使用
1.1 数据库连接使用
MySQL与所有的客户机-服务器DBMS一样,要求在能执行命令之前登陆到DBMS。
为了链接到MySQL,需要提供以下信息:
- 主机名(计算机名):本地为localhost;
- 端口(默认为3306 可更改)
- 一个合法的用户名
- 用户口令(也可配置跳过密码登陆)
使用合法用户 root,密码123 ,在本地进行登陆(需安装并开启数据库服务)
使用命令行登陆:mysql -h localhost -P 3306 -u root -p
并在提示之后输入密码
使用DBMS 工具按照提示进行登陆(在对应输入框内输入上述信息即可)。
在代码当中连接使用数据库,将上述信息放入配置文件中,直接运用JDBC或者使用框架进行连接。
1.2 基本信息查看
登陆进入到MySQL之后,如想了解数据库的一些信息,可以使用以下语句:
- SELECT version();查询当前数据库版本;
- SHOW ENGINES; 查询当前数据库支持引擎及当前默认使用引擎;
- SELECT user(); 查看当前登陆用户名;
- SHOW GRANTS FOR ***;查看某用户的权限 ***为用户名;
- SHOW DATABASES; 查看当前用户能看到的所有数据库;
- USE ***; 转到指定的数据库下 ***为指定数据库名;
- SHOW TABLES; 查看当前数据库中的所有表;
- SHOW COLUMNS FROM *** 或 DESCRIBE *** 查看***表结构信息
输出结果:
二、数据库基础应用
这一部分主要说的是数据库中对表的基本操作及对数据的基本增删改操作,由于查询相关涉及的内容颇多,所以我在这里直接分为单独的部分。
特别说明一下,对于数据库的操作一般分为交互式创建和管理表的工具以及MySQL语句,在这里我使用的是命令行下的操作演示。
2.1 表的基本操作
- 创建表 在CREATE TABLE 关键字之后给出表名,表列的名字和定义使用逗号隔开。(MySQL语句忽略空格)
CREATE TABLE customers
(
列名 数据类型 说明
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL ,
cust_address char(50) NULL ,
cust_city char(50) NULL ,
cust_state char(5) NULL ,
cust_zip char(10) NULL ,
cust_country char(50) NULL ,
cust_contact char(50) NULL ,
cust_email char(255) NULL ,
PRIMARY KEY (cust_id)
) ENGINE=InnoDB;`
数据库中的五大约束(在创建表时就可添加约束,也可以在修改表结构时添加)
- 主键约束(Primay Key Coustraint) 唯一性,非空性
- 唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
- 检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)
- 默认约束 (Default Counstraint) 该数据的默认值
- 外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列
注意:在创建新表时,制定的表名必须不存在,否则将出错。若要防止意外覆盖已有的表,应当手工删除原先的表,再重新创建它。在表名后面添加 IF NOT EXISTS 表示仅在表不存在时创建它。
2.2 插入、更新和删除数据
在上一小节的时候我们发现里面有很多有意思的关键字,其实数据库中还有很多类似的关键字,下面依次来说明一下:
- NULL值
首先说明NULL不是空格,也不是空串,而是没有值或者缺值,允许NULL值得列,在插入行时可以不给出该列的值。 - AUTO_INCREAMENT
自动增量,每个表只允许有一个自增的列,且它必须被索引(如设置为主键)。也可以手工的在INSERT语句中设置一个值(至今尚未使用的),该值将会代替自动生成的值,后续的增量将使用手工插入的值。 - DEFAULT
如果在插入行时,没有给出值,MySQL允许指定默认值。
不支持函数作为默认值,之支持常量。 - ENGINE
和大部分DBMS一样,MySQL也有一个具体管理和处理数据的内部引擎。且MySQL内部打包了多个引擎,如果不指定当前SQL语句使用的引擎,则使用默认引擎,而不是所有的SQL语句都使用默认引擎,因此,使用ENGINE = 语句非常重要。
下面是几个比较重要的数据库引擎及其特点;- InnoDB 是一个可靠的事务处理引擎,它不支持全文不搜索;
- MEMORY 在功能等同于MyISAM,但由于数据存储在内存中,速度很快(适合于临时表)。
- MyISAM 是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
注意:外键不能跨引擎。
在对上述的关键字进行了简单的介绍之后,进入本节的重点内容:
- 插入数据
INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES(10001, 'Coyote Inc.', '200 Maple Lane', 'Detroit', 'MI', '44444', 'USA', 'Y Lee', 'aaa@qq.com');
INSERT 语句一般不会产生输出。
在插入数据时,必须给出VALUE 的正确数目,若指定列名,则必须按列名次序依次填充所有列,若未制定列名,则需按次序依次填充表中所有列。也可以通过一次性插入多行的操作来提高INSERT 的性能。
- 更新数据
- 删除数据