1.命令行开启关闭mysql
net start mysql57 //57是自己安装的mysql版本号
net stop mysql57
2.命令行进入mysql
mysql -u root -P3307 -p //root是用户名 -P3307是端口号
3.创建数据库+查看数据库+用数据库+删除数据库
create database xsgl;
show database;//查看系统中已有的数据库
use xsgl;//使用数据库 use+数据库名字
drop database xsgl;
4.查看数据库中已有的表
show tables;
5.查看mysql数据库中存储用户信息的表user的内容
select user from user;
6.创建表
字段约束和属性
1.非空约束 not null(字段不允许为空)
2.默认约束 default(设置默认值)
3.唯一约束 unique key(uk)(设置字段的值是唯一的,可为空,但只能有一个空值)
4.主键约束 primary key(pk)(作为表记录的唯一标识)
5.外键约束 foreign key(fk)(用于两个表之间建立关系,需要指定引用主表的哪一字段。在数据库的存储引擎中InnoDB支持外键,MyISAM不支持外键。
作为外键的字段要求是主表中的主键(单字段主键))
添加外键约束:
CONSTRAINT FK_外键名 FOREIGN KEY(字表中外键字段)REFERENCES 关联表名 (关联字段)。
CREATE TABLE xsxx
(
cno CHAR(10)NOT NULL,//not null指该字段不能为空
NAME CHAR(20)NOT NULL,
birthday DATE NOT NULL,
sex CHAR(2) NOT NULL DEFAULT '1',//default指默认为1
PRIMARY KEY(cno)//设置主键
)ENGINE=INNODB;//mysql数据存储引擎 常用两种innodb和MyISAM
7.删除表Delete/Drop/Truncate
drop table xsxx2;
TRUNCATE TABLE xs2;//删除表
8.向表中插入数据
#insert 插入
INSERT INTO xs VALUES('123','张三','1999-01-01','1');//学号、姓名、出生日期、性别
#replace 插入
REPLACE INTO xs VALUES('124','李四','1999-02-01','0');
9.创建另一个空表xs2,结构和xs表完全相同,使用INSERT INTO语句将xs表中的数据添加到xs2中
CREATE TABLE xs2 LIKE xs;
INSERT INTO xs2 SELECT * FROM xs;
SELECT * FROM xs2;
10.修改表中的某些数据
UPDATE xs SET sex='0' WHERE cno='123'; //update...set
11.删除表中的数据
DELETE FROM xs WHERE cno='125'; //删除delete from 插入insert into
12.删除成绩小于70的学生信息
#xs学生表 xs_kc成绩表 kc 课程表
DELETE FROM xs WHERE `学号`IN (SELECT `学号` FROM xs_kc WHERE `成绩`<70);
13.查询employees表中的员工姓名和性别,要求gender的值为1显示男,0显示女
SELECT NAME AS 姓名,
CASE
WHEN gender='1' THEN '男'
WHEN gender='0' THEN '女'
END AS 性别
FROM employees;
14.查询表中姓王的
SELECT `姓名` FROM xs WHERE `姓名`LIKE '王%';//以开头
SELECT `姓名` FROM xs WHERE `姓名`LIKE '%王';//以王结尾
SELECT `姓名` FROM xs WHERE `姓名`LIKE '%王%';//包含王
SELECT * from table1 where name like ‘%[0-9]%’;//含有数字的
select * from table1 where name like ‘%[!0-9]%’;//不含有数字的
select * from table1 where name like ‘%[a-z]%’;//含有小写字母的
15.使用内连接的方法查询名字为“王林”的员工所在的部门
SELECT departmentname
FROM departments JOIN employees
ON departments.departmentid=employees.departmentid
WHERE employees.name='王林'
16.select distinct语句
SELECT DISTINCT 语句用于返回唯一不同的值
SELECT DISTINCT `性别` FROM xs;
17.order by语句
ORDER BY 关键字用于对结果集进行排序。
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序(ASC)对记录进行排序。
SELECT * FROM xs_kc ORDER BY `成绩` ASC;//从小到大 升序
SELECT * FROM xs_kc ORDER BY `成绩` DESC;//从大到小 降序
18.gruop by语句
根据by对数据按照哪个字段进行分组,或者是哪几个字段进行分组
对于过滤条件,可以先用where,再用group by或者是先用group by,再用having
select 字段 from 表名 where 条件 group by 字段
或者
select 字段 from 表名 group by 字段 having 过滤条件
SELECT `课程号` FROM kc WHERE `课程号`<'120'GROUP BY `课程号` ;//where在前
SELECT `课程号` FROM kc GROUP BY `课程号` HAVING `课程号`<'120';//having在后
19.用数据库命令查看当前日期
SELECT SYSDATE();
20.常用函数
1.聚合函数
(1)AVG (平均值):select avg(列名)from 表名
SELECT AVG(`成绩`)FROM xs_kc;
(2)count 返回某字段的行数
SELECT COUNT(`成绩`)FROM xs_kc;
(3)max 返回某字段的最大数
SELECT MAX(`成绩`)FROM xs_kc;
(4)min 返回某字段的最小值
SELECT MIN(`成绩`)FROM xs_kc;
(5)sum 返回某字段的和。
SELECT SUM(`成绩`)FROM xs_kc;
2.字符串函数
(1)concat() 连接字符串s1,s2…sn为一个完整的字符串。
SELECT CONCAT("hello","world");
(2)insert(s1,p1,n,news)将字符串s1从p1位置开始,n个字符长的字串替换为字符串news。
SELECT INSERT("hello",1,2,"world");//p1从1开始 输出为worldllo
(3)lower(s)将字符串s中的所有字符改为小写。
SELECT LOWER("HeLlo");
(4)upper(s)将字符串s中的所有字符改为大写。
SELECT UPPER("HeLlo");
(5)substring(s,num,len)返回字符串s的第num个位置开始长度为len的子字符串。
SELECT SUBSTRING("HeLlo",1,3);//输出为HeL
3.时间日期函数
(1)获取当前日期:curdate(); 年-月-日
(2)获取当前时间:curtime(); 时-分-秒
(3)获取当前日期和时间:now();年-月-日 时-分-秒
(4)返回日期date为一年中的第几周:week(date);
(5)返回日期date的年份:year(date);
(6)返回时间time的小时值:hour(time); 11:10:10 返回11
(7)返回时间time的分钟值:minute(time);11:10:10 返回10
(8)返回日期参数(date1和date2之间相隔的天数):datediff(date1,date2);
SELECT DATEDIFF("2021-02-14","2021-02-20");//输出-6
SELECT DATEDIFF("2021-02-20","2021-02-14");//输出6
(9)计算日期参数date加上n天后的日期:adddate(date,n);
SELECT ADDDATE("2021-02-20",8);//2021-02-28
4.数学函数
(1)返回大于或等于数值x的最小整数:ceil(x);
(2)返回小于或等于数值x的最大整数:floor(x);
(3)返回0~1之间的随机数:rand();
21.LIMIT语句
#查询学生信息里总学分=50按学号升序排列前四条记录(步长)
SELECT `学号`,`姓名` FROM xs WHERE `总学分`=50 ORDER BY `学号` LIMIT 3;//输出符合条件的3行数据
#查询学生信息里总学分=50按学号升序排列前四条记录(位置偏移量,步长)
SELECT `学号`,`姓名` FROM xs WHERE `总学分`=50 ORDER BY `学号` LIMIT 3,3;//前三条以后的全部信息中的前三条学生信息
22.MySQL的事务,视图,索引,备份和恢复
1.事务
事务是指将一系列数据操作捆绑成为一个整体进行统一管理。把所有的命令作为一个整体一起向系统提交或者撤销造组偶请求。
事务属性:原子性,一致性,隔离性,持久性。
MyISAM存储引擎不支持事务。
关闭事务自动提交:set autocommit=0;
(1)开始事务:begin/start transaction;
(2)提交事务:commit;
(3)回滚/撤销事务:rollback;
恢复自动提交:set autocommit=1;
2.视图
视图是一种查看数据库中一个或多个表中数据的方法。视图是一种虚拟表,作为来自一个或多个表的行或列的子集创建的。视图充当查询中的表筛选器的角色。
(1)创建视图:create view 视图名 as <select语句>
(2)删除视图:drop view 视图名;
(3)查看视图数据:select …from 视图名;
3.索引
索引类似于书的目录,使用索引可以将数据库程序无须对整个表扫描就可以在其中找到所需数据。
(1)普通数据:允许重复和空值。
(2)唯一索引:不允许出现重复。可以有多个唯一索引。
(3)主键索引:非空,唯一。删除时drop primary key;
(4)复合索引:将多个列组合作为索引。?
(5)全文索引:可重复和空值,在char,varchar,text创建。
where match(列名)against (‘查找内容’);
(6)空间索引:对空间数据类型的列建立的索引。
创建索引:
create 【索引类型】index 索引名 on 表名 (创建索引的列);
或者创建表时之间在列后面加上索引类型。
或者修改表alter table 表名 add index 索引名 (索引列);
删除索引:drop index 索引名;
查看索引:show index from 表名;
4.数据库备份和恢复
1.使用mysqldump命令备份数据库
mysqldump -u -p 数据库名>备份数据库位置及名字;
表数据导出到文本文件
select *from 表名 where 查询条件 into outfile 备份数据库位置及名字;
2.使用mysql命令恢复数据库(先创建新的数据库)
mysql -u -p 新创建数据库名<所要恢复数据库位置及文件名;
source命令恢复数据库
source 数据库备份文件;