MySQL
一、MySQL基本操作
1、进入MySQL
命令: mysql -u root -p(密码:qwe123)
2、库级操作语句
1)显示所有的库
show databases;
show databases;
2)创建库
create database [if not exists] db_name; 重复创建会报错, 可以加上if not exists
create database if not exists student;
3)删除库
drop database [if exists] db_name;
drop database if exists student;
4)进入数据库
use db_name;
use student;
3、表级操作语句
1)显示所有的表
show tables;
show tables;
2)创建表
create table [if not exists] tb_name (create definition…);
create table if not exists student(id int,name varchar(20));
3)显示创建表的信息
show create table tb_name;
show create table student;
4)删除表
drop table tb_name;
drop table student;
二、MySQL表中数据的操作
1、插入数据
1)指定字段插入
INSERT INTO tb_name(field_name) VALUES (field_values);
insert into student(id) values(1);
2)全字段插入
INSERT INTO tb_name VALUES (all_values);
insert into student values(1,'a');
3)多行插入
INSERT INTO tb_name(field_name) VALUES (value_1), (value_2), …;
insert into student values(2,'b'),(3,'c');
2、查询数据
1)指定字段查询
SELECT field_names FROM tb_name;
select id from student;
2)全字段查询
SELECT * FROM tb_name;
select * from student;
3)带条件的查询
SELECT field_names FROM tb_name WHERE conditions;
select * from student where id=1;
3、修改数据
1)修改所有数据
UPDATE tb_name SET field_1=value_1
updata student set id=3;
2)修改多个
UPDATE tb_name SET field_1=value_1, field_2=value_2 …;
updata student set id=3,name='a';
3)修改满足条件的数据
UPDATE tb_name SET field_1=value_1 WHERE conditions;
updata student set id=3 where name = 'a';
4)注意
一定要写where条件,不然会删除表中全部数据
4、删除数据
1)删除表中所有数据
DELETE FROM tb_name;
delete from student;
2)删除表中满足条件的数据
DELETE FROM tb_name WHERE conditions;
delete from student where id=1;
3)注意
一定要写where条件,不然会删除表中全部数据
5、查看表格属性
desc tb_name;
desc student;
三、MySQL数据类型
1、案例
create table tb2(
id INT,
name VARCHAR(20), #指定长度,最多65535个字符。 变长字符串
sex CHAR(4), #指定长度,最多255个字符。 定长字符串
price DOUBLE(4,2), #双精度浮点型,m总个数,d小数位
detail text, #可变长度,最多65535个字符
dates DATETIME, #日期时间类型 YYYY-MM-DD HH:MM:SS
ping ENUM('好评','差评’) #枚举, 在给出的value中选择
);
insert into tb value (1, '裤子', '男', 20.0, '这条裤子超级好!!!', now(), '好评');
四、高级查询
1、筛选条件 where
1)比较运算符
2)逻辑运算符
and or not
3)其它操作
a.排序 order by
SELECT columns FROM tb_name ORDER BY col [asc/desc] ;
正序:asc(默认)
倒序:desc
select * from student order by id desc;
b.限制 limit
SELECT columns FROM tb_name LIMIT start, count ;
LIMIT count;
LIMIT start, count;
select * from student limit 1;
c.去重 distinct
SELECT DISTINCT FROM tb_name;
如 select distinct * from student;
select distinct id from student;
4)模糊查询
模糊查询 like ‘%’
任意多个字符: %
任意一个字符: _
select * from student where name like 'a%a';
select * from student where name like 'hell_';
5)范围查询
连续范围: BETWEEN a AND b
a <= value <= b
间隔返回: IN
a in (10, 20, 30 […])
select * from student where id between 1 and 5;
select * from student where id in (1,2,3,5);
2、聚合与分组
1)常用聚合函数
a.举例
selsect max(id) from student;
2)分组查询(group by)
SELECT group_column, aggregations
FROM tb_name
BY group_column;
在分组的情况下,只能够出现分组字段和聚合字段其他的字段没有意义,会报错!
select id,count(id) from student group by id;
3)聚合筛选(having)
SELECT group_column, aggregations
FROM tb_name
GROUP BY group_column
HAVING conditions;
加having条件表达式,可以对输出的结果做出限制
select id,count(id) from student group by id having id in (1,3,5);
4)别名 as
select id,count(id) as count from student group by id having id between 1 and 5;
3、子查询
1)查询
将一个查询的结果留下来用于下一次查询 ( select 中嵌套 select )
2)举例
select * from student where id>(select avg(id) from student);
3、连接查询
1)内连接
a.举例
select * from student join student1;
select * from student join student1 on student.id=student1.id;
1)外连接
a.举例
select * from student left join student1 on student.id=student1.id;
select * from student right join student1 on student.id=student1.id;
五、表修改、约束条件、表关系
1、表结构修改
1)修改表名
alter table tb_name rename to new_name;
alter table student1 rename to stu;
2)修改字段名
alter table tb_name change name new_name data_type;
alter table stu change id stu_id int;
3)修改字段类型
ALTER TABLE tb_name MODIFY field_name data_type;
alter table stu change id stu_id int;
4)添加字段
ALTER TABLE tb_name ADD [COLUMN] field_name data_type;
alter table stu add age tinyint;
5)删除字段
ALTER TABLE tb_name DROP [COLUMN] field_name;
alter table stu drop age;
2、约束条件
1)约束类型
约束是一种限制,通过对表中的数据做出限制,来确保表中数据的完整性,唯一性
2)默认约束
(default)
CREATE TABLE tb(id int default ‘a’ ,name varchar(20));
插入数据的时候,如果没有明确为字段赋值,则自动赋予默认值
在没有设置默认值的情况下,默认值为NULL
create table tb(
id int default 20,
name varchar(20)
);
insert into tb values
(1,'a'),
(default,'b');
3)非空约束
(not null)
CREATE TABLE tb(
id int not null,
name varchar(20)
);
限制一个字段的值不能为空,Insert的时候必须为该字段赋值
空字符不等于NULL
create table tb(id int not null);
4)唯一约束
(unique key)
CREATE TABLE tb(
id int unique key,
name varchar(20)
);
限制一个字段的值不重复,该字段的数据不能出现重复的
确保字段中值的唯一
CREATE TABLE tb(id int unique key,name varchar(20));
5)主键约束
(primary key)
CREATE TABLE tb(
id int primary key,
name varchar(20)
);
通常每张表都需要一个主键来体现唯一性每张表里面只能有一个主键
主键 = 非空 + 唯一
CREATE TABLE tb(id int primary key,name varchar(20));
6)自增长约束
(auto_increment)
CREATE TABLE tb(
id int auto_increment,
name varchar(20)
);
自动编号,和主键组合使用,一个表里面只能有一个自增长
auto_increment 要求用在主键上
CREATE TABLE tb(id int auto_increment,name varchar(20));
7)外键约束
(foreign key)
CREATE TABLE a(
id_a int primary key,
name varchar(20)
);
CREATE TABLE b(
id_b int primary key,
name varchar(20),
foreign key (id_b) references a(id_a)
);
保持数据的一致性我有的你一定有, 你没有的, 我绝对没有
B表中的id_b字段,只能添加 id_a中已有的数据。
A表中id_a 被参照的数据, 不能被修改和删除
CREATE TABLE b(id_b int primary key,name varchar(20),foreign key (id_b) references a(id_a));
3、表关系
1)一对一关系
举例,学生表中有学号、姓名、学院,但学生还有些比如电话,家庭住址等比较私密的信息,这些信息不会放在学生表当中,会新建一个学生的详细信息表来存放。
这时的学生表和学生的详细信息表两者的关系就是一对一的关系,因为一个学生只有一条详细信息。用主键+主键的方式来实现这种关系。
#建立详细学生表:
create table student_details(
id int primary key,
sex varchar(20) not null,
age int,
address varchar(20) comment '家庭住址',
parents varchar(20),
home_num varchar(20),
foreign key (id) references student(s_id)
);
一对一 : 用外键的方式,把两个表的主键关联
2)一对多关系
举例,通常情况下,学校中一个学院可以有很多的学生,而一个学生只属于某一个学院。
学院与学生之间的关系就是一对多的关系,通过外键关联来实现这种关系。
##创建学院表
create table department(
d_id int primary key auto_increment, # 学院id
d_name varchar(20) not null # 学院名
);
##创建学生表
create table student(
s_id int primary key auto_increment, # 学生id
s_name varchar(20) not null, # 学生名字
dept_id int not null, # 所属学院 id
foreign key(dept_id) references department(d_id) #外键
);
insert into department values(1,'外语学院'),(2,'计算机学院');
insert into student values(1,'佳能',2),(2,'lucky',1);
3)多对多关系
举例,学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。
对于多对多关系,需要创建中间表实现。
#建立课程表:
create table cours(
cours_id int primary key auto_increment,
cours_name varchar(20) not null
);
# 选课表 (中间表)
create table select(
s_id int, #用来记录学生id
cours_id int, #用来记录 课程id
primary key(s_id,cours_id), # 联合主键
foreign key(s_id) references student(s_id), # 关联学生id
foreign key(cours_id) references cours(cours_id) # 关联 课程id
);
insert into cours values (1, ’python编程’), (2, ’大学英语’), (3, ‘音乐鉴赏’);
insert into `select` values(1,3); 表示学号为一的同学选择了音乐鉴赏这门课程