一、安装Mysql
在WSL上安装Mysql,sudo apt install mysql-server
Mysql安装成功之后,默认的root用户密码为空,(注意:MYSQL 8.0以上的版本修改root密码的方式有所改变),可以使用命令来创建root用户的密码:
1.启动Mysql服务器
sudo service mysql start
2.选择数据库
use mysql
3.修改root用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Aa663366***';
4.刷新权限
flush privileges
5.重启数据库
sudo service mysql restart
6.此时即可使用root用户的密码进入数据库
mysql -uroot -p
二、Mysql常用操作
1.查询Mysql是否已经启动
ps -ef |grep mysql
2.选择某个数据库
use mysql;
create database testdb charset "utf8"; #创建一个叫testdb的数据库,且让其支持中文
3.显示所有表
show tables;
4.查看表结构
desc user;
5.显示表构建语句
show create table user;
6.新建表
create table user(
id int auto_increment not null primary key ,
username char(32),
password char(32));
7.主键
主键分为单主键与多字联合主键,主键特点如下:
主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。
8.外键
1.要在表里设置外键关联
2.从表的外键列的类型和主表的关联列的类型要求一致或兼容
3.主表的关联列必须是一个key(一般是主键或唯一键)
4.插入数据时,必须先插入主表,再插入从表;
删除数据时,先删除从表,再删除主表;
——摘自 https://www.cnblogs.com/lthIU/p/8258225.html
create table `user_class`(
`id` int auto_increment primary key,
`user_id` int ,
`grade` char(23),
key `fk_key` (`user_id`),
constraint `fk_key` foreign key (`user_id`) references `user` (`id`) );
9.新增表数据
insert into user (username,password) values('a','a123'),('b','b123'),('c','c123'),('d','d123');
10.删除表数据
delete from user where id=1;
11.修改表数据
修改数据内容:update user set username="aaa" where id=2;
删除列:alter table user drop username;
新增列:alter table user add username char(64);
修改列属性: alter table user modify username int;
修改列名称属性:alter table user change username uuu int(10);
12.查询表数据
语法:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[OFFSET M ][LIMIT N]
offset:偏移量,跟在limit后面,表明当前搜索到的数据向下偏移1位(即选择下一行的数据)
select * from user limit 1 offset 1;
13.关系(join)
join按关系分为三类:
1.left join 获取左表所有记录,即使右表没有对应匹配的记录。
2.right join 获取右表所有记录,即使右表没有对应匹配的记录。
3.inner join 获取两个表中字段匹配关系的记录。
select * from A inner join B on A.a=B.b;
select * from A left join B on A.a=B.b;
select * from A right join B on A.a=B.b;
#full join
select * from A right join B on A.a=B.b union select * from A left join B on A.a=B.b;
14.GROUP BY
select a,count(a) from A group by a;
#with rollup ,筛选结果最后加入一个汇总行
select a,count(a) from A group by a with rollup;
#使用 coalesce 来设置一个可以取代 NUll 的名称
select coalesce(a,"count num"),count(a) as countcount from A group by a with rollup;
+-------------------------+------------+
| coalesce(a,"count num") | countcount |
+-------------------------+------------+
| aaa | 1 |
| b | 1 |
| c | 1 |
| d | 1 |
| count num | 4 |
+-------------------------+------------+
15.排序(ASC、DESC)
SELECT field1, field2,…fieldN table_name1, table_name2…
ORDER BY field1, [field2…] [ASC [DESC]]
使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
select * from A where a like binary "%a" order by id desc;
select * from A order by id desc;
16.事务
mysql> begin; #开始一个事务
mysql> insert into a (a) values(555);
mysql>rollback; 回滚 , 这样数据是不会写入的
mysql>commit; 提交
17.排名
select id,num,@rank:=@rank+1 paixu from test_score t1 join (select @rank:=0) t2 order by num desc;
18.索引
索引也是一张表,索引增快了查询速度,但是会降低更新表的速度(要更新数据还要保存索引文件)
一个表里的主键默认就是索引
#显示表中的索引字段
show index from user;
#创建索引
create index index_name_lala on user (uuu(length));
#删除索引
drop index index_name_lala on user;
创建表的时候直接指定索引
create table mytable(
id int not null,
username char(32) not null,
index in_uname (username(32))
);
唯一索引:与普通索引类似
特点:
1.索引值必须唯一,但是允许有空值
2.组合索引,则列值的组合必须唯一
#创建唯一索引
create unique index index_name_lala on mytable (username(32));