赞
踩
MySQL
MySQL基本使用
学基本命令(SQL语句),数据导入,导出,简单的MySQL管理(创建用户,数据库)
这个阶段很简单,记好笔记,语句背下来,基本就不会忘了。
深挖SQL语句
SQL语句实际上依托的是离散数学中集合论的内容,非常困难。
给大家50个题,做到毕业之前(有的题目一天做好几道,有的几天做一道题)
重点是去想,不是背答案。
原理
掌握MySQL的内部原理——面试用
目前我们先掌握第一阶段,然后搭配Java和MySQL使用。
MySQL是一个软件,这个软件的学名叫“数据库管理系统”DBMS
DBMS是一类软件的统称: MySQL, Oracle, SQL Server…
Oracle在国内的银行,保险公司,电信等行业的应用是相对广泛的。 Oracle收费
MySQL在国内一般用于互联网公司
SQL Server一般用于国内的政府机构
为什么我们要发明“数据库管理系统”这种软件?
存放大量数据,并且方便检索和修改。
在没发明数据库管理系统之前,大家用的都是文件系统来存放,检索数据。
但是文件系统存在缺陷:查找麻烦,修改容易出错,操作繁琐。
MySQL这个软件里面放的都是什么?
MySQL是一个数据库管理系统,自然首要管理的就是数据库。
所以一个MySQL的里面可以存放多个不同的数据库。
数据库是一个容器,这个容器里面放的是数据,数据以表格的形式存在于数据库中。
MySQL这个软件安装好之后,有一个默认的用户叫做root,这个用户是mysql中最高权限的管理员,它的密码是我们在安装的时候指定的。
另外,MySQL在安装好之后,还会带有自己个一个数据库,这个数据库叫mysql(全小写),这个数据库被称作元数据数据库,非常重要,一旦被破坏,MySQL这个软件也随之而崩溃。
所以,root用户权限很高,是高风险用户,不应该使用;mysql数据库也不应该被使用。
我们应该创建一个新用户和一个新数据库。
Windows中的基本操作
在微软的商店中安装Windows终端后,打开Windows终端输入
cd ‘C:\Program Files\MySQL\MySQL Server 8.0\bin’
再输入
.\mysql -uroot -p
之后输入mysql安装时提供的密码即可用root用户登录到MySQL这个DBMS中。
如果使用的是Windows+R,输入CMD打开的终端,则需要
cd “C:\Program Files\MySQL\MySQL Server 8.0\bin”
再输入
mysql -uroot -p
之后输入mysql安装时提供的密码即可用root用户登录到MySQL这个DBMS中。
上面两种方式密码输入正确后,都会看到下面的提示符即正确:
mysql >
Ubuntu中使用MySQL
Ubuntu为了安全起见,默认禁止了root用户登录MySQL这个数据库软件。
并且安装过程中没有提示我们输入密码。所以我们需要首先找到Ubuntu为我们生成的用户名和密码。
$ sudo cat /etc/mysql/debian.cnf
其中user = 后面就是用户名
其中password = 后面就是密码
$ mysql -udebian-sys-maint -p
复制粘贴密码
会看到下面的提示符即正确:
mysql>
不管是Windows还是Linux,以上操作都是先本地登录到MySQL这个软件中
下面我们需要用root用户登录,建立属于自己的数据库,用户密码,并将二者关联起来。
show databases; 查看所有的数据库
drop database 要删除的数据库名字; 比如 drop database tom; 删除叫做tom的数据库
建立好后,输入select user from mysql.user;
可以看到MySQL这个数据库软件中所有已经存在的用户。
删除用户drop user 用户名; drop user tom;
刚建立的好的用户没有任何权限,它看不到任何数据库,此时应该为这个用户授权,让它可以使用我们刚刚建立的数据库。
将刚建立的用户和刚建立的数据库关联起来(让这个用户可以用这个数据库)
GRANT alter,select,insert,update,delete,create,drop,index,references,CREATE VIEW,TRIGGER,show view, ALTER ROUTINE, create routine, execute, create temporary tables ON 自己建立的数据库名.* TO ‘自己建立的用户名’@‘%’;
例子:
mysql> GRANT alter,select,insert,update,delete,create,drop,index,references,CREATE VIEW,TRIGGER,show view, ALTER ROUTINE, create routine, execute, create temporary tables ON test.* TO ‘tom’@‘%’;
这句话的意思是让一个叫做tom的用户可以使用一个叫做test的数据库
此时只要看见Query OK, 1 row affected (0.01 sec)结果,刚建立的用户就可以用刚建立的这个数据库了。
在mysql命令中输入exit,退出当前的登录,使用新用户重新登录
****这个新用户登录后,不能用来建立数据库和用户(只能用root登录才可以)
输入命令的时候,注意区分哪些命令是在mysql>输入的,哪些是在操作系统提示符下输入的。
mysql>提示符下可以查询,创建,删除数据库,创建,查询,删除用户
操作系统提示符下: mysql -uxxxx -p
刚刚我们所有的操作都是针对于数据库和用户的。但是数据库中的数据实际上是放在表格中的,所以我们需要学习和表格相关的操作
选中一个数据库来使用
use 数据库名 结尾分号可选
use test
查看当前被选中的数据库所有表格
show tables;
建立表格
语法:
create table 表格名字(
列名 列类型,
列名 列类型,
列名 列类型,
…
);
常见的列类型:
int整数
double浮点数
date年月日
enum枚举: enum(值,值,…);
varchar类似于String,每一个varchar必须带有最大长度(可以缩小)
char也类似于String,每一个char必须带有绝对的长度,这个长度是不可变的。
create table users(
id int primary key,
name char(30),
age int,
salary double,
birthday date,
sex enum(‘M’, ‘F’)
);
primary key是主键,我们强烈建议每一个表格都要选择一个列作为主键(主键这个列中的内容不能为null,不能重复)。
如果实在选不出这个列,就单独写一个叫做id的列专门当主键,主键的类型一般都是int。
因为主键不能重复,所以它可以唯一的标记某一行。
查看表格结构
descibe 表格名;
删除表格
drop table 表格名; 这个句子当表格不存在的时候会报错
drop table if exists 表格名; 这个句子当表格不存在的时候什么也不做
表格建立好之后,我们要学习的是和数据相关的4个操作(按行为单位的)
插入数据的时候,值如果是数字可以直接写,如果值是varchar,char,enum,date等必须在两侧加上单引号
date必须写成yyyy-MM-dd这种形式
当查询的数据不在某张表格中的时候,比如查看现在的时间
select id, now() from users;
但是很多时候这是没有必要的,所以我们发明了虚表,虚表是一个并不存在的表,它的名字固定是dual.
select now() from dual;
select 123, ‘abc’ from dual;
修改数据
update 表格名 set 列名=值,列名=值…;
修改操作默认修改所有行
update users set age=20, salary=5000;
更常见的修改操作是按照主键进行某行的修改
update 表格名 set 列名=值,列名=值… where 条件;
update users set age=30, salary=6000 where id = 2;
删除数据
delete from 表格名; 删除操作默认删除所有行
更常见的修改操作是按照主键进行某行的删除
delete from 表格名 where 条件;
delete from users where id = 2;
面试常见问题
快速删除表格中所有数据
truncate 表格名; 这个语句的执行速度比delete from 表格名;快很多。
在某一次查询中去掉重复的行
select distinct 列, 列 from 表格名;
聚合函数
count
sum
max
min
avg
CREATE DATABASE tom CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
show databases;
drop database tom;
CREATE USER ‘jhon’@‘%’ IDENTIFIED BY ‘123456’;
select user from mysql.user;
drop user jhon;
GRANT alter, select, insert, update, delete, create, drop, index, references, CREATE VIEW, TRIGGER, show view, ALTER ROUTINE, create routine, execute, create temporary tables ON tom.* TO ‘jhon’@‘%’;
use tom
show tables;
create table user1(
列名,列类型
列名,列类型
列名,列类型
…
);
describe user1;/desc user1;
drop table user1;
drop table if exists user1;
insert into user1(列名,列名…) values(值,值…);
select 列 from 表格名;
select * from user1;
select id, name from user1;
update user1 set name = ‘小明’ where id = 2;
delete from user1;
delete from user1 where id = 2;
truncate user1;这个执行速度比drop快
在查询中去掉重复的行
select distinct 列 from user1;
除了count之, 其余几个只能用于数值列上。聚合函数的结果一定是一个数
主键唯一的作用就是用来标记一行,不能为空,不能重复
主键一般不作为表格中有实际意义的内容;
比如一个人口信息的表格,身份证号可以也可以不做主键;
比如一个学生信息的表格,学号可以也可以不做主键;
在这两种情况下,我们都可以单独设置一个列id来作为主键;
主键的内容自动增长;自动增长这个功能只针对于 MySQL等数据库使用,对于Oracle等数据库是无效的。所以auto_increment并不是SQL语言通用标准的一部分;
drop table if exists users;
create table users(
id int primary key auto_increment,
)
删除:
当执行删除语句:
delete from users where id = 5;
在插入一行
insert into users (name) values (‘tom’);
这一行的id不再是5 而是自增为6
已经存在或者使用过的主键就不会再被使用了
select age as AGE from users;
本地登录:
mysql -u用户名 -p
远程登录MySQL: A电脑通过IP地址远程登录到B电脑的MySQL上,A电脑甚至可以不用安装MySQL;
使用Idea操控:
DATABASE------> + ------>Data Source------->MySQL------>Host: 127.0.1.1 / localhost ------>User: Password: Database: ------->下载驱动Diver------->Test Connection一定要先测试连接到成功为止(Succeeded)-------->点击ok
select查询完整语法:
select
from
where
group by
having
order by
以上顺序不可以颠倒
数据库的表一旦设计好了结构就不会在变了,所以不会加列,删列的执行语句,只能加表或删表
查询文档:(dev.mysql.com/doc/refman/8.0/en/integer-types.html)
select会对所有的行都进行where测试,将判断结果为true的行放在最终结果中。
where的后面一定是一个结果为true或false的判断;(如:
select * from users where id = 3;
select * from users where id >=3;
select * from users where id <>3; #不等于
select * from users where id !=3;
select * from users where name = 'tom';
select * from users where name = 'tom' and id >= 3; #&&
select * from users where id = 1 or id = 3 or id = 5; #||
)
重点:判断null或者not null
select * from users where age = null;
select * from users where age != null;
以上两行结果是不确定的(可能不同的数据库是不同的结果),判断空和非空必须写成 is null和 is not null;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。