首页 > 数据库技术 > 详细

Mysql基础知识

时间:2017-01-04 00:09:27      阅读:253      评论:0      收藏:0      [点我收藏+]

1.进入mysql命令行:mysql -uroot -pxxx;

2.数据库

查看:show databases;

创建:create database cndb charset utf8;

删除:drop database cndb;

选择:use cndb;

查看创建数据库语句:show create database cndb\G;

3.表

约束:自增长:auto_increment

非空:not null

默认值:default ‘xxx‘

唯一约束:unique

指定字符集:charset utf-8

主键:primary key具有唯一性,不能为空

外键:foreign key bj_fk tablea(sid) reference to tableb(id)用来表示两个表之间的关系

增:

create table score(

id int auto_increment primary key,

s_id int not null,

grade float not null);

 

create table students(

id int auto_increment primary key,

name varchar(10) not null,

sex varchar(5) default ‘男‘,

addr varchar(50),

phone int not null unique);

删:drop table tablename;

改:改表明:alter table students rename stu;

修改字段数据类型:alter table stu modify name varchar(20)unique;

修改字段的名称:alter table stu  change name stu_name varchar(20);

新增一字段,放在哪个位置:alter table stu add class varchar(20) not null after stu_name;

删除一字段:alter table stu drop addr;

查:

查看所有表:show tables;

查看建表语句:show create table tablename;

查看表结构:desc stu;

数据:

增:

指定字段:

insert into stu(stu_name,add,phone)

values(‘月月‘,‘西安‘,123);

不指定字段:

insert into stu values(‘‘,‘月月‘,‘‘,‘‘,‘西安‘,123);

指定字段的话,插入的值和字段对应;不指定的话,要把所有的字典值都写全。

同时插入多条

INSERT INTO stu(stu_name, add, phone)VALUES(‘狙击‘, ‘湖北‘, 1091199),(‘张艳‘,‘湖南‘,1999),(‘夹伟‘,‘北京‘,101999);

删:

 删除整个表里的数据:DELETE from blk;  truncate tablename;

delete清空的表自增长id还会继续增长;truncate 清空的表自增长id从1开始,truncate速度比delete要快,因为truncate 是从磁盘上直接把数据删除,恢复不了。

删除指定的数据:delete from blk where stu_name = ‘狙击‘;

改:

如果不指定条件的话,修改的是整个表的数据:update blk set money=80; 

修改指定的数据:update blk set money=90 where stu_name=‘胡静‘ ;

修改多个字段:update blk set money=100,phone=10000 where stu_name=‘胡静‘ ;

在原来的值基础上做修改:UPDATE blk set money=money+100 ;

查:

从第几条开始,下面的x条,不包含开始的那一条:

SELECT * from blk limit 1,5;

查询5条:

SELECT * from blk limit 5;

指定查询的字段:SELECT id,stu_name,sex,money,phone from blk;

查询所有的数据:SELECT * from blk;

指定条件:SELECT * from blk where sex=‘男‘;

多个条件,必须同时满足:SELECT * from blk where sex=‘男‘ and money>100;

多个条件,有一个满足即可:SELECT * from blk where sex=‘男‘ or sex=‘未知‘ ;

<>也是不等于:SELECT * from blk where sex !=‘男‘;

模糊匹配,%代表的是通配符,必须得用like:SELECT * FROM blk where addr like ‘%东京%‘;

_通配符表示任意一个单字符: SELECT * from blk a where a.stu_name like ‘姚_‘;

给表起别名,as可以省略:

SELECT a.stu_name 学生名称,a.phone 学生电话 from blk as a where a.stu_name=‘姚远‘;

in:SELECT * from blk a where  a.stu_name in (‘阿翔‘,‘林倩‘,‘姚远‘);

在什么什么之间的数据:SELECT * from blk a where  a.money BETWEEN 1000 and 10000;

order by xxx desc,根据哪个字段继续排序,默认是升序;降序是desc,升序asc:

SELECT * from blk ORDER BY money desc;

查询数据为空:SELECT * from blk a where a.addr = ‘‘ or a.addr is null;

去重:SELECT DISTINCT a.money from blk a ;

统计行数:SELECT COUNT(*) 学生人数 from blk  where sex=‘女‘;

最大值:SELECT MAX(a.money) 钱最多 from blk a;

最小值:SELECT min(money) 钱最少 from blk;

平均数:SELECT AVG(a.money) 平均多少钱 from blk a;

总和:SELECT sum(a.money) 总共多少钱 from blk a;

分组:SELECT sex 性别,count(*) 人数 from blk GROUP BY sex; 

如果group by后面有条件的话,必须得用having子句,having子句里面用到的字段必须出现在select后面,如果group by和order by一起用的话,order by必须写在group by后面

SELECT sex 性别,count(*) 人数,a.stu_name 名字 FROM blk a

WHERE a.money > 300 GROUP BY a.id

HAVING a.stu_name LIKE ‘姚%‘;

用来合并两条select语句的结果,两条select语句字段数量要一致,并且数据类型也要一致
union和union all的区别就是一个会去重一个不会:

SELECT id,stu_name from blk UNION SELECT id,t_name from teacher;

多表关联:

SELECT * FROM USER a,accounts b WHERE a.id = b.user_id AND a.username = ‘niuhy‘;

两个表里面都存在的数据查出来:SELECT * from blk a ,score b where a.id=b.s_id;

LEFT JOIN会把左边表所有的数据都查出来,右边表有匹配的就查出来:

SELECT * from blk a LEFT JOIN score b on a.id=b.s_id;

RIGHT JOIN会把右边表所有的数据都查出来,左边表有匹配的就查出来

SELECT * from blk a RIGHT JOIN score b on a.id=b.s_id;

INNER JOIN两边表里都匹配的数据才查到:

SELECT * from blk a inner JOIN score b on a.id=b.s_id;

子查询:
把一条sql的结果,作为另一条sql的条件
SELECT * from score a where a.s_id = (SELECT id from blk where stu_name=‘阿翔‘);

把子查询当成一个表
SELECT a.grade 成绩,b.stu_name 学生名称,b.id 学号 FROM score a,
(SELECT id,stu_name FROM blk WHERE stu_name = ‘阿翔‘) b
WHERE a.s_id = b.id;

数据库权限:
mysql数据的权限实质上都是在user表里控制的
1、grant

所有的权限  所有数据库下面的所有表  用户 用户ip 

grant all on   *.* to ‘andashu‘@‘localhost‘ IDENTIFIED BY ‘123456‘ with grant option;本机权限

密码       #有执行grant语句的权限

grant all on   *.* to ‘andashu‘@‘%‘ IDENTIFIED BY ‘123456‘ with grant option;其他机器权限

取消授权:
Revoke select on *.* from dba@localhost;
Revoke all on *.* from andashu@localhost;

2、修改user表的数据
对user表进行增加、修改和删除
flush privileges;#刷新权限

备份数据库:
mysqldump -uroot -p123456 db > db.sql
mysqldump -uroot -p123456 -A > all.sql

恢复数据:
mysql -uroot -p123456 db < db.sql
存储过程:

批量的造数据
delimiter $$; #为了改结束符
CREATE PROCEDURE big_data1(num int)#代表要造多少条数据 100
BEGIN
DECLARE i int;
set i=0;
WHILE i<num do
insert into blk (stu_name,money) VALUES (CONCAT(‘宋灏志‘,i),20000);
#CONCAT的作用是连接不同类型的数据
#把字符串和数字拼接到一起
set i=i+1;
end WHILE;
End
$$;
delimiter;

call big_data1(500); #调用

3、环境搭建
1、下载依赖软件、安装好
2、获取源代码(打包)
得根据语言的不通来看是否需要编译、打包
3、导入基础数据
4、修改配置文件
5、启动 java程序(tomcat、weblogic、jetty、resin、ws)
php、ruby、python (nginx、apache)

日常部署
1、获取最新的代码(编译、打包)
如果有表结构变更的话,要执行sql
2、修改配置文件
3、重启你的程序

 

Mysql基础知识

原文:http://www.cnblogs.com/cuinan/p/6246719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!