MySQL的命令

一、连接数据库
mysql -u 用户名 -h 主机地址 -p 用户密码
exit 退出mysql

二、sql 语句简介
1、数据查询语句(DQL) select   数据查询
2、数据操作语句(DML) insert   插入
                                     update   更新
                                     delete   删除
3、数据定义语句(DDL) create   新建
                                     alter    修改结构
                                     drop     删除
                                     rename   重命名
                                     truncate 删除
4、事物控制语句(TC)   commit   提交
                                     rollback 事物回滚
                                     savepoint 存储点
5、数据控制语言(DCL) grant     授权
                                     revoke    解除授权

三、数据库
1、数据库的创建:
create database 数据库名称
2、查看已有数据库:
show databases

3、使用以创建的数据库:
use 数据库名称

 

四、常用的数据类型
整型:                             int 4字节
浮点型;                         float 4字节
                                       double 8字节
字符串类型:                  char(n) 固定长度
                                       varchar(n) 可变长度
日期和时间数据类型:    date 日期
                                       time 时间
                                       datetime 时间日期
enum数据类型:            enum数据类型只能取一个值
set 数据类型:               set 数据类型可以取多个值 


五、数据表
1、数据表的创建;
create table 表名
(
属性名称 数据类型 [约束条件]
..................
);
2、查看已有的数据表命令:
show tables
3、查看已有创建的数据表属性命令:
desc 表名


六、数据表的约束
1、主键约束:primary key
表中的每一行都应该具有可以唯一标识自己的一列(或一组列)。
而这个承担标识作用的列称为主键。如果没有主键,数据的管理将会十分混乱。
比如会存在多条一模一样的记录,删除和修改特定行十分困难
定义为主键的属性不允许为空
定义为主键的属性不允许输入重复值
定义主键约束时,会在主键列自动创建索引,加快对主键的查询速度

2、外键约束:foreign key (父表主键属名) references 父表名称(父表主键属名)
如果一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。
 
外键的作用:
对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败。
对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败。

语法: foreign key (父表主键属名) references 父表名称(父表主键属名) on delete cascade on update cascade;

ON DELETE、ON UPDATE指明父表中对主键进行删除、更新操作,不指定则表示不能进行删除、更新操作

外键的几种格式:
CASCADE     表明子表中外键字段值也会被更新或删除
SET NULL     父表更新或删除时,子表字段值设置为NULL
NO ACTION  父表更新或删除时,子表不进行任何操作

3、唯一约束: unique
确保不是主键的属性不会出现重复数据
唯一约束与主键约束的区别:
a.一个表只能定义一个主键约束,但是可以定义超过1个唯一性约束
b.主键约束不允许属性值为空,而唯一性约束的属性允许为空

4、非空约束:not null
确保属性列中的数据不能为空,如果没有明确指定非空约束,则默认允许为空

5、默认值约束:default
即向表中插入数据时,如果用户没有明确给出属性的值,数据库会自动为该属性添加默认值

6、自增约束: auto_increment
当属性列定义为AUTO_INCREMENT时,能够为新插入的行赋值为上一次插入的值+1
MySQL要求AUTO_INCREMENT只能用于作为主键的列

七、修改指令 alter
1、修改数据库:
alter database 数据库名称
[default character 字符集 collate 校对集]

2、修改数据表
a.新增属性
alter table 表名 add 属性名称 数据类型[约束]
b.修改属性
alter table 表名 modify 属性名称 数据类型[约束]
c.修该属性名称
alter table 表名 change 属性名称1 属性名称2 数据类型[约束]
d.删除属性
alter table 表名 drop 属性名称
e.新增属性约束
alter table 表名 add constraint 约束别名 约束(对应属性)
f.删除属性约束
alter table 表名 drop 约束
g.修该表名
alter table 表名 rename to 新表名
rename table 原表名 to 新表名

八、删除数据库和数据表 drop
drop database 数据库名称
drop table 表名

删除数据库、数据表时,如果数据库、数据表不存在,命令执行会出错
当不确定数据库、数据表是否存在时,可以增加控制流语句来判断,避免命令出错
例子: DROP DATABASE IF EXISTS test_db;
           DROP TABLE IF EXISTS test_table;
IF EXISTS或者IF NOT EXISTS同样可以用于数据库、数据表的创建

九、数据插入 insert into .... values ......
insert into 表名(属性1,属性2,...) values(数值1,数值2,....)
向数据表中插入数据时,值与属性要一一对应,且数据类型要匹配
当使用INSERT语句向表中插入数据时,如果不指定具体属性,则表示向所有属性中插入数据

#特殊用法:一张表中的数据插入另外一张表中
insert into 表名1(属性1...) select 表名2.属性1,..... from 表名2

十、数据更新 update ... set .....
update 表名 set 属性1=新值1,属性2=新值2,......[where 条件子句]
UPDATE语句会将数据表中满足WHERE条件的对应元组的属性1、属性2…更新为新的值
如果后面不接WHERE条件子句,则会更新整张表的所有数据

十一、数据删除 delete/truncate
delete from 表名 [where条件子句]
DELETE语句会将数据表中满足WHERE条件的对应元组删除
如果后面不接WHERE条件子句,则会删除数据表中的所有数据
truncate table 表名

#TRUNCATE和DELETE的区别:
a.DELETE可以通过WHERE条件选择要删除的部分数据,并返回被删除的记录数,使用灵活,但执行速度不快
b.TRUNCATE不能删除指定的部分数据,而且不会返回被删除的记录数,但执行速度非常快

十二、数据查询 select
select 属性1,属性2,.....from 表名
1、查询所有 *
select * from 表名

2、算数查询
能够在SELECT语句查询的结果基础上进行相应的数学运算
select 属性+数值 from 表名

3、限定查询
在使用SELECT语句进行查询时,使用WHERE子句,就能查询出满足条件的记录,而不是表中的所有记录
select 属性 from 表名 where 限定条件
在WHERE子句中设置的限定条件,一般由各种运算符组成
MySQL中常用的运算符有几类:数学运算符、比较运算符、逻辑运算符

a.普通比较运算符
=等于 >大于  >=大于等于 <小于 <=小于等于 <>,!=不等于

b.特殊比较运算符
between ...and... 在两个数值之间
in....                    匹配列的值
like...                  匹配字符模式
-- #通配符%代表若干个字符,通配符_代表一个字符
-- #like '%字符%' 前后匹配多个字符
-- #like '_字符'    匹配一个字符
is null 匹配空值

c.逻辑运算符
and 或者 &&         与的关系
or  或者 ||              或的关系
not 或者 !           非的关系

#运算符优先级:
数学运算符>比较运算符>逻辑运算符

4、去除重复 distinct
使用DISTINCT关键字能够将查询到的结果集中重复的记录去除
select distinct(属性) from 表名

5、设置别名 as
使用AS关键字可以在查询时设置属性(列)的别名,不过AS可以省略

6、排序 order by
使用ORDER BY子句可以将SELECT查询到的结果集按照指定属性排序
默认采用升序(ASC)排序方式,也可以使用降序(DESC)

7、聚合函数
a.计数函数 count()
b.平均值函数 avg()
c.求和函数 sum()
d.最值函数 max(),min()
e.列拼接函数 group_concat
将表中某个属性的所有值拼接到同一个结果中,默认值与值之间用逗号分隔

8、分组 group by
使用GROUP BY语句用于结合聚合函数,根据一个或多个列对结果集进行分组
一般分组GROUP BY子句和聚合函数一起使用

和分组GROUP BY子句经常一起使用的还有HAVING子句
HAVING子句为分组统计进一步设置统计条件,效果和WHERE子句类似

它们的区别是:
a.WHERE子句在查询前限定查询条件
b.HAVING子句在分组后进行进一步限定

9、限定结果 limit
使用LIMIT子句可以限定查询返回的记录数
例如:查询数据表中前两条记录
SQL语句:SELECT * FROM emp LIMIT 2;

LIMIT子句后面可以有一个参数,也可以有两个参数
如果有一个参数,该参数表示从表开始位置查询对应的记录数量
如果有两个参数,那么第一个参数表示起始位置与第一行的偏移量,第二个参数表示查询的数量

10、单行函数
a.字符串函数:
upper(x)                                       将x中的字符转换为大写
lower(x)                                        将x中的字符转换为小写
length(x)                                      返回x中的字符数(1个中文算3个字符,数字和字母算1个字符)
char_length(x)                             返回x中的字符数(1个中文算1个字符)
replace(x,char1,char2)                将x中的char1替换为char2
substring(x,start,[length])             从x的start位置开始返回长度为length的字符串
lpad(x,length,char)                      从x的左边使用char将x补齐到长度为length
rpad(x,length,char)                      从x的右边边使用char将x补齐到长度为length
left(x,length)                                从x的左边返回length个字符
right(x,length)                              从x的右边返回length个字符
concat(str1,str2)                          将str1和str2连接
instr(str,char)                               返回char在str中第一次出现的位置

b.日期时间函数
curdate()                                     返回当前日期
curtime()                                      返回当前时间
now()                                           返回当前日期时间
last_day(x)                                  返回日期x所在月份的最后一天的日期
date_add(x,interval n f)               返回日期x加上间隔时间n的结果,f为day/month/year
date_format(x,fmt)                       返回日期x按指定格式fmt格式化后的结果
timestampdief(f,date1,date2)      返回后面的日期按照f减去前面的时间,f为day/month/year

c.数学函数
abs(x)                                         返回x的绝对值
floor(x)                                        返回小于等于x的最大整数
ceiling(x)                                     返回大于等于x的最大整数
mod(x,y)                                     返回x除以y的余数
round(x)                                     返回x的整数部分(四舍五入)
round(x,y)                                   返回x精确到y的结果(四舍五入)
truncate(x,y)                               返回x截取到y的结果(非四舍五入)
greatest(x1,x2,...xn)                    返回集合中的最大值
least(x1,x2,....xn)                        返回集合中的最小值

d.控制流函数
if(expr,x,y)                                  如果表达式expr成立返回x,不成立返回y
ifnull(x,y)                                    如果x为空返回y,否则返回x
nullif(x,y)                                    如果x和y相等返回null,不相等返回y

case                                           如果表达式expr成立返回x,不成立返回y
when expr then x                        (效果和if函数相等)
else y
end                         

case x                                         如果x等于x1返回y1,等于x2返回y2,否则返回y3
when x1 then y1
when x2 then y2
else y3
end     

11.多标查询
a.内连接
等值连接
select * from t1 inner join t2 where t1.n1=t2.n2;
select * from t1 join t2 where t1.n1=t2.n2;
select * from t1,t2 where t1.n1=t2.n2;          
非等值连接
select * from t1,t2 where t1.n1>t2.n2;
自然连接
概念:和等值连接类似,但是连接时不需要额外指定连接条件
因为会自动按照相同属性进行等值连接,且会删除结果集中的重复属性
select * from t1 natural join t2;
select * from t1 inner join t2 using(n);
自连接
概念:就是表与它自己进行的连接查询,即自连接
在自连接查询过程中,一定要设置表的别名
select e1.ename ,e2.ename from emp e1 ,emp e2 where e1.ename = e2.ename;

b.外链接
左外连接
概念:在连接查询过程中,以左表为主表,在结果集中保留左表中的全部记录及右表中满足匹配条件的记录
select * from t1 left outer join t2 on t1.n1 = t2.n2 ;

右外连接
概念:在连接查询过程中,以右表为主表,在结果集中保留右表中的全部记录及左表中满足匹配条件的记录
select * from t1 right outer join t2 on t1.n1 = t2.n2 ;

12.子查询
a.单行子查询
用比较运算符
b.多行子查询
in                等于列表中的任何值
any             比较子查询返回每一个值,只要其中一个值满足条件就返回ture
all               比较子查询返回的每一个值,要其中每一个值都要满足条件才返回ture
c.多列子查询
in

13.合并结果集
在MySQL中使用UNION语句可以将多个SELECT语句的结果集合并消除表中任何重复行
使用UNION进行合并时要求:
a. 多个SELECT语句中的列名可以不一样, UNION结果集中的列名是等于第一个SELECT语句中的列名
b. 多个SELECT语句必须拥有相同数量的列
c. 多个SELECT语句列必须拥有相似的数据类型
d. 多个SELECT语句列的顺序必须相同

例子:
SELECT empno FROM emp WHERE deptno=3
UNION
SELECT empno FROM emp WHERE deptno=4;

 

 




 

posted @ 2019-09-11 19:48  橘子可乐  阅读(164)  评论(0编辑  收藏  举报