day07_mysql基本操作

1、数据存放目录
datadir=/app/mysql/data

2、从配置文件中过滤
cat /etc/my.cnf |grep datadir


3、Mysql分服务器端和客户端
典型的 C/S结构

mysql-server
mysql-client

4、连接服务器
格式: mysql -h 服务器IP -u 用户名 -p密码

   1、服务器和客户端在一台机器,可以把-h省略
   2、默认会有root用户
      (1)mysql中的root用户和linux中的root用户,只是巧合同名。
      (2)它们存放用户名和密码的地方都不一样: 
      linux中的root用户 /etc/passwd   
      mysql中的root用户存放在库中系统表中
   3、密码默认为空
   4、默认拒绝远程登录



例: 
   mysql -h 192.168.8.100 -u root -pmysql
   mysql -u root -pmysql  【如果是登录本机,可以省略 -h选项】


5、退出服务器
quit或ctrl+c(建议使用,更安全一些)




----------库操作----------

在操作系统中往文本中写数据
比如:vim /tmp/haha.txt
    
    

在Mysql数据库中,组织数据用表来组织数据,mysql是关系型数据库。

什么是关系呢?关系就是表。

什么是数据库的表?可以把表想成咱们平时填写的纸质表格文件

什么是数据库?
平时纸质表格文件多了,就会存放在档案袋里,这个档案袋就是数据库。
平时纸质表格文件多了,就会存放在箱子里,这个箱子就是数据库。
平时纸质表格文件多了,就会存放在你包里,你包就是数据库。




如何操作数据库?如何操作表?如何操作表内的数据?增 删 查 改



mysql>show databases; 【查看当前有哪些数据库】
           information_schema库 【主要存放mysql运行中的一些状态】




cd /app/mysql/data
mkdir vfast
mysql>show databases; 【在Mysql中:数据库就是一个目录】



cd /app/mysql/data
ll   查看【数据库目录的owner和group应该全是Mysql,否则无法正常使用】


ls -ld /app/mysql/data 【此目录及其子目录,owner和group应该全是Mysql】



cd /app/mysql/data
rm -rf vfast

mysql>show databases; 
mysql>create database `vfast`; (增加数据库,如果名子以数字开头,加上``)
mysql>show databases; 




cd /app/mysql/data
ll   查看【数据库目录的owner和group全是Mysql】



mysql>show databases; 
mysql>drop database vfast;(删除数据库,线上生产库不要轻易执行,非常危险,如果工作中非常执行,要有邮件证明)





mysql>show databases; 
mysql>create database `数据库名`; 

cd /app/mysql/data
mv vfast haha

mysql>show databases;


----------表操作----------
咱们要删除一个文件
1、删除绝对路径      rm -rf /tmp/123.txt
2、进入目录后,再删除   cd /tmp            rm -rf 123.txt


咱们mysql的库就是一个目录,咱们创建表也和上面原理一样


(1)create table 库名.表名(name char(10),age int);

(2)use 库名
create table 表名(name char(10),age int);

(3)show tables

(4)drop table 表名


mysql>create table v1(name char(10),age int);
ERROR 1046 (3D000):No database selected【你登录到Mysql后,没有选择任何库】
mysql>

mysql>show databases;
mysql>create database vfast;
mysql>show databases;
(1)
mysql>create table vfast.v1(name char(10),age int);【我要在vfast库中创建一个v1表】

(2)
mysql>use vfast
mysql>create table v2(name char(10),age int);

mysql>show tables;
mysql>drop table v1;





--------【数据类型】--------
int 整形
bigint 长整形


float 浮点


char 字符
varchar 长度可变字符(比较消耗CPU)
比如:你去酒店订房间,如果是char订了2个房间,只有1个房间你住了,另一个退不了款
      你去酒店订房间,如果是varchar订了2个房间,只有1个房间你住了,另一个能退款
      
char(5) 不管你用多少,5个空间全分配给你
varchar(5) 你用了几个,就给你分配几个空间 

所以,从存放数据的角度看,varchar更经济一些。
但是反事有一利就有一弊端,它得先计算吧,查一下,一涉及到计算就比较消耗cpu。    
建议使用char类型      
      
      

date 日期 20130101和'2013-01-01' 
create table a6(dd date);
insert into a6 values(20130101);
insert into a6 values('2013-01-01');
select * from a6;


time 时间  
datetime 具体日期时间



enum 枚举   enum('M','F') 65535选1,单选

mysql> create table a7(sex enum('NAN','NV'));【限制取值只能是'NAN','NV'】
mysql> insert into a7 values('NAN');
mysql> insert into a7 values('NV');
mysql> insert into a7 values('WEIZHI');
ERROR 1265 (01000): Data truncated for column 'sex' at row 1



set 集合    set('NAN,NV') 可以64选多,多选

mysql> create table a8(sex set('NAN','NV'));【限制取值只能是'NAN','NV'】
mysql> insert into a8 values('NAN,NV');
mysql> insert into a8 values('NAN');
mysql> select * from a8;




blob 二进制 存放图片
text 大文本  65535个byte
----------------------------------------


desc 表名

alter table 表名 modify 列名 类型(长度),类型(长度)   【修改表的字段长度】

alter table 表名 add 列名 类型(长度)    【为表增加新列及类型】
 
alter table 表名 drop 列名 类型     【删除表的指定列】

alter table 表名 change 列名 新列名 类型    【修改指定列的名字、类型】

alter table 表名 rename 新表名   【修改表的名字】

? alter table 【使用系统帮助】


举例:
mysql> create table t1(a int,b int);
mysql> alter table t1 modify a char(10);
mysql> desc t1;
mysql> alter table t1 add c int;
mysql> desc t1;
mysql> alter table t1 drop b;
mysql> desc t1;
mysql> alter table t1 change a aa int;
mysql> desc t1;
mysql> alter table t1 rename t2;
mysql> desc t1;
mysql> desc t2;


--------------数据操作-------------
create table b(a1 int,a2 char(10));
insert into b values(1,'a');
select * from b;

insert into b values(2,'b'),(3,'c');
select * from b;

insert into b(a1) values(4);
select * from b;


delete from b where a1=1;
select * from b;


delete from b;【全删除,一行一行删除】 
truncate b;【全删除,比较快】


insert into b values(1,'a');
insert into b values(2,'b');
select * from b;
update b set a1=100 where a2='a';
select * from b;


update b set a1=66;
select * from b;



select 1>=1; 【逻辑值1】
select 1>=11;【逻辑值0】
select 1+11; 【数据值12】
select not 1>=11;【逻辑值1】
select 1>=11 and 1>0;【逻辑值0】
select 1>=11 or 1>0;【逻辑值1】
select not(1>=11 or 1>0);【逻辑值0】
select 5 between 1 and 10;【逻辑值1】




输出美观,别名
select name,shuxue+yuwen+yingyu as total from score;




聚集函数
sum
max
min
avg
count


select count(*) from 表 一共多少行

limit 1  取第1条记录


1  语文
2  Oracle


create table score(sno int,cno int,chengji int);
insert into score values(1,1,100),(1,2,100),(2,1,90),(2,2,100),(3,1,80),(3,2,60),(4,1,70),(4,2,50);


 语文成绩降序排列,取出第1行记录,详细信息
 select * from score where cno=1 order by 成绩 desc limit 1;【排序后,取1行记录】
 
 select * from score where cno=1 order by chengji desc limit 1;

 语文成绩降序排列,取出前3行记录,详细信息
 select * from score order by 语文成绩 desc limit 3;【排序后,取3行记录】

 select * from score where cno=1 order by chengji desc limit 3;

 语文成绩降序排列,取出前第2行和第3行记录,详细信息
 select * from score order by 语文成绩 desc limit 1,2;【排序后,从第1行之后,取2行,实际是第2和第3名】

select * from score where cno=1 order by chengji desc limit 1,2;

group by

select sex,count(*) from student group by sex;
select sex,count(*) from student group by sex having count(*) >1;

不同数据库实现分页操作:
oracle rownum
mysql limit
sqlserver top




posted @ 2016-03-21 21:36  暗夜小精灵~~  阅读(198)  评论(0编辑  收藏  举报