SQL对数据库进行操作:
1.创建数据库
语法:create database 数据库名称 character set 字符集 collate 字符集校对规则
2.查看数据库
查看服务器的所有数据库:show database
查看某个数的定义信息:show create database 数据库名称
3.修改数据库
语法:alter database 数据库的名称 character set 字符集 collate 校对规则
4.删除数据库
语法:drop database 数据库名称
5.其他数据库
切换数据库:use 数据库名称
查看当前数据库:select database()
SQL对数据库表进行操作:
1.创建表
语法:create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束 )
类型:int float double char varchar
char和varchar的区别:char代表的是固定长度的字符串或字符 varchar代表的是可变长度的字符串
datatime和timestamp的区别:datatime是一个有日期又有时间的类型,如果没有向这个字段存值,数据库用null存入到数据中
timestamp是一个有日期又有时间的类型,如果没有向这个字段存值,数据库使用当前的系统时间
约束的作用:保证数据的完整性
单表约束分类:
1.主键约束:primary key auto_increment--自增
2.唯一约束:unique
3.非空约束:not null
2.查看表:
查看某个数据下的所有表:show tables
查看某个表的结构信息:desc 表名
3.删除表:
语法:drop table 表名
4.修改表:
1.添加列:alter table 表名 add 列名 类型(长度) 约束
2.修改类型,长度和约束:alter table 表名 modify 列名 类型(长度) 约束
3.删除列:alter table 表名 drop 列名
4.修改列名称:alter table 表名 change 旧列名 新列名 类型(长度) 约束
5.修改表名:rename table 表名 to 新的表名
6修改表的字符集:alter table 表名 character set 字符集
SQL对数据库表的记录进行操作:
1.添加表的记录:
语法:insert into 表名 (列名1,列名2,列名3) values(值1,值2,值3)---向表中插入某些列
insert into 表名 values(值1,值2,值3)---向表中插入所有列
添加中文记录:
注意事项:
1.值的类型与数据库中表列的类型一致。
2.值的顺序与数据库中表列的顺序一致。
3.值得最大长度不能超过列设置的最大长度。
2.修改表的记录:
语法:update 表名 set 列名=值;列名=值 【where 条件】
注意事项:
1.值的类型与值的类型要一致
2.字符串类型和日期类型要添加引号
3.删除表的记录:
语法:delete 表名 【where 条件】 rollback有恢复的意思
注意事项:
1.删除记录,指的是删除表中的一行记录
2.删除如果没有条件,默认是删除表中的所有记录
4.查看表的记录:
1.基本查询
语法:select [distinct]*from 表名 [条件]
2.条件查询
使用where句子
like--模糊查询 select * from exam where name like 'a_';
in--范围查询 select * from exam where englist in (56,32,35);
3.排序查询
在条件的后边加order by 字段名称 asc/desc;
select * from exam order by chinese;----默认升序
4.聚合函数查询
聚合函数使用--sun() count() max() min()
5.分组查询
语法:使用group by 字段名称
where的子句后面不能跟聚合函数
总结:select...from...where...group by...having...order by
重置MYSQL密码的步骤:
1.停止MYSQL服务
2.在cmd下启动MYSQL服务,输入--mysql --skip-grant-tables
3.重新开启cmd的命令行,输入--mysql -u root -p,然后不用输入密码
4.修改root的密码,先use mysql。在update user set password =password('新密码') where user='root'; 然后关掉所有cmd
5.结束mysqld的进程,先进入任务管理器,然后点详细信息,右键mysqld结束进程
6.重新启动mysql服务
数据库的还原:create database 表名
多表约束:
1.创建一个部门表:
create table dept(
did int PRIMARY KEY auto_increment,
dname varchar(20)
);
插入:
insert into dept values(null,'shichangbu');
insert into dept values(null,'renshibu');
insert into dept values(null,'jiaoyanbu');
2.创建一个员工表:
create table employee(
eid int PRIMARY KEY auto_increment,
ename varchar(20),
salary double,
birthday date,
sex varchar(20),
dno int
);
插入:
insert into employee values(null,'zhangsan',8000,'2001-04-27','nan',3);
insert into employee values(null,'lisi',5000,'2001-04-11','nv',3);
insert into employee values(null,'wangwu',9000,'2001-04-22','nan',3);
insert into employee values(null,'zhaoliu',6666,'2001-04-12','nv',3);
insert into employee values(null,'sunqi',3333,'2001-04-20','nv',3);
删除其中的某一个部门:delete from dept where did=2---删除renshibu
外键是dno,要指向主键
添加外键约束--alter table employee add foreign key (dno) references dept(did);
表与表的关系:
1.一对多的关系--需要创建外键
一对多的例子:一个部门下可以有多个员工的
2.多对多的关系--需要创建第三张表
多对多的例子:一个学生可以选择多门课程,一门课程可以被多个学生选择
3.一对一的关系
一对一的例子:一个公司可以有一个注册地址,一个注册地址只能对一个公司
多表查询:
一.连接查询
1.交叉连接--查询两个表的笛卡儿积
语法:select *from 表1 cross join 表二;
2.内连接--inner join
显示内连接语法:select * from 表1 inner join 表二 on 关联条件
隐式内连接语法:select * from 表1,表二 where 关联条件
3.外连接--outer join
1.左外连接语法:select * from 表1 left outer join 表2 on 关联条件
2.右外连接语法:select * from 表1 right outer join 表2 on 关联条件
二.子查询
1.带in的子查询
题目:查询学生生日在91年后的班级信息。
select * from classes where cid in (seelct cno from student where birthday>'1991-01-01');
2.带exists的子查询
题目:查询学生生日在91年后的班级信息。
select * from classes where exists (seelct cno from student where birthday>'1991-01-01');
3.带any的子查询
4.带all的子查询
MYSQL中的事务管理:---拿转账来做例子
开启事务:start transaction
提交事务:commit
回滚事务:rollback
事务的特性:
1.原子性--事务的不可分割
2.一致性--事务执行的前后,数据完整性保持一致
3.隔离性--事务执行不应该受到其他事务的干扰
设置事务的隔离级别--read uncommitted,read committed,repeatable read,serializable(最安全,效率最低)
4.持久性--事务一但提交,数据就持久化到数据库中