前端开发学习-Mysql常用语法

386 阅读3分钟

登录

在已经安装好的mysql后,进入mysql安装目录下边的bin文件,打开命令提示符;

mysql -uroot -p****

*代表是密码,mysql安装的时候默认指定==端口号为3306==,用户名为:==root==;

也可以指定端口号登录

mysql -uroot -p**** -P3306

// 指定端口号的P为大写

执行命令后见到:

mysql>

// 此时就表明已经成功登录mysql了

常用命令

显示数据库
show databases;

显示所有的本地数据库,mysql命令需要以分号(;)

创建数据库
 create database if not exists hsl default charset utf8;
 
 // 数据库名字:hsl,指定数据库字符集为utf8;
选择数据库
use hsl;

// Database changed
查看数据库的数据表
show tables;

// Empty set
创建数据表(user)
create table if not exists user(
 id int unsigned unique auto_increment key,
 username varchar(20) not null,
 age tinyint unsigned not null,
 sex enum('男','女') default '男',
 classId tinyint unsigned not null
)ENGINE=InnoDB,charset=utf8;

// 创建的数据表包含五个字段(id,username,age,sex,classId);
// id:int整型,唯一值,自动增加的主键;
// username:varchar字符型 不能为空;
// age: tinyint范围为:0-255;
// sex: 枚举类型,默认值是:男;
// ENGINE=InnoDB:存储引擎是innodb;
// charset=utf8:指定字符集
查看表信息
desc user;
插入数据
插入一条数据
insert user(username,age,sex,classId) values('jack',18,'男',1);
// 由于id字段是自增长的主键,无需指定;
插入多条数据
insert user(username,age,sex,classId) values('bill',18,'男',1),('rose',19,'女',1);
查看表数据
select * from user;
查看表数据(根据年龄排序)
select * from user order by age desc;

// desc降序;asc升序
分组查询

根据性别分组,获取男,女的姓名;

select group_concat(username) as username,sex from user group by sex;

// as可以改变查询出来的字段名称
条件查询

查询age=18的姓名;

 select username,sex,age from user where age=18;

查询age=18的人数;

 select count(*) as count,age from user where age = 18;
更新数据

改变id=1的username

update user set username='hill' where id = 1;
删除数据

删除id=2的数据

 delete from user where id = 2;
修改表字段

将数据表的username字段修改为name

 alter table user change username name varchar(10) not null;
 
 // alter table 获取表
添加表字段

添加addr(地址)字段到user表中

 alter table user add addr varchar(20);
删除表字段

删除addr(地址)字段

alter table user drop addr;

多表操作

创建班级表
create table if not exists class(
id tinyint unsigned unique auto_increment key,
className varchar(20) unique not null
)engine=innodb,charset=utf8;

添加班级表数据

 insert class(className) values ('一年级一班'),('一年级二班');
多表查询

查询user表的user分别属于哪个班级

select u.name ,c.className from 
user as u ,
class as c 
where u.classId = c.id;
子查询

查询一年级一班的学生名字

select name from user where classId = (select id from class where className='一年级一班');
左外连接查询
 select u.name,c.className from  user as u left join class as c on u.classId = c.id;
右外连接查询
 select u.name,c.className from  user as u right join class as c on u.classId = c.id;

Mysql外键

我们通过user表中的classId字段的值匹配class表中的id,去查寻user在哪一个班级;

可以看到user表中的classId应该依赖于class表中的id;

此时我们执行:

 insert user set name = 'vencent', age = 10, classId = 4;

是可以执行成功插入的。

但是class表中并没有id=4的年级;

如果我们不想让插入这样的数据,class表中的id就是user表的外键;

我们先把上面classId=4的学生删除掉;

添加外键
 alter table user add constraint foreign key (`classId`) references class(`id`);
 
 // ``不是单引号哦,是ESC下面的`

此时,如果执行

 insert user set name = 'vencent', age = 10, classId = 4;
 // 就会看到报错信息
 
 // Cannot add or update a child row: a foreign key constraint fails (`hsl`.`user`, CONSTRAINT `user_ibfk_1` FOREIGN KEY (`classId`) REFERENCES `class` (`id`))

需要先在class表中添加id=4的班级后,才能录入classId=4的user;