MySql全程基础讲解:增删改查、约束

  

1、    简介

MySql全程基础讲解:增删改查、约束_第1张图片

sql:  structured query language(结构化查询语言)

 

2、数据库服务器、数据库和表的关系:

  • MySql全程基础讲解:增删改查、约束_第2张图片

 

3、数据在数据库中的存储方式

    MySql全程基础讲解:增删改查、约束_第3张图片

 

4、创建数据库

 

4.1 创建数据库的sql语句格式:

MySql全程基础讲解:增删改查、约束_第4张图片

 

    练习创建数据库

 

  • 创建一个名称为mydb1的数据库:create database mydb1;
  • 创建一个使用utf8字符集的mydb2数据库:create database mydb2 character set utf8;
  • 创建一个使用utf8字符集,并带校对规则的mydb3数据库:create database mydb2 character set utf8 collateutf8_general_ci;

4.2、查看和删除数据库

MySql全程基础讲解:增删改查、约束_第5张图片

练习查看和删除数据库

查看所有的数据库:show databases;

显示某个库的创建信息:show create database mydb3;

删除之前创建的mydb1数据库:drop database mydb1;

4.3、修改数据库

MySql全程基础讲解:增删改查、约束_第6张图片

练习:修改数据库

修改字符集:alter database mydb2 character set gb2312;

 

4.4  备份(windows命令):

退出MySQL客户端:quit

在win命令行窗口中下才执行:mysqldump -uroot -p mydb1>D:\test.sql(这种文件是脚本文件)

4.5 恢复数据(不能恢复数据库)

  • 通过执行备份的脚本文件来恢复:

        a.创建数据库:create database mydb1 character set utf8;

        b.恢复:source D:\test.sql

  • 通过Windows命令来恢复:      

        a.先在服务器中创建一个叫mydb1的数据库:

        b. mysql -uroot -p mydb1

 

5、创建表

MySql全程基础讲解:增删改查、约束_第7张图片

 

练习:创建一个员工表

MySql全程基础讲解:增删改查、约束_第8张图片

进入某个库,在其中创建表:use db_name;

create table employee

(

       id int,

       name varchar(20),

       gender varchar(4),

       birthday date,

       entry_date date,

       job varchar(40),

       salary double,

       resume text

)character set utf8 collate utf8_general_ci;

 

6、修改表(增加列、修改列、删除列)

MySql常用数据类型

MySql全程基础讲解:增删改查、约束_第9张图片

注:VARCHAR、BLOB和TEXT类是变长类型,每个类型的存储需求取决于列值的实际长度。

修改表中列(增加列、修改列长度、删除列)、修改表的名称、字符集

MySql全程基础讲解:增删改查、约束_第10张图片

练习:在表中增加一列,修改列的长度,删除列

在表employee上增加一列image,类型为blob:alter table employee add image blob;

修改job列长度为60:alter table employee modify job varchar(60);

删除gender列:alter table employee drop gend

将表名改为user:rename table employee to user;

 

修改表的字符集为utf8:alter table user character set gb2312;

 

修改列名name为username:alter table user change column nameusername varchar(20);

 

7、查看表(创建细节、结构、数据库中所有表的名称列表)

查看所有的表:show tables;

查看表的创建细节:show create table table_name;

查看表的结构:desc employee;

 

8、插入数据(insert into table_name)插入记录

MySql全程基础讲解:增删改查、约束_第11张图片

练习:使用insert语句向表中插入一个员工的信息:

insert into user(id,username,birthday,entry_date,job,salary,resume)values(1,'rsl','1993-03-21','2018-02-18','teacher',10000,'resume');

插入一个名字是中文的员工信息:

insert into user(id,username,birthday,entry_date,job,salary,resume)values(2,'小李','1993-03-21','2018-02-18','teacher',10000,'resume');     

发现也可以,因为我们查看编码:show variables like 'chara%';(显示字符集)

结果:

+--------------------------+---------------------------------------------------------+

| Variable_name Value                                            |

+--------------------------+---------------------------------------------------------+

character_set_client                   gbk         

character_set_connection           gbk                      |

character_set_database               utf8                           

character_set_filesystem            binary                     

character_set_results                  gbk                        

character_set_server                   utf8                        

character_set_system                  utf8                         

character_sets_dir     C:\Program Files\MySQL\MySQL Server5.7\share\charsets\

+--------------------------+---------------------------------------------------------+

发现character_set_client 是gbk,若是utf8,则插入汉字就会报错。

 

测试:将character_set_client(客户端) 改为utf8:set character_set_client=utf8;以及将set character_set_results(显示结果)改为:set character_set_results=utf8;再select * from user;结果就乱码,因为utf8不识别中文字符。在insert的时候一定要注意。

 

9、update 值 where…:用于更改表中的数据值

使用update更新

MySql全程基础讲解:增删改查、约束_第12张图片

练习:在上面创建的employee表中修改表中的记录:

(所有行某一列)将salary列的值改为5000:updateuser set salary=5000;

(指定的行的某一列)将姓名为rsl的员工工资改为8000:update user set salary=8000 where username='rsl';

(指定的一行的多列)将姓名为小李的员工工资改为4000,job改为ccc:update user set salary=4000,job='ccc' whereusername='小李';

 将rsl的salary在原有的基础上增加1000:

update user set salary=salary+1000 where user name='rsl';

注意(经验):写update语句时,先写好update user salary=... where username='rsl';不然会把所有用户的数据全部改掉,后果严重

 

10、delete 记录

MySql全程基础讲解:增删改查、约束_第13张图片

 

练习:

删除名字为小明的记录:delete from user where username='小明';

删除表中所有的数据:delete from user或truncate table user;

区别:truncate table user;是先摧毁表,再重建表的结构

delete fromuser;是一行一行的删除;

 

11、select 数据

Select查询所有数据、某些列数据、过滤重复的信息

MySql全程基础讲解:增删改查、约束_第14张图片

练习:查询表中所有的学生的信息

1、select *from user;

2、select id,username,birthday,entry_date,job,salary,resumefrom user;

上面两个效果一样,但是建议写成第二种,因为实际开发的时候别人才能知道你查询的是哪些数据。

 

查询表中所有人的username以及对应的job、salary

select user name,job,salary from user;

过滤掉表中重复的数据

1、Select distinct job from user;

+---------+

| job     |

+---------+

| teacher |

| doctor  |

| student |

+---------+

2、Select distinct username,job from user;

+----------+---------+

| username |job     |

+----------+---------+

| rsl      | teacher |

| wangwu   | doctor |

| zhangsan |student |

| lisi     | student |

+----------+---------+

 

12、表达式作用于列进行查询、as语句

select语句二:

MySql全程基础讲解:增删改查、约束_第15张图片

练习1:

1、在所有的人的工资上加1000进行查询:

SELECT username,salary+1000FROM USER;//并没有改变原有数据库的值

2、统计每个人的总工资:select username,(salary+salary2)from user;

3、使用别名表示总工资:

select username as 姓名 ,(salary+salary2) as 总薪水 from user;

或者 select username 姓名 ,(salary+salary2)总薪水 from user;

 

select语句三:Where语句

练习2:

 查询姓名为rsl的薪水salary:

 

Select salary fromuser where username=’rsl’;

全部信息:Select * from user where username=’rsl’;

 

查询基本工资大于等于7000的人的信息:

Select *from userwhere salary>=7000;

 

Where语句的运算符:

在where语句中经常使用的运算符:

MySql全程基础讲解:增删改查、约束_第16张图片

 

练习:

查询基础工资在7000-8000之间的人的job

Select job from user where salary>=7000 and salary<=8000;

Select job from user where salary between 7000 and 8000;

 

查询基础工资在7000-8000之间的人的信息

Select * from user where salary>=7000 and salary<=8000;

Select * from user where salary between 7000 and 8000;

 

查询符合条件的人的信息

Select * from user where salary2 in(100,300);

Select * from user where salary2=100 or salary2=300;

 

查询所有姓li的信息:

Select * from user where username like ‘li%’;

+------+----------+------------+------------+---------+--------+--------+---------+

| id   | username | birthday   | entry_date | job     | salary | resume | salary2 |

+------+----------+------------+------------+---------+--------+--------+---------+

|    4 | lisi     | 1996-03-21 | 2016-05-17 | student |   6000 | ddddd |     100 |

|    5 | liwu     | 1995-03-21 | 2016-05-17 | doctor  |  5000 | eeeee  |    NULL |

+------+----------+------------+------------+---------+--------+--------+---------+

 

order by 语句

MySql全程基础讲解:增删改查、约束_第17张图片

练习:

对薪水进行升序排列后查询:

Select username from user order by(salary+salary2);

Select username as 姓名, (salary+salary2) as 薪水 from user order by (salary+salary2) asc;

+----------+------+

| 姓名     | 薪水 |

+----------+------+

| liwu     | 5050 |

| lisi     | 6100 |

| zhangsan |7200 |

| wangwu   | 8300 |

| rsl      | 9400 |

+----------+------+ 

 对薪水进行降序排列后查询:

Select usernameas 姓名, (salary+salary2) as 薪水 from user order by (salary+salary2) desc;

 

count函数

MySql全程基础讲解:增删改查、约束_第18张图片

练习:

统计有多少条记录(行)?

Select count(*) from user;

 

统计薪水大于5000的有多个?

Select count(*)from user where salary>5000;

 

sum函数

MySql全程基础讲解:增删改查、约束_第19张图片

将某一列求和:

Select sum(salary)from user;

 

统计一列的平均值:

Select sum(salary)/count(salary)from user;

Selectavg(salary) from user;

 

多列求和:

Select sum(salary),sum(salary2)from user;

MySql全程基础讲解:增删改查、约束_第20张图片

Select max(salary)from user;

 

 select语句六:

 

group by column 对列column分组:

语句:SELECT COLUMN1,COLUMN2,COLUMN3..FROM TABLE GROUP BY COLUMN;

即将column列进行归类,即去掉重复的元素

 

使用Having 子句过滤

select column1,column2,column3.. from table group by column having...

注意:

Having 和where 都可以过滤,但是having可以使用合计函数,having通常跟在group by 后,它作用于组。

 

练习:

建立一个table:

MySql全程基础讲解:增删改查、约束_第21张图片

create table orders

(

       id int,

       products varchar(40),

       price int

)character setutf8;

Insert into orders(id,products,price) values (1,'洗衣机',3000);

Insert intoorders (id,products,price) values (2,'冰箱',5000);

Insert intoorders (id,products,price) values (3,'洗衣粉',30);

Insert intoorders (id,products,price) values (4,'苹果',20);

Insert intoorders (id,products,price) values (5,'冰箱',5000);

MySql全程基础讲解:增删改查、约束_第22张图片

进行归类:意思就是讲重复的去掉

Select products from orders group by products;

MySql全程基础讲解:增删改查、约束_第23张图片

显示每类商品花了多少钱

Select products,sum(price) from orders group by products;

MySql全程基础讲解:增删改查、约束_第24张图片

查询购买了几类商品,并查价格在200以上的商品

Select products,price from orders group by products having sum(price)>200;

MySql全程基础讲解:增删改查、约束_第25张图片

 

 

 

13、时间、日期函数

MySql全程基础讲解:增删改查、约束_第26张图片

 

14、字符串函数

MySql全程基础讲解:增删改查、约束_第27张图片

 

15、数学函数

MySql全程基础讲解:增删改查、约束_第28张图片

 

16、定义表的约束(重点)

MySql全程基础讲解:增删改查、约束_第29张图片

定义主键的约束

一般来说,一个表都至少要有一个主键约束,约束越严格越好,可以避免非法数据的存入。

在创建表的时候就要定义哪些列值是主键约束,不允许重复,不允许为空

创建一个带有主键约束的表:

Create table test1

(

       id int primary key,

       username varchar(20),

       password varchar(20)

)character setutf8;

Insert intotest1 (id,username,password) values (2,'zhangsan','123456');

如表:

MySql全程基础讲解:增删改查、约束_第30张图片

 

定义主键自动增长(开发不常用)

让系统自己维护某一列带有该性质的值,如创建一个表:

Create table test2

(

  idint primary key auto_increment,

  usernamevarchar(20),

  passwordvarchar(20)

)character set utf8;

MySql全程基础讲解:增删改查、约束_第31张图片

Insert into test2 (id,username,password) values (1,'zhangsan','123456');

Insert into test2 (username,password) values ('lisi','123456');

只插入姓名,也会自动的在前面id加1:

 

如果将非数值型的列加上自动增长约束呢?

答:创建不成功,如

Create table test3

(

  idint primary key,

  usernamevarchar(20) primary key auto_increment,

  passwordvarchar(20)

)character set utf8;

报错:Incorrect column specifier for column 'username'

 

定义唯一的约束

某列的值不允许重复,如账号

创建一个带有唯有约束的表:

Create table test3

(

  idint primary key,

  usernamevarchar(20) unique,

  passwordvarchar(20)

)character set utf8;

MySql全程基础讲解:增删改查、约束_第32张图片

执行:

Insert into test3 (id,username,password) values (1,'lisi','123456');

Insert into test3 (id,username,password) values (2,'lisi','123457');

ERROR 1062 (23000): Duplicate entry 'lisi' for key 'username'

 

定义非空约束

l 数据不能为空,如注册的时候用户名不能为空:

Create table test4

(

  idint primary key,

  usernamevarchar(20) unique not null,

  passwordvarchar(20)

)character set utf8;

MySql全程基础讲解:增删改查、约束_第33张图片

 

定义外键约束

 什么是外键约束?

MySql全程基础讲解:增删改查、约束_第34张图片

创建外键约束的表:

create table husband

(

id int primary key,

name varchar(20)

);

create table wife

(

id int primary key,

name varchar(20),

husband_id int,

constraint husband_id_FK foreign key(husband_id)references husband(id)

);

注:

constraint表示要添加外键约束了

husband_id_FK 表示外键约束的名称,惯性用法:要约束的列名称_FK

foreign key()表示你要约束哪一列,这里即husband_id

references husband(id)表示参照某个表(husband)的某个列值(id)

 

husband表结构和wife表结构如下:

 

MySql全程基础讲解:增删改查、约束_第35张图片

在husband表中插入数据:

insert into husband (id,name) values (1,'lisi');

insert into husband (id,name) values (2,'wangwu');

 

在wife表中插入数据:

insert into wife (id,name,husband_id) values (1,'xiaocui',2);

insert into wife (id,name,husband_id) values (2,'fengjie',1);

insert into wife (id,name,husband_id) values (3,'fengjie',5);

报错:

 

17、将对象的数据存入数据库中

一对多、多对一

对象:有一个部门对象department、有一个员工对象Emplyee

联系:部门里有很多员工,每个员工有固定的所属部门

关系:从关系上看可以是一个部门对应多个员工,也可以是多个员工对用一个部门

现在要将右侧的数据存入表中:

l 原则1:

将一个对象的数据存入到一张表中,不管对象之间是什么关系,就看对象有什么基本属性就设置这些属性作为列

l 原则2

在有关联的对象的两张表中,在多的表中加外键约束。

如此例子中,在Emplyee表中加外键约束,表明每个员工是属于哪个部门

MySql全程基础讲解:增删改查、约束_第36张图片

多对多(老师-学生)

MySql全程基础讲解:增删改查、约束_第37张图片

原则同上

在多对多关系中,要建立一张中建表来存储两张表的关系

MySql全程基础讲解:增删改查、约束_第38张图片

如中建表teacher_student表,里面有两列,分别都是外键约束,用来表示一个与另一个之间的关系,如:1号老师——学生1、学生2

学生1——老师1、老师2、老师3等等

 

下面来创建这样一张表:

create table teacher

(

id int primary key,

name varchar(20),

salary double

);

MySql全程基础讲解:增删改查、约束_第39张图片

create table student

(

id int primary key,

name varchar(20)

);

create table teacher_student

(

teacher_id int,

student_id int,

primary key(teacher_id,student_id),

constraint teacher_id_FK foreign key(teacher_id) referencesteacher(id),

constraint student_id_FK foreign key(student_id) referencesteacher(id)

);

将表:

MySql全程基础讲解:增删改查、约束_第40张图片

中的数据存入数据库中至少要写5条sql语句:

insert into teacher (id,name,salary) values (1,'张三',5000);

insert into teacher (id,name,salary) values (2,'王五',6000);

MySql全程基础讲解:增删改查、约束_第41张图片

insert into student (id,name) values (1,'小明');

insert into student (id,name) values (2,'小张');

MySql全程基础讲解:增删改查、约束_第42张图片

 

insert into teacher_student (teacher_id,student_id) values (1,1);

insert into teacher_student (teacher_id,student_id) values (1,2);

insert into teacher_student (teacher_id,student_id) values (2,1);

MySql全程基础讲解:增删改查、约束_第43张图片

一对一(主从)

MySql全程基础讲解:增删改查、约束_第44张图片

通常来说,将从的某一列设置为主键约束外键约束

创建一个Person的表:

create table person

(

id int primary key,

name varchar(20)

);

MySql全程基础讲解:增删改查、约束_第45张图片

创建Idcard表:

create table idcard

(

id int primary key,

addr varchar(20),

constraint person_id_FK foreign key(id) references person(id)

);

 

推荐他人博文: Mysql全程讲解(难点:键、索引和约束的关系)

 -----------------------------------------------------------我是分割线--------------------------------------------------------------------

这是我的mysql基础学习笔记,欢迎阅读和提出意见和建议。

 

 

 

 

你可能感兴趣的:(MySQL)