第3章 基础SQL命令的使用
- MySQL交互操作过程中使用的语言是SQL。
- SUBSTRING(s,n,len)函数用于从字符串s的第n个位置开始获取长度为len的字符串
SQRT(x)函数用于求参数x的平方根
rand()函数用于生成0-1之间的随机浮点数
NOW()函数返回当前语句执行时的日期和时间
指定时间与日期的数据类型是DATETIME。
IFNULL()函数用于测试第一个参数是否为NULL,如果不是则返回第一个参数,如果是则返回第二个参数。 - MySQL的查询语句中必不可少的部分是SELECT 子句。
- 当使用CREATE DATABASE命令在MySQL中创建数据库时,为避免因数据库同名而出现的错误,通常可在该命令中加入IF NOT EXISTS。
- 在MySQL中创建数据库时,为避免出现数据库已经存在而再次新建的错误,需要在CREATEDATABASE语句中使用的语法选项是IF NOT EXISTS。
- SQL中修改表结构的语句是ALTER TABLE。
- 删除数据表student的语句是DROP TABLE student。
- SQL语言中,删除一个数据库对象的命令是DROP。
- 在DROP USER语句的使用中,若没有明确指定账户的主机名,则该账户的主机名默认为是%。
| DROP、TRUNCATE、DELETE命令均能删除数据表中的数据 | |
|---|---|
| DROP | 删除表中内容和定义,释放空间 |
| TRUNCATE | 删除内容、释放空间但不删除定义 |
| DELETE | 删除内容不删除定义,不释放空间 |
- 在DELETE语句中使用WHERE子句用来限定删除记录的条件,不使用WHERE子句则删除指定数据库中的全部数据。
- 在MySQL中,使用DROP DATABASE删除数据库时,仅删除数据库,该数据库上所有的用户权限仍然保留。
- MySQL数据库中最小授权对象是列。
- 修改表中数据的命令是UPDATE;修改表结构的命令是ALTER;撤销用户的权限应使用的语句是REVOKE。
在MySQL中,若要回收某个用户对一个表中列的某些操作权限,其基本语法格式为:
REVOKE 权限名(列名) ON 表名 FROM '用户名'@'主机名';
- 使用SELECT INTO...OUTFILE语句把表数据导出到一个文本文件中进行备份,其基本语法格式为:SELECT* FROM 数据库.数据表 INTO OUTFILE 文件路径名。
如:语句
SELECT * FROM db_test.tb_customer INTO OUTFILE'D:/test.txt';的功能是将db_test数据库中tb_customer表的全部数据备份到D盘的test.txt文件中。在MySQL中,使用SELECT INTO...OUTFILE语句只能导出或导入数据的内容,而不包括表的结构。
- 创建视图:
sql
CREATE VIEW 视图名 [(列名1 [, 列名2 ...])]
AS
SELECT 查询语句;
CREATE VIEW 数据库名.对象名
AS
SELECT 查询语句;
在ALTER TABLE命令中使用ADD能够添加字段名和数据类型,基本语法格式为:ALTER TABLE 表名 ADD[COLUMN] 列名 数据类型 约束条件。
如:向Student表增加入学时间"EDate"列,其数据类型为日期型
ALTER TABLE Student ADD EDate Date;
在ALTER TABLE命令中使用CHANGE能够更改字段名和数据类型,基本语法格式为:ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型。
如:要将员工表tb_emp中的年龄字段age更名为出生年份birth
ALTER TABLE tb_emp CHANGE COLUMN age birth YEAR(4);
在ALTER TABLE命令中使用MODIFY能够修改表中某列的数据类型,基本语法格式为:ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型
如:若要将数据表tb_S中的Sage的数据类型改为TINYINT
ALTER TABLE tb_S MODIFY SageTINYINT;
SELECT ... ORDER BY 标准语法:
sql
SELECT [ALL | DISTINCT] 列名1 [, 列名2, ...]
FROM 表名
[WHERE 条件]
[GROUP BY 列名]
[HAVING 分组条件]
ORDER BY 列名 [ASC | DESC] [, 列名 [ASC | DESC], ...];
ASC------升序排列(默认值,可省略)
DESC------降序排列
- 创建账户的语句为:
CREATE USER 用户名@主机名 IDENTIFIED BY 密码; - GROUP BY用于查询语句的分组,通常与SELECT配合使用,不与DELETE一起使用。
- 在MySQL中,可用于创建一个新数据库的SQL语句为CREATE DATABASE。
- 在MySQL中,显示所有数据库的语句是SHOW DATABASES。
- 查看指定用户所拥有权限的语句是SHOW GRANT。
- 在CREATE TABLE语句中,用来指定外键的关键字是FOREIGN KEY。
- 设当前用户正在操作数据库db1,现该用户要求跳转到另一个数据库db2,可使用的SQL语句是USE db2;。
- 指定一个数据库为当前数据库的SQL语句语法格式是USE db_name;。
- NOT NULL表示Sno属性值不能为空,UNIQUE表示Sno属性值唯一,不可重复,AUTO_INCREMENT表示Sno属性值从初始值1开始自增长,当插入第一条数据时,Sno属性值为1。
- AUTO_INCREMENT默的初始值为1,当往一个定义为AUTO_INCREMENT列中插入NULL值或数字0时,该列的值会被设置为value+1(默认为加1递增),不能直接填充数字1。
- AUTO_INCREMENT只有==整型列(INT)==才能设置。
- MySQL所支持的字符串匹配中,通配符有%和_,%代表任意长度字符,_代表任意单个字符;ESCAPE'+'表示+是转义字符。
- 与CREATE DATABASE命令等同的是CREATE SCHEMA。
- 修改数据库默认字符集即修改表本身,变更原来表的结构,要使用ALTER关键字,使用ALTER SCHEMA语句或ALTER DATABASE语句。
- MySQL默认显示日期的格式:'YYYY-MM-DD'。
- UNION用于合并两个或多个SELECT语句的结果集,相当于集合操作中的并运算,会消去重复行。
- 设置属性的默认值时不能直接使用SET关键字,要配合ALTER关键字使用,或可以换用CHANGE关键字或MODIFY关键字,只有DEFAULT关键字是必须的。
sql
//如:给属性Sage增加缺省值18
ALTER TABLE tb_student CHANGE Sage Sage TINYINT DEFAULT 18;
ALTER TABLE tb_student MODIFY Sage TINYINT DEFAULT 18;
ALTER TABLE tb_student ALTER Sage SET DEFAULT 18;
ALTER TABLE tb_student SET Sage DEFAULT 18; //×
- 查询一个表中总记录数的SQL语句语法格式是SELECT COUNT(*) FROM tbl_name。
- 要消除查询结果集中的重复值,可在SELECT语句中使用关键字DISTINCT。
- 对数据表的删除主要包括:删除表中的行、表中的列、整个数据表。(删除表的表名×)
- 在MySQL的SQL语句中,要实现类似分页功能的效果,可使用LIMIT。
- 语句中各类子句的先后执行顺序,依次为:from、join、on、where、group by、聚合函数、having、select、 distinct、order by、limit。
- 使用UPDATE语句同时修改多个表,会同时修改表关联中满足限定条件的每个表,在这种修改中可以使用的子句是WHERE。
- SQL基本的使用方式(环境)有两种,分别是交互式和嵌入式。
- MySQL中使用关键字REGEXP指定正则表达式的字符匹配模式,^表示匹配文本的开始字符,|表示或。
- 在SQL语言中,子查询(又称嵌套查询)是嵌入到另一个查询语句之中的查询语句。
- WHERE后边不能跟聚合函数,以及HAVING关键字不能单独使用,需要配合GROUP BY关键字使用。
- 在MySQL中,使用"+"进行字符连接时,mysql会尝试将字段值转换为数字类型,如果转换失败,就当做数字0处理。
- SQL语言一次查询的结果是一个记录集。
- LIMIT子句用于限制SELECT语句返回指定的记录数,第一个参数表示初始记录行的偏移量,第二个参数表示记录个数,注意初始记录行的偏移量从0开始。
如:LIMIT 1,3
则显示满足查询条件的记录为第2、3、4条。
LIMIT 1,3是从第一条数据向后偏移1,即第二条数据开始,返回3条数据,即第2、3、4条数据
- 子查询中可以使用运算符ANY表示至少一个值满足条件,ALL表示所有的值都满足条件。
- 在MySQL数据库中,可以在服务器、数据库、表等级别上指定缺省字符集,而这些字符集的设定将作用于CHAR、VARCHAR、TEXT等字符类型的字段。
- 统计表中所有记录个数的聚集函数是COUNT。
聚合函数COUNT(*)统计数据表中所有记录数目,包括没有数据的空行
- 在使用游标时,实际完成数据读取任务的语句是FETCH...INTO...。
- 重定义MySQL的命令行结束符,应该使用DELIMITER。
- 在MySQL中编写函数、存储过程时,合法的流程控制包括条件判断语句IF-THEN-ELSE语句和CASE语句、循环语句、WHILE语句、REPEAT语句和LOOP语句。(DO...WHILE、FOR循环语句×)
- 在MySQL中,INSERT触发器操作数据时,可以使用的临时表是NEW。
- 在MySQL中,对事件、存储过程、存储函数、基本表、索引、视图等的修改均可以使用ALTER命令。(触发器×)
- 修改用户登录口令的命令是SET PASSWORD;修改用户口令的语句是SET PASSWORD。
修改用户口令的命令为:
SET PASSWORD[FOR user]={ PASSWORD(new_password')'encrypted password'};
- mysql -u root-p test<test.sql表示使用备份文件test.sql将数据库test恢复。
- 全部操作权限授予给用户的基本语法格式为:
GRANT ALL ON 表名 TO 用户1,用户2...;。 - USAGE ON*.*表示该用户对任何数据库的任何数据表都没有权限。
- 使用CREATE USER语句创建MySQL账户时,若需设置账户口令,应使用的子句为IDENTIFIED BY。
- 在MySQL中,MyISAM格式的数据表所对应的存储文件包括.frm文件、.MYD文件和.MYI文件。(.ISD文件×)
- MySQL的权限共分为五种,全局、数据库、数据表、列、赋予权限的权限。
- 在MySQL中进行授权操作时,可根据需要指定的选项为:被授权用户的用户名、登录地点、可操作的数据库对象、欲授权的权限种类。
- 在GRANT授权语句中,WITH GRANT OPTION的含义是允许该用户将此权限转移授予其他用户。
- FIELDS ENCLOSED BY子句用来指定包裹文件中字符值的符号;FIELDS TERMINATED BY用来指定字段值以何种字符为分隔符。
- 在GRANT ALL ON *.* TO...授权语句中,ALL和*.*的含义分别是所有权限、所有数据库表。
- 在MySQL中可清除所有日志文件的语句是RESET MASTER。
- 在安装和配置MySQL实例的向导中,选择决策支持型(OLAP)实例或者联机事务处理(OLTP)型实例的主要区别在于并发连接数不同。
决策支持型(OLAP)服务器支持的默认并发用户数为20,联机事务处理(OLTP)型服务器支持的默认并发用户数为500。
- 在MySQL数据库中,使用LOAD DATA...INFILE语句恢复数据的过程中,为了保证与备份时的特殊分隔符一致,可以使用TERMINATED BY子句。
第4章 索引的使用
在使用CREATE INDEX创建索引时,其默认的排序方式是升序。
MySQL中,创建索引的方法有三种,分别是CREATE TABLE、ALTER TABLE、 CREATE INDEX。
在MySQL中,删除索引的命令有:ALTER TABLE、DROP INDEX、DROP TABLE。(ALTER INDEX×)
PRIMARY KEY是主码约束,UNIQUE是唯一性约束,一张表中主码约束只能有一个,但唯一性约束可以在多列上设置,且允许属性值为空,两者作用不一样。
删除属性上的UNIQUE约束有两种方法:DROP INDEX<索引名>ON<表名>;或ALTER TABLE <表名> DROP INDEX <约束名>;
索引需要占物理空间,不存储在内存;一个表可以有多个索引,但只能有一个聚簇索引,只有唯一性索引要求索引列值不能重复;索引是搜索信息在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录,从而提高检索效率。
在MySQL数据库中,创建唯一索引的基本语法格式为:CREATE UNIQUE INDEX 索引名 ON 表名 (列名)[ASC|DESC]
在MySQL中,声明游标的语法格式为:DECLARE cursor_name CURSOR FOR select_statement;
系统默认的索引存储类型是BTREE,使用col_name(length)命令表示根据col_name属性前length个字符采用BTREE索引类型。
创建索引。
第6章 触发器的使用
激活触发器的命令是:INSERT、DELETE、UPDATE。
触发器是由数据表上的特定事件所触发,可由INSERT、DELETE、UPDATE触发,不带有参数,不可建立在视图上。
当触发器涉及对触发表自身的更新操作时,使用的触发器必须是BEFORE UPDATE。
在MySQL中,触发器不能建立在视图上。
查看触发器内容的语句是SHOW TRIGGERS;。
查看触发器的语法格式为:
SHOW TRIGGERS [{FROM|IN} db_name]
在MySQL中,同一个表不能拥有两个具有相同触发时刻和事件的触发器。
现要求删除MySQL数据库中已创建的事件,通常使用的语句是DROP EVENTS。
在MySQL中创建事件时,指定的执行时机包括单次计划任务或重复计划任务。
在MySQL中,每个表上最多可以允许有6个触发器。
在INSERT触发器中,对于AUTO_INCREMENT列,NEW在INSERT执行之前包含的值是0。
MySQL中能激活触发器的所有语句为INSERT, UPDATE, DELETE, LOADDATA, REPLACE。
在MySQL中,INSERT的BEFORE触发器不仅能被MySQL中的INSERT语句激活,也能被LOAD DATA语句激活,UPDATE触发器由MySQL中的UPDATE语句激活,DELETE触发器由MySQL中的DELETE和REPLACE语句激活。
第7章 存储过程和存储函数
MySQL提供的内置函数中,NOW()、LOCALTIME()、SYSDATE()可以获取当前日期和时间。
在MySQL中,存储过程、存储函数、触发器均可以声明和使用游标。(交互式SQL查询×)
将游标连接到由SELECT语句返回的结果集的命令是OPEN。
MySQL的存储函数中,能够返回函数值的方式是RETURN。
存储过程与存储函数的区别之一是存储过程不能包含RETURN语句。
MySQL中,在存储函数中用户变量、局部变量均可使用,用户变量使用SET定义,必须以'@'开头,局部变量使用DECLARE声明,只在BEGIN-END语句块中使用。
调用存储函数的命令是SELECT;调用存储过程的命令是CALL。
第8章 PHP的MySQL数据库
使用PHP进行MySQL编程时,读取结果集中记录的函数包含:mysql_fetch_array()、mysql_fetch_row()、mysql_fetch_assoc()。
PHP中,选定某个数据库的函数是mysql_select_db。
用PHP进行MySQL数据库编程基本步骤包括:选择数据库、建立与MySQL数据库服务器的连接,关闭数据库。
图形化用户界面的MySQL管理工具有:phpAdmin、Navicat、MySQL Workbench。
使用图形化管理工具phpMyAdmin操作MySQL数据库,所对应的数据库运行与应用结构是浏览器/服务器结构(Browser/Server, B/S)。
binlog开启后会略微降低数据库系统的性能,并且该日志的保存也会占用额外的存储空间。