什么是数据库呢?
简单明了就是存储数据的库,它是通过一定的数据结构来进行组织和操作的,例如MySQL、DB2、Oracle、SQL Server、MariaDB等等目前最常用的就是MySQL和Oracle
什么是MYSQL?
MySQL是将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
数据库类型
当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。
非关系型数据库有 NoSql、Cloudant、redis。
1.关系型数据库
关系型数据库把所有的数据都通过行和列的二元表现形式表示出来。
关系型数据库的优势:1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。2. 事务支持使得对于安全性能很高的数据访 问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势,反之亦然。
2.非关系型数据库
非关系型数据库的优势:1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。
2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
SQL结构化查询语言
必须是通过服务器,连接我们的数据库,才能进行操作
使用各种SQL语句、增、删、改、查
1.数据定义语言(DDL):
用于定义和管理数据对象,包括数据库,数据表等。例如:CREATE,DROP,ALTER等。
数据库 -> 数据表:对数据库或数据表的创建、删除、修改等操作
2.数据操作语言(DML):
用于操作数据库对象中所包含的数据。例如:INSERT,UPDATE,DELETE语句。
对数据的 增、删、改 这些操作,就是数据操作语言
3.数据查询语言(DQL):
用于查询数据库对象中所包含的数据,能够进行单表查询,
连接查询,嵌套查询,以及集合查询等各种复杂程度不同的数据库查询,并将数据
返回客户机中显示。SELECT
4.数据控制语言(DCL):
是用来管理数据库的语言,包括管理权限及数据更改。
对数据库的操作
1.创建数据库
create database 数据库名;
注意:
1.如果数据库已存在,不能创建同名的数据库
2.创建命令和数据库名都不区分大小写
if not exists 如果数据库已存在,加上前面的关键字可以避免报错
2.删除数据库
drop database 数据库名;
3.查看已创建的数据库
show databases;
4.使用一个数据库
use 数据库名;
5.查看当前我们所使用的数据库
select database();
6.查看建库语句
show create database 数据库名;
说明:通过该命令,我们可以看到所建数据库的建库语句、编码类型;
注意:
1.MySQL数据库中命令不区分大小写。
2.每创建一个数据库,就会在data目录下创建一个以此数据库名称命名的文件夹。
3.在Windows下,数据库名称也是不区分大小写的,但在Linux下,数据库名称严格区分大小写。
用户权限
用户管理:
创建用户 create user '用户名'@'IP地址' identified by '密码'; 删除用户 drop user '用户名'@'IP地址'; 修改用户 rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';
权限管理:
show grants for '用户'@'IP地址' -- 查看权限
grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权
revoke 权限 on 数据库.表 from '用户'@'IP地址' -- 取消权限
all privileges 除grant外的所有权限 select 仅查权限 select,insert 查和插入权限 ... usage 无访问权限 alter 使用alter table alter routine 使用alter procedure和drop procedure create 使用create table create routine 使用create procedure create temporary tables 使用create temporary tables create user 使用create user、drop user、rename user和revoke all privileges create view 使用create view delete 使用delete drop 使用drop table execute 使用call和存储过程 file 使用select into outfile 和 load data infile grant option 使用grant 和 revoke index 使用index insert 使用insert lock tables 使用lock table process 使用show full processlist select 使用select show databases 使用show databases show view 使用show view update 使用update reload 使用flush shutdown 使用mysqladmin shutdown(关闭MySQL) super 使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆 replication client 服务器位置的访问 replication slave 由复制从属使用
例如:
创建用户
create user 'user1'@'127.0.0.1' INDENTIFIED '123456';
#授权方式一:为用户授权 db1数据库下的所有表的 查询、修改、删除权限
grant select,update,delete on db1.* to 'user1'@'127.0.0.1';
#授权方式二:为用户授权 所有库的所有权限(除grant权限外)
grant all privileges on *.* to 'user1'@'127.0.0.1';
修改密码
方式一: mysqladmin 命令
输入cmd进入对话框
mysqladmin -u用户名 -p密码 password 新密码
方式二: 直接设置用户密码
set password for '用户名'@'IP' = password('新密码')
flush
privileges
;
方式三:修改mysql库下的user表
5.7版本修改密码方式: update mysql.user set authentication_string=password('新密码') where user= '用户名' flush privileges; -- 刷新权限 5.6 版本 update mysql.user set password = password('新密码') where user= '用户名' flush privileges; -- 刷新权限
对数据表的操作
表中的字段,其实可以理解为table表格中的表头
1>创建数据表(不加任何主键信息,自增,数据限制条件的简易数据表创建)>最初练习可用
create table 表名(
字段名1 字段类型,
字段名2 字段类型,
字段名3 字段类型
);
注意:
1.创建一个数据表时,它的每个字段之间用逗号","隔开;
2.最后一个字段不用逗号",";
3.创建完表以后,最后的括号后面使用分号结束
4.建表时,表名后面的括号中写表的字段名(字段类型)
create table user(
id int not null auto_increment primary key,
name varchar(50) null,
email varchar(100) not null,
course_id int,
foreign key(course_id) references course(cid)
)engine = innodb default charset utf8;
ps: not null :表示此列不能为空
auto_increment :表示自增长,默认每次增长+1
注意:自增长只能添加在主键或者唯一索引字段上
varchar 表示字符串的长度是可变的
primary key :表示主键(唯一且不为空)
engine =innodb :表示指定当前表的存储引擎
default charset utf8 :设置表的默认编码集
2> 查看表结构
desc 表名;
3> 查看建表语句
show create table 表名;
4> 查看当前数据库存在的数据表
show tables;
5> 删除数据表
drop table 表名
6> 修改数据表
添加列 ALTER table 表名 add 列名 类型 删除列 ALTER table 表名 drop column 列名 修改列 : alter table 表名 modify column 列名 类型; alter table 表名 change 原列名 新列名 类型; 添加主键: alter table 表名 add PRIMARY key (列名) 删除主键: alter table 表名 drop PRIMARY key 移除主键时先去掉自增属性 alter table 表名 modify id int null , drop PRIMARY key; 修改默认值: 设置默认值:alter table 表名 alter 列名 set default ' haha ' 删除默认值:alter table 表名 alter 列名 drop default 修改表名称 rename table info1 to info; -- 修改表名 复制表 1.CREATE table info3 select * from info where id =1; ps:主键自增/索引/触发器/外键 不会 被复制 2.复制表结构 CREATE table info5 SELECT * FROM info where 1!=1 CREATE table info4 LIKE info; ps: 数据/触发器/外键 不会被复制
对数据的操作
1> 添加数据
① insert into 表名 (字段1,字段2……) values (值1,值2……); ② insert into 表名 values (值1,值2……),(值1,值2……); ③ insert into 表名 (字段1,字段2……) values (值1,值2……),(值1,值2……); ④ insert into 表名 values (值1,值2...); ⑤ insert into 表名 set 字段1=值1,字段2=值2...; 注意: 1.值和字段名要一一对应,否则会报错 2.你写入的值一定要和数据类型相匹配
2> 删除数据
delete from 表名 where 条件; 注意:删除数据的时候,一定要加上where条件,否则会删除所有的数据
3> 修改数据
update 表名 set 要修改的字段 = 修改后的值 where 条件 注意:修改数据的时候,一定要加上where条件,否则会修改所有的数据
4> 查找数据
select *(所有字段) from 表; --- 查询所有 select 字段1,字段2.. from 表; --- 按指定字段查询 select name,SEX as'性别' from person; -- as 表示为字段起别名 select salary+200 from person; -- 可以进行数据列运算 select DISTINCT age,name FROM person; -- 去重复查询 条件查询 运算符 select * FROM person WHERE age >20; select * FROM person WHERE age <=20; select * FROM person WHERE age <>20; select * FROM person WHERE age !=20; null 关键字 select * FROM person where dept_id is null; select * FROM person where dept_id is not null; elect * FROM person where name =''; 逻辑运算符 and or select * from person where age = 28 and salary =53000; select * from person where age = 23 or salary =2000; select * from person where not(age = 28 and salary =53000); 区间查询 select * from person where age BETWEEN 18 and 20; ps: between...and 前后包含所指定的值 等价于 select * from person where salary >= 4000 and salary <= 8000; 集合查询 select * from person where id = 1 or id = 3 or id = 5; select * from person where id not in(1,3,5); 模糊查询 select * from person where name like '%e%'; -- 包含指定参数 select * from person where name like '%e'; -- 以什么结尾 select * from person where name like 'e%'; -- 以什么开头 select * from person where name like '__e%'; -- _表示单个字符站位符 select * from person where name like '__'; 排序查询 select * from person where age >30 ORDER BY salary desc; -- ASC正序 DESC倒序 select * from person ORDER BY CONVERT(name USING gbk);-- 中文排序