数据库--1
事物处理:把几个SQL语句组合一起,同时成功、有一个失败所有语句组合都返回
数据行锁定:有人修改数据库的时候,会锁定正在修改的语句
全文索引:相当于字典的目录,有便于查询
使用MyISAM: 不需事务,空间小,以查询访问为主
使用InnoDB: 多删除、更新操作,安全性高,事务处理及并发控制
查看当前默认存储引擎
SHOW VARIABLES LIKE ‘storage_engine%’;
修改存储引擎
:修改my.ini配置文件
default-storage-engine= InnoDB
设置表的存储引擎:
语法:CREATE TABLE 表名(
#省略代码
)ENGINE=存储引擎;
示例:CREATE TABLE myisam
(
id INT(4)
)ENGINE=MyISAM;
MyISAM类型表文件
1:*.frm:表结构定义文件
2:
*.MYD:数据文件
3:
*.MYI:索引文件
InnoDB类型表文件
1:
*.frm:表结构定义文件
2:
ibdata1文件
存储位置:因操作系统而异,可查my.ini
datadir=“C:/ProgramData/MySQL/MySQL Server 5.5/Data/”
innodb_data_home_dir=“D:/MySQL Datafiles/”
DML语句–插入单条数据记录:
语法:INSERT INTO 表名【(字段名列表)】VALUES(值列表)
示例:
INSERT INTOstudent
(loginPwd
,studentName
,gradeId
,phone
,bornDate
)
VALUES(‘123’,‘黄小平’,1,‘13956799999’,‘1996-5-8’);
注意:
1:字段名是可选的,如省略则依次插入所有字段
2:
多个列表和多个值之间使用逗号分隔
3:
值列表和字段名列表一一对应
4:如插入的是表中部分数据,字段名列表必填
插入多条数据记录:
INSERT INTO 新表(字段名列表)
VALUES(值列表1),(值列表2),……,(值列表n);
INSERT INTO subject
(subjectName
,classHour
,gradeID
)
VALUES(‘Logic Java’,220,1),(‘HTML’,160,1),(‘Java OOP’,230,2);
为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!
将查询结果插入新表:主要用来备份
CREATE TABLE phoneList
(
SELECT studentName
,phone
FROM student
);
注:查询student内studentName,
phone的值 插入到新建表phoneList中
将查询结果插入新表:
CREATE TABLE 新表(SELECT 字段1,字段2…… FROM 原表);
CREATE TABLE phoneList
(
SELECT studentName
,phone
FROM student
);
更新数据记录:
UPDATE 表名
set 字段1=值1,字段n=值n;
UPDATE student SET sex = ‘女’;
UPDATE student SET address = ‘北京女子职业技术学校家政班’
WHERE address = ‘北京女子职业技术学校刺绣班’;
删除数据记录:
DELETE FROM 表名 [WHERE条件];
TRUNCATE TABLE 表名;
DELETE FROM student WHERE studentName = ‘王宝宝’;
TRUNCATE TABLE student;
TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快
删除数据记录:
DELETE FROM 表名 [WHERE条件];#一条条的删除
TRUNCATE TABLE 表名;#全部删除此表
DELETE FROM student WHERE studentName = ‘王宝宝’;
#删除student内studentName王宝宝
TRUNCATE TABLE student;删除整个student表
TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快
查询:
查询产生一个虚拟表
看到的是表形式显示的结果,但结果并不真正存储
每次执行查询只是从数据表中提取数据,并按照表的形式显示出来
查询语法:
SELECT <列名|表达式|函数|常量>
FROM <表名>
[WHERE <查询条件表达式>]
[ORDER BY <排序的列名>[ASC或DESC]];
示例:
SELECT studentNo
,studentName
,phone
,address
,bornDate
FROM student
WHERE gradeId
= 1
ORDER BY studentNo
;
查询全部的行和列:SELECT * FROM phoneList;
查询部分列:
SELECT studentNo
,studentName
,address
FROM student
WHERE address
=‘河南新乡’;
使用AS命名列:
SELECT studentNo
AS 学生编号,studentName
AS 学生姓名,address
AS 学生地址
FROM student
WHERE address
<> '河南新乡‘;
SELECT firstName
+ ‘.’ + lastName
AS 姓名
FROM employees
;
查询空行:
SELECT studentName
FROM student
WHERE email
IS NULL;
使用常量列:
SELECT studentName
AS 姓名,address
AS 地址,
’北京信息中心’ AS 学校名称
FROM student
;
聚合函数:
AVG() 返回某字段的平均值
COUNT() 返回某字段的行数
MAX() 返回某字段的最大值
MIN() 返回某字段的最小值
SUM() 返回某字段的和
select avg(r.studentresult) from result r;#求平均分
ORDER BY子句实现按一定顺序显示查询结果:
把成绩都降低10%后加5分,再查询及格成绩,并按照成绩从高到低排序
SELECT studentNo
AS 学生编号,(studentResult*0.9+5 ) AS 综合成绩
FROM result
WHERE (studentResult
*0.9+5) >=60
ORDER BY studentResult DESC;
MySQL查询语句中使用LIMIT子句限制结果集:
SELECT <字段名列表>
FROM <表名或视图>
[WHERE <查询条件>]
[GROUP BY <分组的字段名>]
[ORDER BY <排序的列名>[ASC 或 DESC]]
[LIMIT [位置偏移量,]行数];
SELECT studentNo
,studentName
,phone
,address
,bornDate
FROM student
WHERE gradeId
= 1
ORDER BY studentNo
LIMIT 4,4;#从第五条开始显示四条—limit分页显示
注意:第1条记录的位置是0!