mysql数据库
2021/9/6 2:07:05
本文主要是介绍mysql数据库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MySQL
下载
下载普通的包mysql-8.0.26-winx64.zip
200M左右
解压
配置环境变量
可以新建个变量MYSQL_HOME
安装服务,初始化
0, cd %MYSQL_HOME%\bin 并切换盘符 ,
虽说已经配置了环境变量了,但是初始操作还是建议cd过去操作,减少意外发生
1,安装。mysqld -install
注意有一个d
看贴有的说加上 -console 参数可以 显示密码,但是试了不行,反而安装不成功,建议不加
2,生成data目录,mysqld --initialize
注意有一个d
看贴说有的加上 -insecure --user=mysql , 加上配置文件的skip-grant-tables 可以跳过验证直接登录,不清楚原因,过于复杂不建议加上该参数
3,生产data目录后,里面有个后缀.err的文件打开查看日志写着
A temporary password is generated for root@localhost: rump:QiUe7qQ
注意第一个冒号后面的全是密码,不包括第一个空格
4,启动服务,net start mysql
想停止服务就是 net stop mysql
如果启动失败,之前有安装过服务可以删除mysql服务,并重新安装 mysqld -install
sc delete mysql 删除服务
sc query mysql 查询服务
5,登录mysql -uroot -p
粘贴第二步data目录下.err文件写的密码
6,修改密码
alter user root@localhost identified by '123456';
如果是跳过验证登录的,可以修改表,然后刷新权限
update mysql.user set authentication_string=password('123465') where user='root' and host='localhost';
password是加密函数
flush privileges;
my.ini
可能需要my.ini文件时,
我安装的是8.0.26版本,没有使用该文件,一切顺利
在mysql 目录下新建文件,内容如下:
[mysql] #字符集 default-character-set=utf8 [mysqld] character-set-server=utf8 default-storage-engine=INNODB max_connections=200 port=3306 #mysql的安装目录,不是bin目录,即bin目录的上一级 basedir=xxx #mysql的安装目录下的data目录,路径分割用反斜杠就可以了 datadir=xxx\data\ #这个是mysql启动时,跳过验证,即不需要密码直接回车可以登录 #skip-grant-tables
sqlyog
登录失败
sqlyog plugin caching_sha2_password could not be loaded 报错
1,cmd登录mysql
2,alter user 'root'@'localhost' identified by 'password' password expire never; #修改加密规则
3,alter user 'root'@'localhost' identified with mysql_native_password by 'password'; #更新用户的密码
3,alter user root@localhost identified by '123456'; # 更改新的密码
3,flush privileges; #刷新权限
改为小写
工具-首选项-字体编辑设置-事例-关键字/函数
单行注释:--
多行注释:/**/
关键字,通配符
库名,表名,列名,主从键,可以用反引号引起来,避免与关键字冲突
通配符 %: 表示一个或多个,比如 %利%
匹配 澳大利亚 ,张%
匹配 张三,张无忌
通配符 _: 下划线 ,占位一个,张_
匹配 张三,不能匹配张无忌
数据库操作
建库
create database dbname;
库名:
基字符集: utf8
数据库排序规则:utf8_general_ci
建表
表名:
所属库:
引擎:InnoDB
字符集:utf8
核对:utf8_general_ci
列名:id, version, is_delete, gmt_create, gmt_update
数据类型:int, varchar
长度:字符长度,数字0填充显示的位数
默认值:
主键:primary, constraint, foreign, references
key fk_fkeyname
(colname
) constraint fk_fkeyname
foreign key (colname
) references dbname
.tbname
(refcolname
)
非空:
unsigned:无符号
自增:
zerofill:零填充
更新:
注释:
修改表
alter table tbname
rename as/ 表重命名
add colname coldesc/ 字段增加
add constraint FK_foreignkeyname
foreign key (foreigncolname
) references dbname
.tbname
(refcolname
)
一般外键名或叫做约束名 固定使用FK_
开头
modify colname coldesc/ 字段修改
change colnameold colname coldesc/ 字段重命名
drop colname/ 字段删除
数据库常用sql
select version(); 查询数据库版本
show full processlist; 查询连接用户
show status\G 将DB所有的状态
- 可用like 查询变量名称,如:show status like '%open%';
- Uptime 服务器工作了多少秒,
- Questions 发往服务器的查询的数量。
- Open_tables 打开表的数量
- Opened_tables 已经打开的表的数量。
- Open_files 打开文件的数量。
- Open_streams 打开流的数量(主要用于日志记载)
show databases; 查询所有库,包括系统库,用户库。
select database(); 查询库
describe tbname; 查询表字段 ,可简写为desc
show full tables from school
查询库中所有的表#full可不加,from子句也可不加,使用当前库,
show full fields from tbname;查询表字段信息
show keys from tbname\G 查询表的key
show index from tbname\G 查询表的key 查询表的索引信息
show table status from school
like 'student'\G 查询表状态
show charset;
show collation;
show create database dbname;
show create table tbname;
事务(transaction)
四个特性:
- 原子性(atomicity,或称不可分割性)、
- 一致性(consistency)、
- 隔离性(isolation,又称独立性)、
- 持久性(durability)
mysql 事务支持
-
set autocommit = 0; 默认是1=开启,
-
start transaction;
-
commit/rollback;
-
set autocommit=1;
-
savepoint pointname
-
rollback to savepoint pointname
-
release savepoint pointname
DBMS 数据库管理系统(Database Management System)
索引
create 索引类型 索引名称 on 表名(列名)
create index key/index_tbname_colname on tbname(colnam e)
ALTER TABLE table_name ADD INDEX index_name (column_list)
- primary key
- 不可重复
- 一张表只能有一个,因此有固定的索引名称-primary,其他类型索引需要取名称
- unique key
- 不可重复
-
key/index
- 全文索引fulltext
- 可以查询文本中内容
- foreing key (不算索引,算个约束)
- 已经不推荐使用了,约束层面用应用层解决
数据库语言 (database language)
DDL 定义definition
- create
- create table tbname(col 修饰, col2 修饰, ..., colN 修饰, primay key (colname)) engin=innodb default charset=utf8
- 建表语句,括号最后一条不用逗号,否则报错
- drop
- 删除表 drop table if exists tbname;
DML 管理manage
- insert
- insert into tbname(colname,colname...) values(v1,v2...),(v1,v2...) ;
- into 关键字可以省略
- 第一个括号的字段名称可以省略,此时 默认使用全部字段,字段和value需要一一对应
- values 后面的括号可以有多个,表示插入多行数据
- 如果只插入一列数据,可以使用value,不加s,插入多列必须加s,否则报错
- update
- update tbname set col=val,col2=val2,... where ...
- delete
- delete from tbname where ...
- 所有行删除
- truncate 删除表中全部数据,清空,表结构不会改变,即表的索引字段等保留
- truncate table tbname
- 重新设置自增
- 不会影响事务
DCL 控制control
-
grant,revoke
-
创建用户create user Uname@host identified by '123456';
-
修改密码当前用户 set password=password('123456');
-
修改密码指定用户 set password for root =password('123456');
-
重命名 rename user unameold to unamenew
-
授权 grant all privileges on . to root [with grant option];
-
查看权限 show grants for root;
-
撤销权限revoke all privileges on . from root
-
删除用户drop user root1;
DQL 查询query
- select
关键字
- distinct
- inner/left/right join
- limit
- order by desc/asc
- 可按多列排序,order by id desc, name asc, age desc
- explain select语句
- 分析查询
- explain ... where match(
colname
) against('searchtext');
连表查询
分组查询
排序 分页
子查询
- 标量子查询
- 列级子查询
- 表级子查询
自连表查询
CRUD 增Create,查(检索)Retrieve,改Update,删Delete
where, having 子句
多个子句 连接符, and, or
操作符 | 含义 | |
---|---|---|
= | ||
!= 或 <> | ||
>=, <=, >, < | ||
between xxa and xxb | xxa 需要小于等于 xxb, 两头为包含关系 | |
in | in(v1,v2,v3) 建议空格不要 | |
is null | ||
is not null | ||
like | like '张%' like '_宇' | |
数据类型
整数
-
tinyint 1字节
-
smallint 2字节
-
int 4字节
-
mediumint 3字节
-
bigint 8字节
小数
- float 4字节
- double 8字节
- decimal 字符串形式的小数(总长度,小数位)
字符串
-
char 定长字符串 0-255,如md5加密文本,手机号,身份证号码,
-
varchar 可变长字符串 0-65535
-
tinytext 2^18-1
-
text 2^16-1
日期
- year 年
- date 年月日
- 查询当前日期 select current_date
- time 时分秒
- 查询当前时间 select current_time
- datetime 年月日时分秒
- 查询当前日期时间 select current_timestamp
- timestamp 1970年1月1日至今的毫秒值
其他
-
null
null 不等于null
不要使用 == <> != 来判断
使用 is null 或 is not null
常用函数
-
abs:绝对值
-
ceiling(): 向上取整
-
floor(): 地板,向下取整
-
rand(): 随机数
-
sing(): 0返回0,负数返回-1,整数返回1
-
char_length(): 字符个数
-
concat(): 拼接字符串
-
insert(): 替换
-
lower()
-
upper()
-
replace()
-
substr()
-
reverse()
-
now()
-
localtime()
-
sysdate()
-
current_timestamp()
-
current_date()
-
current_time()
-
year(now())
-
month(now())
-
day(now())
-
hour(now())
-
minute(now())
-
second(now())
-
system_user()
-
version()
-
聚合函数
- count()
- avg()
- sum()
- max()
- min()
关于两表七种条件连接,和一种无条件连接
show tables; drop table if exists tba; drop table if exists tbb; create table tba(id int, aname varchar(5)); create table tbb(id int, blike varchar(5)); -- a 表 根据 用户id 存了3个名字 n1, n2, n3 -- b 表 根据 用户id 存了3个爱好 l1, l2, l4 insert into tba values(1,'n1'),(2,'n2'),(3,'n3'); insert into tbb values(1,'l1'),(2,'l2'),(4,'l4'); -- tba id:1, 2, 3, -- tbb id:1, 2, 4, select * from tba select * from tbb -- delete from tbb where name like '_11' -- full/cross/inner/straight_join join = join, 性能可能不相同,其中 full 不能指定on条件 -- left/right outer join = left/right join, 其中 outer 可以省略 -- 0, 无条件连接,俗称笛卡尔积, cross -- 1,左连接,a 全有 1, 2, 3 -- 2,右连接,b 全有 1, 2, 4 -- 3,内连接,交集, inner 1, 2 -- 4,左外连,a 独有 3 -- 5,右外连,b 独有 4 -- 6,全连接,并集 1, 2, 3, 4 -- 7,全外连,a 独有 + b 独有 3, 4 ------------------------------------------- -- 0, 条目9 笛卡尔积 两表相乘,无条件连接,所有数据都有,但是关联性很差 cross 可省略 select * from tba cross join tbb; -- 1, 条目3, on条件只能满足两条,a表第三条不满足因为left 显示a表全部信息,则b表用null填充 select * from tba left join tbb on tba.`id`=tbb.`id`; -- 2, 条目3, 同上 select * from tba right join tbb on tba.`id`=tbb.`id`; -- 3, 条目2,求交集,inner 可省略,on 可换成where,建议使用inner 和 on select * from tba inner join tbb on tba.`id`=tbb.`id`; -- 4, 条目1,a 独有,直接选择b表为null 的即是,这里因为b表数据为空,查询a表独有,则使用tba.* 更有意义 select tba.* from tba left join tbb on tba.`id`=tbb.`id` where tbb.`id` is null; -- 5, 条目1,同上 select tbb.* from tba right join tbb on tba.`id`=tbb.`id` where tba.`id` is null; -- 6, 条目4,思路,可以查a 表全有的,加右表独有的,使用 nuion 需要注意查询的列 前后两表需要一致,即前面查询语句结果是4列,后面查询语句也是要4列 select * from tba left join tbb on tba.`id`=tbb.`id` union select * from tba right join tbb on tba.`id`=tbb.`id` where tba.`id` is null; -- 7, 条目2,思路, 查询a 独有 + b 独有 select * from tba left join tbb on tba.`id`=tbb.`id` where tbb.`id` is null union select * from tba right join tbb on tba.`id`=tbb.`id` where tba.`id` is null;
这篇关于mysql数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南
- 2024-12-07MySQL慢查询入门:快速掌握性能优化技巧
- 2024-12-07MySQL入门:新手必读的简单教程
- 2024-12-07MySQL入门:从零开始学习MySQL数据库
- 2024-12-07MySQL索引入门:新手快速掌握MySQL索引技巧
- 2024-12-06BinLog学习:MySQL数据库BinLog入门教程
- 2024-12-06Binlog学习:MySQL数据库的日志管理入门教程