一、Sql语言概述mysql
a) ddl语句(数据定义语言):create,alter,dropsql
b) dml语句(数据操做语言):update,insert,delete,select数据库
c) dcl语句(数据控制语言):是数据库控制功能。用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句服务器
二、链接和登陆数据库ide
a) Mysql -h host -P3306 -uuser -ppassword函数
b) -h:当链接MySQL服务器不在同台主机时,填写主机名或IP地址,默认是localhostspa
c) -P:访问数据库的端口,默认是3306设计
d) -u:登陆MySQL的用户名3d
e) -p:登陆MySQL的密码对象
三、存储引擎
a) Show engines:能够查看MySQL服务实例支持的存储引擎
b) InnoDB(行级锁):支持外键(foreign key),支持事务(transaction),在修改数据的时候只修改一条数据,在操做其余数据的时候还能够正常操做
c) MyISAM(表锁):不支持事务、外键,指定表的存储引擎eg:create table
四、常见的惟一性约束
a) Primary key:主键约束
b) Unique:惟一性约束
c) Not null:非空值约束
d) Auto_increment:用于整列默认递增
e) Default default_value:默认值约束
五、查看表结构
a) Desc 表名:查看表结构
b) Show create table 表名:查看建表的语句
六、DDL语句
a) Alter table 表名:修改表名 eg:alter table hyn_test rename hyn
b) 修改字段名
1.alter table hyn modify age varchar(5); #把hyn表中的age字段的数据类型改为varchar类型
2.alter table hyn change age ag varchar(5); #同时修改类型和字段名字
3.选中某个表,右键设计表也能够修改表中的字段
c) 增长字段:alter table 表名add 属性名 数据类型[完整性约束条件] [first | after 属性名2]
d) 删除字段:alter table 表名 drop age;
e) 删除表
1.truncate table 表名; #删除以后没法恢复,自增加id从1开始
2.delete from 表名; #删除以后能够回滚,自增加id从上一个id以后开始增长
3.drop 表名; #删除以后没法回滚
f) 增长外键:alter table 表名 add constraint FK_ID foreign key(外键字段名) references 外表表名(对应的表的主键字段名);
g) 删除标的外键约束:alter table 表名 drop foreign key 外键别名;
七、DML语句
a) 添加数据
1.insert into 表名(要插入的表的字段) values(); #指定字段
2.insert into 表名 values(); #必需要填写完全部的列名
3.set autocommit=0; #关闭自动提交
4.commit #开启自动提交
b) 修改表数据
1.update 表名 set stu_name='张山' where stu_id=1; #修改id为1的用户名
2.update 表名 set stu_name='张山',cn='JP' where stu_id=1; #修改多个字段
3.update 表名 set stu_name='张山',cn='JP' limit 5,10; #修改第5到10行的数据,(基本上没有多大意义,只须要了解怎么用便可)
c) 查询语句
1.select * from 表名 where age is null or age=''; #查询空数据
2.select * from 表名 where stu_name like '张%'; #查询以张开头的用户
3.select * from 表名 where stu_name like '张_'; #匹配任意一个字符
d) 使用聚合函数查询
1.avg,sum,max,min,count; eg:select avg(sarlary) from 表名; #单独使用聚合函数
2.group by; eg:select count(*),sex from 表名 group by sex; #聚合函数和分组函数一块儿使用
3.分组以后有条件的话不能直接加where,用having,eg:select stu_id from score group by stu_id having count(*) < 2
e) 备份表
1.create table 表名 like 表名(数据库中已有的表); #建立和数据库中已存在的表相同表结构的表
2.create table 表名_bak as select * from 表名; #先建立一个表,再把这个表的数据所有加入到新建的表中
f) 查询和修改
1.left join:查询出左表的全部成绩,右表中没有成绩的数据不会查询出来
2.right join:查询出右表的全部成绩,左表中没有成绩的不会查询出来
3.inner join:查询连个表的全部数据
4.update 表1,表2 set 字段1=,字段2= where 表1.id=表2.id and... #多表修改
g) 去重
1.select distinct 字段名 from 表名; #去掉重复的字段名
2.union,有重复的直接去重,条件比较多,不知道怎么关联的时候用, eg:select 字段1,字段2 from 表名 where 条件 union select 字段1,字段2 from 表名 条件;
3.union all,有重复的数据不会去重
h) 子查询
1.select * from 表名 where id=(select id from 表名 where 条件);
2.update 表名 set 字段名=‘’ where id=(select ........);
3.把子查询的结果当成一个表来操做,以下图
八、DCL语句
a) Grant all on *.* to ‘root’@’localhost’identified by ‘123456’with grant option; #增长一个超级用户
b) Grant select,insert,update on bugfree.* to ‘test’@’%’ identified by ‘123456’ #增长一个普通用户
c) Revoke 权限 on 数据库对象 from 用户 #取消权限
d) 即容许本机链接又运行远程链接须要加localhost和%
九、数据库备份
a) Mysqldump,eg:mysqldump -uroot -p123456 数据库名 [表名]> 数据库名.sql;
b) 备份整个数据库,eg:mysqldump -uroot -p123456 -A > all.sql
c) 恢复数据库备份,eg:mysql -uroot -p123456 数据库名 < xxx.sql
十、写一个存储过程,实现向某个表中自动添加500条数据
#默认状况下,MySQL一遇到“;”就会自动执行,在这样的状况下就须要事先把delimiter后面的符号换成“$$”或“//”;加$$的目的就是为了让整个语句写完以后在执行
delimiter $$;
create procedure test_student(count int)
begin
declare name varchar(20); #声明变量
declare sex varchar(10);
declare addr varchar(50);
declare class varchar(20);
declare i int;
set i = 0; #设置变量的值
set sex= 'F';
set addr='beijingchaoyang';
set class='wusuopu';
while i<count do #开始循环
set name=CONCAT('difeng',i); #链接字符串函数
insert into students (name,sex,class,addr) values (name,sex,class,addr); #插入数据操做
set i=i+1;
end while; #结束循环
end
$$;
delimiter;
call test_student(500); #调用存储过程
select count(*) from students; #查询students表的总数据