character_set_server:默认的内部操作字符集
character_set_client:客户端来源数据使用的字符集
character_set_connection:连接层字符集
character_set_results:查询结果字符集
character_set_database:当前选中数据库的默认字符集
character_set_system:系统元数据(字段名等)字符集

;MySQL常用的注解方式有两种:#..... /*....*/;
修改表
[可选项]
#修改表名
ALTER TABLE 旧表名 RENAME [TO]新表名;
#添加字段
ALTER TABLE 表名 ADD 字段名 数据类型[属性];
#修改字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性];
#删除字段
ALTER TABLE 表名 DROP 字段名;
添加主键
ALTER TABLE 表名 ADD CONSTRAINT 主键名(一般为PK_表名)
PRIMARY KEY 表名(主键字段);
添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名(一般为FK_外键表_主表) FOREIGN KEY(外键字段)
REFERENCES 关联表名(关联字段);
关联字段一般为关联表中的主键或具有唯一约束的键

DML语句 插入数据 更新数据 删除数据

插入单条数据记录
INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
字段名是可选的,如省略则依次插入所有字段
多个列表和多个值之间使用逗号分隔
值列表和字段名列表一一对应
如插入的是表中部分数据,字段名列表必填

插入多条数据
INSERT INTO 新表(字段名列表)
VALUES (值列表1),(值列表...值列表n);
为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!

将查询结果插入新表
句式1
INSERT INTO新表(字段1,
字段2...)
SELECT字段1,字段2.......
FROM 原表;
句式2
CREATE TABLE 新表(SELECT字段1,
字段2....)
FROM 原表;

更新数据记 录
UPDATE表名
SET字段1=值1,字段2=值...,字段n=值n
[WHERE条件];

删除数据记录
句式1
DELETE FROM表名[WHERE条件];
句式2 删除所有数据
TRUNCATE TABLE表名;
TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快


DQL语句 查询数据
SELECT <字段名列表>
FROM <表名或视图>
[WHERE <查询条件>]
[GROUP BY <分组的字段名>]
[HAVING <条件>]
[ORDER BY <排序的字段名>[ASC或DESC]] 升序或降序

LIMIT子句限制结果集
[ LIMIT [位置偏移量,] 行数];
使用LIMIT子句时,注意第1条记录的位置是0 !
位置偏移量:从第几条数据开始显示第一行为0 ,默认从第一行 0开始
行数:显示几行


常用函数-聚合函数
函数名 作用
AVG() 返回某字段的平均值
COUNT() 返回某字段的行数
MAX() 返回某字段的最大值
MIN() 返回某字段的最小值
SUM() 返回某字段的和
字符串函数
CONCAT(str1,str1...strn) 字符串连接
INSERT(str,pos,len,newstr) 字符串替换
LOWER(str) 将字符串转为小写
UPPER(str) 将字符串转为大写
SUBSTRING(str,num,len) 字符串截取
日期函数
CURDATE() 获取当前日期
CURTIME() 获取当前时间
NOW() 获取当前日期和时间
数学函数
CEIL(x) 返回大于或等于数值x的最小整数
FLOOR(x) 返回小于或等于数值x的最大整数
RANDO 返回0~ 1间的随机数

简单子查询
子查询是一-个嵌套在SELECT、INSERT、 UPDATE 或DELETE语句或
其他子查询中的查询
子查询在WHERE语句中的一-般用法
SELECT ... FROM 表1 WHERE 字段1 比较运算符(子查询)

先执行子查询,返回所有来自子查询的结果
再执行外围的父查询,返回查询的最终结果
将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个

使用子查询替换表连接
实现方法一:采用表连接 内连接(等值连接)
SELECT studentName 、FROM student stu
INNER JOIN 'result r ON stu.studentNO = r.studentNo
INNER JOIN 'subject sub ON r.subjectNo = sub.subjectNo
WHERE 'studentResult = 60 AND 'subjectName = 'Logic Java';

实现方法二:采用子查询 子查询
SELECT 'studentName FROM 'student' WHERE 'studentNo = (
SELECT 'studentNo FROM result
INNER JOIN Subject 、ON result.subjectNo= subject.subjectNo
WHERE studentResult =60 AND subjectName ='Logic Java');

■S子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据
表连接更适合于查看多表的数据

■可以通过两种方式关联多表查询
表连接 合并多个数据表中的字段
子查询 将一个查询嵌套在另一个查询中

IN子查询
SELECT 'studentName FROM 'student
WHERE studentNo IN( 将=号改为IN
SEL ECT 'studentNo FROM 'result
WHERE subjectNo^ =(
SELECT 'subjectNo FROM 'subject'
WHERE 'subjectName ='Logic Java'
)AND 'studentResult = 60
);
常用IN替换等于( = )的子查询
IN后面的子查询可以返回多条记录


NOT IN子查询不包含


比较运算符后面的子查询只能返回单个数值
IN子查询可跟随返回多条记录的子查询