下载链接:
链接:https://pan.xunlei.com/s/VMNHMWaZ-bLa5HltrBnjRPdVA1
提取码:v8rh
默认登录:mysql -uroot -p
,然后输入密码登录即可
查看版本信息:mysql -V
有三种退出方法
sql>exit;
sql>quit;
sql>\q
当我们登录进 mysql 的时候,可以看到如下信息 mysql> ....
但是如何修改提示符呢?有两种方式
mysql -uroot -proot --prompt 提示符
mysql> propmt 提示符
提示符的参数
接下来把提示符修改为:用户名 + @ + 主机名 + 数据库的形式
prompt '\u@\h \d>'
补充:这里显示的 none 是因为我们刚登陆,没有指定是使用哪个数据库,所以会显示 none
因此我们可以使用如下命令选择指定数据库
show databases; --这句话的意思是 展示当前系统有哪些数据库可以用
use bank; -- 使用 bank 数据库
数据类型 | 代表 |
---|---|
mysql -uroot -proot -P3306 -h127.0.0.1 (mysql -uroot -p 常用命令) | 数据库连接命令 (可以连接指定服务器的数据库) |
select version() | 显示当前服务器版本 |
select now() | 显示当前日期时间 |
select user() | 显示当前用户 |
show databases; | 显示当前的数据库 |
show tables from db_namelike ‘pattern’ | where expr] |
show columns from tb1_name | 查看表结构 |
use tb_name | 使用数据库 |
select database() | 显示当前使用的数据库 |
create database tb_name | 创建一个数据库 |
drop database tb_name | 删除数据库 |
set names gbk(utf-8) | 解决编码格式,解决现实乱码问题 |
create user username@'host' identified by "password"
eg:
create user happy@"localhost" identified by "happy"
系统权限:
数据对象权限
收回权限
grant permission on database tables to user@'host'
grant connect,resource to 用户名
grant select on 数据库 表 to 用户
# 收回权限
revoke connect,xxx from 用户名
revoke select on 表名 from 用户名
mysql8密码修改
alter user 'team01'@localhost IDENTIFIED WITH mysql_native_password by '123456';
整形
浮点数:
日期和时间型
字符类型:
基本语法:
create table [if not exists] table_name(
column_name data_type,
.....
);
-- eg 创建一个用户表
create table user(
username varchar(20),
age tinyint(3) unsigned, -- 短整型 unsigned 表示无符号,也就是默认大于 0
salary float(8,2) unsigned
);
alter table tb_name add [column] (col_name col_data_tyoe + 约束条件)
alter table tb_name drop [column] col_name;
alter table tb_name modify [column] col_name col_definition[约束类型] [first] ;
-- 修改列名称
alter table tb_name change old_name new_name col_definition;
不建议随意修改数据列和数据表的名称
--一、方式一
alter table rename [to|as] new_tb_name;
-- 二、方式二
rename table tb_name to new_tb_name [, tb_name1 to tb_new_name1]
alter table tb_name add 关键字 data_type 约束条件;
-- 给余数增加名字,以主键约束为例
alter table tb_name add [constraint] pk_users2_id primary key (id);
alter table tb_name add unique key (username); -- 简写
-- 删除主键约束
alter table tb_name drop primary key;
-- 删除唯一约束
alter table tb_name drop {index | key } index_name;
-- 删除外键约束
alter table tb_name drop foreign key 外键约束名;
重新设置编号初始值
alter table 表名 auto_increment=1;
drop table 表名;
drop table if exists 表名;-- 存在即删除
delete from 表名;
DDL 语句会隐式提交,不能 rollback
插入数据
-- col_name 和 val 的数量要一一对应
insert [into] tb_name (col_name,...) values (val1,---);
-- 插入方式 一 (tb_name 里面的字段有几个,值就对应几个)
insert into tb_name(字段一,字段二,....) values (值1,值2..)
-- 简化版 (不写字段,直接加 values,这里你必须插入表中所有的字段)
insert into tb_name values(字段1,字段2,字段3); -- 这样写的话,必须包含所有的字段,不然数据库会不匹配
-- eg Student 有 name 和 age
insert into student(name,age) values("xxx",18);
insert into student values("xxx",10);
更新数据
update tb_name set 字段名 = 'xxx'; -- 修改这列的所有数据
update tb_name set 字段名 = 'xxxx' where xxx; -- 修改指定列的数据
删除数据
delete from tb_name where xxxx; -- 删除指定数据
查询语法:
简单查询
select * from tb_name; --查询某表的所有数据
select col_name1,col_name2 .... from tb_name; -- 查询字段指定列数据
-- 给查询字段取别名
select col_name1 as xxx from tb_name; -- 给查询的字段的列使用别名替代
字段过滤查询
-- where
select * from tb_name where id%2 = 0; -- 查询偶数列的数据
-- group by 分组查询 (分组查询一般在多表中查询使用的比较多)
-- 分组条件 having
字段排序
order by 字段名 asc升序,desc 降序
分页查询
select * from tb_name limit 2; -- 得到两条记录
select * from tb_name limit 3,2; -- 从第三条记录开始,查询两条记录
复制表结构和数据
create table tb1A select * from tb1;
create table tb1B select * from tb2;
复制表的列结构
create table 新表名 like 元素名;
复制其他表的记录
insert into 表名 select * from 元素名;
选择一列进行复制
insert into tb1_emp(name) select emp_name from tb_emp; -- 注意参数类型,长度问题
当数据库中的数据的数据量过大时,查询效率就会变得非常非常的低,在这种情况下,我们可以在表上建立索引(index)
索引类型:
如果事先建立了索引,查询就不会对全表进行扫描,而是利用索引扫描,这样可以减少查询时间。
我们常见创建的主键就是一种索引,它会随着主键的创建而创建
-- 创建普通索引
create index 索引名 on 表名 (列名);
-- 创建普通组合索引
create index 索引名 on 表名 (列名1,列明2,列名3...);
-- 格式化显示索引
show index from 表名 \G;
-- 删除索引
drop index 索引名 from 表名;
索引的创建是影响整个数据库处理效率的重要问题,我们把这种提高效率的策略称为调优(tuning)
索引的使用原则:
删除指定字符
截取所有字符串
between xxx and xxx 在 范围内
not in() 一系列数值之内
is not null 是否为空
自定义函数须有两个必要条件
使用 select fi() 就可以看到结果了
如果是这样的,那就是 unicode 编码问题,我们需要改变数据库的编码方式
使用 exists 代替 in
exists 只有 true 或 false,而 in 会做全扫描