MySQL学习笔记
MySQL是一个数据库管理系统,主要是对数据库进行增加、修改、删除、查询,具有大小写不敏感的特点(输入中用大写、小写均可)
1、基本命令
MySQL可以直接通过cmd进行登录,登录命令行:mysql -u用户名 -p密码/mysql -uroot -proot
1-1、DDL(Data Definition Language 数据定义语言)
1-1-1、基本语句
查看全部数据库:show databases;
创建数据库:create database 数据库名称;/create database name;
创建数据库并设置数据库的编码:create database 数据库名称 default charset=‘utf8’;/create database name default charset=‘utf8’;
查看数据库的创建信息:show create database 数据库名称;/show create database name;
删除数据库:drop database 数据库名称;/drop database name;
使用数据库(数据库需要使用以后才能对数据库内的数据进行操作):use 数据库名称;/use name;
查看全部表(需要先使用数据库):show tables;
查看表的创建信息:show create table 表名称;/show create table name;
创建表:
create table 表名称(
字段名1 数据类型,
字段名2 数据类型,
constraint fk_字段名 foreign key 字段名2 references 表名1(字段名1)
);(注意:“)”前的最后一句不能有“,”结尾)
create table name(
a int primary key auto_increment,
b varchar(20) not null,
c double(3,2) default 0,
d char(1) check(d=’男‘ or d=’女‘),
constraint fk_b foreign key (b) references name1(b)-- 由name1表中的b来约束name表中的b,前提name1表中的b是主键且数据类型与name表中的b相同
)auto_increment=100;
修改列类型:alter table 表名 modify 列名 新类型/alter table name modify b int;
增加列:alter table 表名 add 列名 类型/alter table name add e int;
删除列:alter table 表名 drop 列名/alter table name drop e;
修改列名:alter table 表名 change 旧列名 新列名 类型/alter table name b x int;
修改表名:alter table 表名 rename 新表名/alter table name rename name1;或者rename table 表名 to 新表名/rename table name to name1
1-1-2、约束语句
约束语句用于约束数据的类型、数值等信息。
非空(数据不能为空):字段后+not null;
唯一:字段后+unique(注意:可以有多个null值);
主键:字段后+primary key(注意:一个表中只能有一个主键,主键字段非空且唯一);
自动增长:主键列+auto_increment,若需要从某个数开始增加可以在create table name()后+auto_increment=起始数值,如果不设置起始数值则默认从1开始(注意:只有int类型的字段才能使用,一张表中最多有一个自增);
设置默认值:字段后+default+默认值;
检查约束:字段后+check+条件(注意:mysql中对check会忽略,即写了也是白写,mysql是为了保持与其他数据库的一致性才设置的check约束,其他数据库中check约束是有用的);
外键约束:foreign key 建立两张或多张表中的联系,以保证数据的完整性。子表的外键参照列只能是主表的外键列或者有unique约束的列。子表中外键约束的列的值必须在主表的被参照列的值内,即若主表中有1,2,那么子表中只能有1或者2,不能有其他值。若主表中有值被参照,那么主表的相应记录不能被删除,若要删除需要先将子表中对应删除后才能删除主表中的值。
1-2、DML(Data Manipulation Language 数据操控语言)
增加数据:insert into 表名(列名1,列名2……)values(值1,值2……)/insert into name(a,b,c,d)values(1,2,3,4)。如果输入的值是表中全部的值,可以省略表名后面的括号,即insert into name values(a,b,c,d);
删除数据:delete from 表名 where 列名=条件值/delete from name where a=1。如果需要删除表格中的全部数据可以省略where语句。此外可以用truncate table name,该语句不能使用where条件限制,只能直接删除表中的全部数据,据说删除效率比delete语句高;
修改数据:update 表名 set 列名=新值 where 列名=条件值 and 列名like ’%条件值‘;/update name set a=1 where b=‘2’ and like ’_花%‘;where和lie语句根据实际情况使用,like后的’%‘表示多个不确定的值,‘_’表示一个不确定的字符,以上的like条件可以找出如‘无花果’、‘梅花一朵’等内容;
查询数据:select * from 表名
where 列名=条件值 and/or like 列名=条件值/select * from name where name.a=1 and name.b like ‘2’,该语句用于查询表格中满足条件的所有值,若只需要查询某几列内容可以使用:select 列名1,列名2 from where 列名=条件值 and/or 列名=条件值/select name.a,name.b from where name.a=1。由于表名较长可以用简称,查询出的列名也可以用简称:select 列名 as 别名1,列名 as 别名2 from 表名 别名3 where 列名=条件值/select x3.a as ‘编号’,x3.b as ‘内容’ from name x3 where x3.a=1,其中as可以省略。
1-3、DCL(Data Control Language 数据控制语言)
标准SQL语句:
select 展示列(*表示全部列)
from 表名
where/like 条件
group by 列名(分组)
having 条件(必须有group by 语句才能使用)
order by 列名(排序,默认升序,若要降序需要在语句最后加上 desc)
limit 条件值(limit 开始行号,返回的行数。如果不写开始行号则默认从0开始,开始行号是实际行号-1)
指定展示列:select 列名1,列名2 from 表名/select name.a,name.b from name。
列名去除重复 :select distinct 列名1,列名2 from 表名/select distinct name.a,name.b from name;
列名取别称:由于文件名较长不便于使用,可以取别称简化或者更改列名显示,select 列名 as 别名1,列名 as 别名2 from 表名 别名3 /select x3.a as ‘编号’,x3.b as ‘内容’ from name x3 ,其中as可以省略;
between A and B语句:A和B之间的数据:select * from name where name.a between 1 and 10;
查询出的结果可以嵌套使用:复制表格create table newname select * from name;复制空表格create table newname select * from name where 1=2或者create table newname like name;
聚合函数:
count(1)统计全部数量
count(distinct 列名)统计列名中有多少种类
sum(列名)对列名的内容进行求和
avg(列名)对列名内容求平均数
列名的结果用于算术计算,即可以使用+、-、*、/、%等
max(列名)找出列名中的最大值
min(列名)找出列名中的最小值
left (列名,数字)找出列名中左起‘数字’个值
right(列名,数字)找出列名中右起‘数字’个值
全表链接:将两个或多个表进行链接select * from 表名1,表名2,表名3 where 表名1.列名1=表名2.列名2 and 表名2.列名3=表名3.列名3或者select * from 表名1 inner join 表名2 on 表名1.列名1=表名2.列名2 inner join 表名3 on 表名2.列名3=表名3.列名3
外链接:左外链接left join/left outer join,右外链接right join right outer join。左外链接是左边表全部显示,右边表没有对应信息则用null填补,右外链接是右边表全部显示,左边表没有对应信息则用null填补。
重要语句case when...then...else...end相当于if... ...else...