mysql学习

DDL :数据定义语言,用来定义数据库对象;创建库、表、列等。
DML : 数据操作语言,用来操作数据库表中的记录。
DQL :数据查询语言,用来查询数据。
DCL : 数据控制语言,用来定义访问权限和安全级别。

DDL

创建表:
create tables 表名(内容)

create table class(
stu int,
name varchar20,
age int
);

查看表中的结构:desc 表名;
添加表中的列:alter table 表名 add 列名 数据类型;
修改表中的列中属性的数据类型:alter table 表名 modify 属性名(id) 数据类型;
删除表中的列: alter table 表名 drop 列名;
修改表名:rename table 原表名 to 新表名;
显示表的细节:show create table 表名;
修改表的字符集为gbk :alter table 表名 character set 字符集名称;
修改表中的列名:alter table 表名 change 原始列名 新列名 数据类型;
删除表:drop table 表名;
重命名表:alter table 旧表名 rename to 新表名;

DML

查询表中的所有数据:select * from 表名;
添加列:insert into 表名 (id,Sname,Ssex) values (1,'xxx','male');
添加多列:insert into 表名 (列1,列2...列N) values (值1,值2...值N);(允许一次插入多行,在内容处增加)

insert into msg (id,title,name,content)
values1,‘初来乍到’,‘张三’,‘我刚来’)

把一个表中所有学生成绩都改变为 90 :update 表名 set score 列名=90;
修改指定学生的成绩:update 表名 set score=60 where name='zws';
修改指定学生的成绩和年龄:

update 表名 set score=60,age=19 where name='zws';`
update 表名 set age=age+1 where name='..';

修改 MySQL 的密码:
5.7以前:

use mysel;
update uer set password=password('1234')where user='root';

5.7以后:

update user set authention_string=password('1234')
where user='root' and Host = 'localhost';

然后刷新MySQL的系统权限相关表:
flush privileges;

第二种方式修改密码,使用bin文件中的语句,前提是先配好坏境变量:

mysqladmin -u root -p password  新密码  (不能加;号,否则会算为密码中)

删除操作:

delete from 表名 where 列名=;  //单个数据
delete from 表名;                 //表中全部数据  结构丢失
truncate table 表名;              //表中全部数据  空表

DQL

查询指定列的数据:select 列名1,列名2,···from 表名;
条件查询:

select * from 表名 where 列名=(>,>=,<,<=,!=)值 (and,or....);
				     in(set) 固定的范围值;

模糊查询:select * from 表名 where 列名 like '__'(几个下划线,表示几个字母或数字);
查询名字(可类比)有5个字符组成,并且第五个字符是b:

select * from 表名 where 列名 like '_ _ _ _ b';

查询名字(可类比) 开头是 z :

select * from 表名 where 列名 like 'z%';(% 表示后面的);

查询名字中包含 z 的信息:

select * from 表名 where 列名 like '%z%';

查询名字中第二个字母为 z 的信息:

select * from 表名 where 列名 like '_z%';

查询单独一个属性的信息:

select 列名 from 表名; 
select distinct 列名 from 表名;   //去掉重复的信息
select *,age+score from 表名;  //多处新的一列
select *,ifnull(age,0) + ifnull(score,0) as 起名 from students;//为空的变为零

对数据排序:

select * from 表名 order by 列名 (或asc);  //默认是升序;
select * from 表名 order by 列名 desc; //降序
select * from 表名 order by 列名 desc,列名 desc;//遇到相同的时候

聚合函数:

count(): 统计指定不为NULL的记录行数 select conut(*) from 表名;

max()计算指定列的最大值,如果指定列是字符类型,那么使用字符串排序运算

avg() :计算指定列的平均值,如果指定的列不是数值型,那么计算为0

min():计算指定列的最小值,如果指定列是字符类型,那么使用字符串排序运算

sum() :计算指定列的数值和

创建主键:alter table 表名 add constraint 主键名 primary key(列名);

解决MySQL 5.5,出现乱码问题:

SET character_set_client =gbk;			 //设置客服端的编码
SET character_set_results =gbk;	//设置服务器端结果返回的编码
SET character_set_connection =gbk;	 //设置客服端与服务端连接时的编码

操作数据库

展示所有数据库:show databases;
创建数据库:create database 库名;
选中数据库:use+该数据库名称;
删除数据库:drop database+数据库名称(表类似);
展示数据库中包含的表:show tables;

声明字符集:

set names 模式名;(字符集不同会报错)
eg.set names gbk;

为表增加内容:

insert into 表名(1,列2...列N) 
values (1,值2...值N);(允许一次插入多行,在内容处增加)
eg:
insert into msg (id,title,name,content)
values1,‘初来乍到’,‘张三’,‘我刚来’);

删除表中某行数据:

delete from 表名 where 位置;
eg: delete from msg where id=2;

改动表内容:

update 表名 set 改动的内容 where 位置;
eg:
update msg set id=2,content=‘来了很久’ where name=‘张三’;

若想查询特定行,列

selectfrom 表名 where 位置
eg:
select id,title from msg where id>2;(查询表msg中id,title两列且id>2的数据)

模糊查询:用到的词:’‘like’’,’’%’’,"__".
“like”->像,"%"->通配任意字符,“_”->单个字符。

where name like ‘诺基亚%;(用以查询带“诺基亚”的数据)
where name like‘诺基亚__’;(用以查询“诺基亚xx”的数据(几个下划线代表几个数))

日期类型:

   year类型:eg.'2018';
   data类型:eg.'1992-08-12';
   time类型:eg.'12:12:32';
   datetime类型:eg.'1987-05-03 14:32:08'

alter用法:

添加字段:	alter table 表名 add 字段名 字段类型;
删除字段:	 alter table 表名 drop 字段名;(若只剩最后一个字段则无法删除)
修改字段类型: alter table 表名 change 旧列名 新列名 类型;
删除列:		 alter table 表名 drop 列名;
重命名表:	 alter table 旧表名 rename to 新表名;

where 用法

where 用法:  where id>2;
              where id!=2;
where id in (1,值2...值N);(查询id在1到N中的数据)
where id between A and B;(查询在A到B中的数据) (where用来找位置)

group用法:group通常与统计函数连用;

统计函数:max(最大),min(最小),sum(求总和),avg(求平均),count(求总行数)

select id,max(price) from goods group by id;
(通过以id分组找出表goods中price列最大值,并显示出每组id及最大值)
select avg(price) from goods;
select count(*) from goods group by id;

having用法

select 列名1,列名2 from 表名 where 位置 having 筛选条件;
select name,id,price from goods where id=3 having price>200;having用来筛选)

order by用法

order by 列名;(升序排列)
order by 列名 desc;(降序排列)
order by的多字段排序:eg.order by1,2;(先按列1排再按列2排)

limit用法

在语句最后,起限制条目的作用。
eg.limit offset n;
指跳过前offset个,然后再取n个。

索引:
添加索引:create index 索引名 on 表名(列名 asc/desc);(升序/降序索引)
删除索引:drop index 索引名 on 表名;

where型的子查询:指把内层查询的结果作为外层查询的比较条件。
from型的子查询:把内层的查询结果当成临时表,供外层sql再次查询
exists型的子查询:把外层的查询结果,拿到内层,看内层的查询是否成立。

int(19):

指定数字的显示宽度为19,与实际存储数值的范围无关

float(7,2):

7是显示宽度指示器,指定显示的浮点数为7位数字(与float实际存储值的范围无关),
2 代表小数点后只有两位小数(第三位会四舍五入后插入数据库)

decimal(7,2):

7表示数值的精度,即实际保存到数据库的有效数字的总个数; 
2代表小数点后的位数(同上)

你可能感兴趣的:(mysql,mysql)