登录
在已经安装好的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;