MySQL

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);   表示学号为一的同学选择了音乐鉴赏这门课程
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 花了3天时间学习MySql,考了个二级MySql 书籍参考:高等教育出版社《全国计算机等级考试二级教程-MySQL...
    如果仲有听日阅读 1,263评论 4 4
  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 1,646评论 0 8
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,410评论 1 8
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,028评论 0 19
  • 一直很喜欢江南的小城,浅意识里,南方应有的样子该是,小桥,流水,穿着旗袍怀抱琵琶的少女坐在桥上,轻哼着那温婉的...
    筱葵葵阅读 350评论 0 3