SQL语言
用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。
名词解释
数据库:一种容器,表的管理单元(表的集合)
表:存储数据的基本单位 记录的管理单元(记录的集合)
记录(行):字段的管理单元(字段的集合)
字段(列): 字段名 字段类型 字段约束(可选)
数据库DDL(数据库定义语言)
数据库、表、视图、索引、存储过程,例如create、drop、alter
定义库(建库)
create database bbs;
进入库
use bbs;
删除库
drop database bbs;
数据库的位置
#rpm安装下的MySQL
[root@localhost ~]# ls /var/lib/mysql
auto.cnf ibdata1 ib_logfile0 ib_logfile1 mysql mysql.sock performance_schema
#后期备份数据库需要
定义表(建表)
create table student(id int,name varchar(20),age int , address varchar(20));
数据类型
1.数值类型
#int 整数型 float 浮点型
2.字符串类型
#char 固定字符串长度 varchar 可变字符串长度 enum('m','f') 枚举
3.时间和日期类型
查看表
show table student;
删除表
drop table student;
数据库DML(数据库操纵语言 insert into delete update)
插入数据 insert into
use bbs;
insert into student values(1,'zhangsan',13,'nanjing');
select * from student;
部分插入
insert into student(id,name) values(2,'lisi');
更新数据
update student set age=55 where id=2;
Query OK, 1 row affected
Time: 0.001s
MySQL root@localhost:bbs> select * from student;
+----+------+-----+---------+
| id | name | age | address |
+----+------+-----+---------+
| 2 | lisi | 55 | <null> |
+----+------+-----+---------+
#更新root用户密码
update mysql.user set authtication_string=password('123456') where user='root';
#调用函数 加密处理
删除数据
delete from student where id=2;
数据库DQL(数据库查询语言select desc)
查看表框架 desc
MySQL root@localhost:bbs> desc student;
#字段名 #类型 #约束(为空、主键、默认值、额外约束)
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | <null> | |
| name | varchar(20) | YES | | <null> | |
| age | int(11) | YES | | <null> | |
| address | varchar(20) | YES | | <null> | |
+---------+-------------+------+-----+---------+-------+
简单数据库查询
1.查询整表
select * from 表名;
2.查询部分字段信息的记录
select 字段1,字段2 from 表名;
3.四则运算的查询
select 字段1,月薪*14 from 表名;
条件查询
1.单条件查询where
select name from employee where post=‘hr’;
2.多条件查询and /or
select * from employee where post=‘hr’ and salary>6000;
3.范围between and➡ not between 2 and 5(取反)
select * from employee where salary between 5000 and 8000;
4.关键字 in 集合查询➡not in 的引申
select * from employee where salary in (4000,5000,6000);
模糊查询
关键词like模糊查询
select * from employee where name like ‘al%’;
name alice …
排序查询order
select name salary from employee order by salary asc/desc;
asc 升序(不加 默认升序) desc 降序
过滤查询limit 看前五名
select name salary from employee order by salary desc limit 5;
limit 5,2 看6 7 两行
数据库DCL(数据库控制语言grant revoke)
权限级别
1.global level 全库 全表 权限
2.database level 具体库内全表权限 常用
3.table level 具体库内的具体表权限
4.column level 单表字段权限
mysql用户管理
用户创建
create user zhangsan@'192.168.48.101' identified by ‘密码’
用户名 登录地址 (localhost为本地主机,%为所有终端)
用户登录
选项
示例:mysql -P 3306 -uroot -p123123 mysql -e’show tables;’
-uzhangsan 指定用户
-p123123 密码
-P3306 端口号
mysql 直接进库
...-e 'sql语句' 免交互 编程时会用到
mysql -uroot -p123123 -e 'select user();'
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
远程登录
mysql -h
mysql -uzhangsan -p密码
select user();
查看当前用户
改密码
法1:
库外:mysqladmin -uroot -p老密码 password 新密码 #password 后得有空格
法2:
库内:set password=password(123123);#调用函数,加密处理
flush privileges #刷新数据库
root密码丢失
1.vim /etc/my.cnf
2.加 skip-grant-tables
3.重启数据库 systemctl restart mysqld
4.进入数据库 mysql -uroot
5.修改密码 update mysql.user set authentication_string=password(新密码) where user='root' and host='localhost'
6.刷新数据库 flush privileges
7.注销配置文件的跳过设置 并重启mysqld
8.重登验证 mysql -uroot -p新密码
删除用户
drop user zhangsan@'192.168.48.101'
授权命令
grant 权限 on 库名.表名 to 'zhangsan'@'客户端' identified by '密码' with option;
权限列表
all 所有权限
select update 查询 更新
库表明细
*.* #代表全库全表
bbs.* #bbs库下全表
客户端主机
with option
一般不用
授权示例
授权admin3对bbs 所有表,具有所有权限(不包含授权)
grant all on bbs.* to admin3@'%' identified by '123123' with option;
回收权限
show grants for 用户; 查看授权明细
MySQL root@localhost:bbt> show grants for zhangsan;
+---------------------------------------------------+
| Grants for zhangsan@% |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'%' |
| GRANT ALL PRIVILEGES ON "bbs".* TO 'zhangsan'@'%' |
| GRANT ALL PRIVILEGES ON "bbt".* TO 'zhangsan'@'%' |
+---------------------------------------------------+
MySQL root@localhost:bbt> revoke all on bbs.* from zhangsan@'%';
Query OK, 0 rows affected
Time: 0.001s
MySQL root@localhost:bbt> show grants for zhangsan;
+---------------------------------------------------+
| Grants for zhangsan@% |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'%' |
| GRANT ALL PRIVILEGES ON "bbt".* TO 'zhangsan'@'%' |
+---------------------------------------------------+
5.7版本后,drop user zhangsan ; 直接抄家
mysql日志
日志种类
error log 错误日志 /var/log/mysqld.log 默认开启
binary log 二进制日志 记录改变数据,除了select都记 主配中 log_bin 开启 /var/lib/mysql/*bin
relay log 中继日志 读取主服务器的binary log 在本地回放 保持一致
slow log 慢查询日志 主配开启 /var/lib/mysql/*slow
vim /etc/my.cnf
slow_query-log=1 开启慢查询日志
long_query-time=3 限制超三秒则记录
MySQL root@localhost:(none)> select benchmark(1000000000,2*3);
+---------------------------+
| benchmark(1000000000,2*3) |
+---------------------------+
| 0 |
+---------------------------+
1 row in set
Time: 7.651s
ddl log 定义语句的日志