码迷,mamicode.com
首页 > 数据库 > 详细

mysql基本使用

时间:2018-04-07 22:54:08      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:文件   超级用户   内置函数   sel   hda   大小写   建立   集群   ring   

mysql的使用

mysql产品

    mysql百科

        瑞典MySQL AB公司开发,目前属于Oracle公司。

        MySQL是一种关联数据库管理系统 由于其体积小、速度快、总体拥有成本低

        MySQL软件采用了双授权政策(本词条"授权政策"),它分为社区版和商业版    

        LDAP

 

 

mysql产品的版本

    搜索关键字    MySQL各版本的区别

    Community版本

    Enterprise版本

        MySQL标准版     

        MySQL企业版

        MySQL集群版

    下载Community版本, 免费..... OK

    Enterprise版本 30天试用期

    http://www.mysql.com/

Community完全够用了。Enterprise收费的,有问题mysql官方可以支持。

 

mysql产品下载

    版本细节

        linux(32 64) win(32 64)

请到如下网站

https://www.mysql.com/

官方文档上有关MySQL安装文件类型说明:

  Linux supports anumber of different solutions for installing MySQL. The recommended method isto use one of the distributions from Oracle. If you choose this method, thereare three options available:

 

  (1)Installingfrom a generic binary package in .tar.gz format. See Section 2.2,"Installing MySQL from Generic Binaries on Unix/Linux" for moreinformation.

 

  (2)Extractingand compiling MySQL from a source distribution. For detailed instructions,see Section 2.9, "InstallingMySQL from Source".

 

  (3)Installingusing a pre-compiled RPM package. For more information on using the RPMsolution, see Section 2.5.1,"Installing MySQL from RPM Packages on Linux".

 

--这里讲了3种方式来安装MySQL数据库:

第一种,二进制包

第二种,源码包

第三种,rpm包

 

MySQL Community Server--------mysql的社区版本,开源、免费

MySQL Enterprise Edition---------mysql企业版,非免费

MySQL Cluster-----------------------mysql集群版本,开源、免费

 

MySQL各个版本区别

    http://www.admin10000.com/Document/62.html

 

SQL structed query language

Sql语言的组成部分

DDL

DML

完整性定义语言:DDL的一部分功能

试图定义:

事物控制:

嵌入式SQL和动态SQL:

授权:DCL

 

使用程序设计语言如果跟RDBMS交互

嵌入式SQL:与动态SQL类似,但其语言必须程序编译时完全确定下来

ODBC

动态SQL: 程序设计语言使用函数(mysql_connect())或者方法与RDBMS服务建立连接,并进行交互:通过建立连接向SQL服务器发送查询语句,并将结果保存至变量中而后进行处理

 

 

 

 

 

mysql的引擎

MyiSAM 不支持事物,性能好

查询比较多,修改比较少,比如仓库

InnoDB 支持事物

在线交易,比如淘宝,经常修改

 数据库中的存储引擎其实是对使用了该引擎的表进行某种设置

MyISAM:

每表三个文件:

.frm:表结构

.idb:表数据

.MYI:表索引

InnoDB:

所有表共享的一个表空间文件:

建议:每表一个独立的表空间:

.frm:表结构

.ibd:表空间(表数据和表索引)

 

//查看引擎

mysql> SHOW ENGINES;

客户端工具

mysql 客户端工具

mysql

mysqldump

mysqladmin

mysqlcheck

mysqlport

 

MySQL非客户端工具

myisamchk

myisampack

 

DML

DML:数据操作语言 增、删、查、改

INSERT

DELETE

SELECT

UPDATE

DLL

DDL:数据定义语言 创建、删除、修改

CREATE

DROP

ALTER

DCL

DCL:数据控制语言

GRANT

REVOKE

是用来设置或更改数据库用户或角色权限的语句

数据库的操作

连接MYSQL服务器:mysql -uroot -proot

 

    mysql -uroot -p --default_character_set=gbk; (影响数据的输入和输出)

    show variables like ‘character%‘;

 

数据库的操作:创建,查看,修改,删除

    *创建:

        创建一个名称为mydb1的数据库。

            create database mydb1;

        创建一个使用utf-8字符集的mydb2数据库。

            create database mydb2 character set utf8;

        创建一个使用utf-8字符集,并带校对规则的mydb3数据库。

            create database mydb3 character set utf8 collate utf8_general_ci;

    *查看:

        显示所有数据库

            show databases;

        显示创建数据库的语句信息

            show create database mydb2;

    *修改:

        修改mydb1的字符集为gbk(不能修改数据库名)

            alter database mydb1 character set utf8;    

    *删除:

        删除数据库mydb2

            drop database mydb1;

表的操作

 

表的操作:创建,查看,修改,删除

    *创建:

        根据实体类Person创建表person

            Person {

                int id;

                String name;

            }

            create table person(

                id int,

                name varchar(20)

            );

数据类型

mysql中的数据类型:

bit 1位 但可以指定位数,如:bit<3>

int 2字节 可以指定最大位数,如:int<4> 最大为4位的整数

float 2个字节 可以指定最大的位数和最大的小数位数,如:float<5,2> 最大为一个5位的数,小数位最多2位

double 4个字节 可以指定最大的位数和最大的小数位数,如:float<6,4> 最大为一个6位的数,小数位最多4位

char 必须指定字符数,如char(5) 为不可变字符 即使存储的内容为‘ab‘,也是用5个字符的空间存储这个数据

varchar 必须指定字符数,如varchar(5) 为可变字符 如果存储的内容为‘ab‘,占用2个字符的空间;如果为‘abc‘,则占用3个字符的空间

text: 大文本(大字符串)

blob:二进制大数据 如图片,音频文件,视频文件

date: 日期 如:‘1921-01-02‘

datetime: 日期时间 如:‘1921-01-02 12:23:43‘

timeStamp: 时间戳,自动赋值为当前日期时间

 

表的基本操作

        创建一个员工表

            create table employee(id int,name varchar(20),sex bit,birthday date,salary double,entry_date date,resume text);

    *查看

        查看所有的表:

            show tables;

        查看指定表的创建语句

            show create table employee;

            mysql表 名称区分大小写

        显示指定表的结构:

            desc employee;

    *删除

        删除employee表

        drop table employee;

    *修改表

        增加一个字段:alter table worker add column height double;

        修改一个字段:alter table worker modify column height float;

        删除一个字段:alter table worker drop column height;

        更改表名:rename table employee to worker;

        修改表的字符集:alter table worker character set gbk;

    

表数据的CRUD

    *C(create增加数据) Insert语句

        新建Employee表并表中添加一些记录

            create table employee(

                id int,

                name varchar(20),

                sex bit,

                birthday date,

                salary double,

                entry_date date,

                resume text

            );

            create table employee(id int, name varchar(20),sex bit,birthday date,salary double,entry_date date,resume text);

 

插入数据

 

            insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(1,‘张三‘,1,‘1983-09-21‘,15000,‘2012-06-24‘,‘一个大牛‘);

            insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(2,‘李四‘,1,‘1984-09-21‘,10000,‘2012-07-24‘,‘一个中牛‘);

            insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(3,‘王五‘,0,‘1985-09-21‘,7000,‘2012-08-24‘,‘一个小牛‘);

            delete from employee where id=1

 

            create table employee(    id int,name varchar(20),sex bit,birthday date,salary double,entry_date date,resume text);

    

修改数据    

*U(update更新数据) Update语句

        将所有员工薪水都增加500元。

            update employee set salary=salary+500;

        将王五的员工薪水修改为10000元,resume改为也是一个中牛

            update employee set salary=10000,resume=‘也是一个中牛‘ where name=‘王五‘;

 

删除数据

    *D(drop删除数据) Delete语句

        删除表中姓名为王五的记录。

            delete from employee where name=‘王五‘;

        删除表中所有记录。

            delete from employee; --可以有条件,但删除所有记录差了一点

        使用truncate删除表中记录。

            truncate employee;--无条件 效率高

    

    *R(Retrieve查找数据) Select语句    

        准备环境:

            create table student(

            id int,

            name varchar(20),

            chinese int,

            english int,

            math int

            );

 

            insert into student(id,name,chinese,english,math) values(1,‘何东‘,80,85,90);

            insert into student(id,name,chinese,english,math) values(2,‘权筝‘,90,95,95);

            insert into student(id,name,chinese,english,math) values(3,‘何南‘,80,96,96);

            insert into student(id,name,chinese,english,math) values(4,‘叶坦‘,81,97,85);

            insert into student(id,name,chinese,english,math) values(5,‘何西‘,85,84,90);

            insert into student(id,name,chinese,english,math) values(6,‘丁香‘,92,85,87);

            insert into student(id,name,chinese,english,math) values(7,‘何北‘,75,81,80);

            insert into student(id,name,chinese,english,math) values(8,‘唐娇‘,77,80,79);

            insert into student(id,name,chinese,english,math) values(9,‘任知了‘,95,85,85);

            insert into student(id,name,chinese,english,math) values(10,‘王越‘,94,85,84);

 

        查询表中所有学生的信息。

            select * from student;

        查询表中所有学生的姓名和对应的英语成绩。

            select name,english from student;

内置函数练习

重复

        过滤表中重复数据。

            select english from student;

            select DISTINCT english from student;

            select DISTINCT english,name from student;

 

            select english+chinese+math from student;

            select english+chinese+math as 总分 from student;

            select name,english+chinese+math as 总分 from student;

 

        在所有学生英语分数上加10分特长分。

            select name,english+10 from student;

        统计每个学生的总分。

            select english+chinese+math from student;

别名

        使用别名表示学生分数

            select name,english+chinese+math as 总分 from student;

            select name,english+chinese+math 总分 from student;

 

        查询姓名为何东的学生成绩

            select * from student where name=‘何东‘;

        查询英语成绩大于90分的同学

            select * from student where english>90;

        查询总分大于250分的所有同学

            select * from student where english+chinese+math>250;

范围匹配

        查询英语分数在 85-95之间的同学。

            select * from student where english>=85 and english<=95;

            select * from student where english between 85 and 95;

or

        查询数学分数为84,90,91的同学。

            select * from student where math=84 or math=90 or math=91;

in

            select * from student where math in(84,90,91);

        查询所有姓何的学生成绩。

模糊查询

            select * from student where name like ‘何%‘;

and

        查询数学分>85,语文分>90的同学。

            select * from student where math>85 and chinese>90;

oder by [asc/desc]

        对数学成绩排序后输出。

            select * from student order by math;

        对总分排序后输出,然后再按从高到低的顺序输出

            select * from student order by math+chinese+english desc;

        对姓何的学生成绩排序输出

            select * from student where name like ‘何%‘ order by math+chinese+english desc;

            select name, math+chinese+english from student where name like ‘何%‘ order by math+chinese+english desc;

 

count

        统计一个班级共有多少学生?

            select count(*) from student;

        统计数学成绩大于90的学生有多少个?

            select count(*) from student where math>90;

        统计总分大于250的人数有多少?

            select count(*) from student where math+chinese+english>250;

sum

 

        统计一个班级数学总成绩?

            select sum(math) from student;

        统计一个班级语文、英语、数学各科的总成绩

            select sum(math), sum(chinese), sum(english) from student;

        统计一个班级语文、英语、数学的成绩总和

            select sum(math+chinese+english)from student;

            select sum(math)+sum(chinese)+sum(english) from student;

avg

        求一个班级数学平均分?

            select avg(math) from student;

        求一个班级总分平均分

            select avg(math+chinese+english)from student;

            select avg(math)+avg(chinese)+avg(english) from student;

maxAndmin

        求班级最高分和最低分

            select max(math+chinese+english),min(math+chinese+english) from student;

    

group by

        综合性练习:为学生表,增加一个班级列,然后训练分组查询

        查出各个班的总分,最高分

            准备环境

                给表添加一个字段:alter table student add column class_id int;

                更新表:

                    update student set class_id=1 where id<=5;

                    update student set class_id=2 where id>5;

            select sum(math+chinese+english),max(math+chinese+english) from student group by class_id;

 

        查询出班级总分大于1300分的班级ID

            select class_id from student group by class_id having sum(math+chinese+english)>1300;

            select class_id from student where sum(math+chinese+english)>1300 group by class_id ;

        note:where和group区别: 在wehre子句中不能使用分组函数

        

        

 

时间和日期

        mysql> select year (now()), month(now()), day(now()) , date(now());

        +--------------+--------------+------------+-------------+

        | year (now()) | month(now()) | day(now()) | date(now()) |

        +--------------+--------------+------------+-------------+

        | 2014 | 9 | 7 | 2014-09-07 |

        +--------------+--------------+------------+-------------+

      

        select date_add(now(), INTERVAL 2 year) from dual;//增加两年

        select charset(‘name‘) employee;

        select date_add(now(), INTERVAL -1 day) 昨天, now() 今天, date_add(now(), INTERVAL +1 day) 明天;

 

字符串相关函数

    select concat( charset(‘name‘), ‘aaaa‘) 自定义 from dual;

 

约束

表的约束  

    *定义主键约束 primary key:不允许为空,不允许重复

    *定义主键自动增长 auto_increment

    *定义唯一约束 unique

    *定义非空约束 not null

    *定义外键约束 constraint ordersid_FK foreign key(ordersid) references orders(id)

    *删除主键:alter table tablename drop primary key ;

 

    create table myclass

    (

        id INT(11) primary key auto_increment,

        name varchar(20) unique

    );

    

    create table student(

        id INT(11) primary key auto_increment,

        name varchar(20) unique,

        passwd varchar(15) not null,

        classid INT(11), #注意这个地方不要少逗号

        constraint stu_classid_FK foreign key(classid) references myclass(id)

    );

      

 

        +-------+-------+------+------------------------+

 

 

 

连接查询

使用SQL99标准的连接查询(JOIN..ON..)

    内连接

        只返回满足连接条件的数据(两边都有的才显示)。

select e.*, d.*

from emp e

inner join dept d

on e.deptno=d.deptno

        -- 也可以省略inner关键字。

 

    select e.*, d.*

    from emp e inner join dept d

    on e.deptno=d.deptno

        

    左外连接

        左边有值才显示。

select e.empno, e.ename, e.sal, d.dname

from emp e

left outer join dept d

on e.deptno=d.deptno

        -- 也可以省略outer关键字

          

 

     右外连接

        右边边有值才显示。

        select e.*, d.*

        from emp e        

        right outer join dept d

        on e.deptno=d.deptno

        -- 也可以省略outer关键字

      

     满外联接

     mysql 不支持full所以需要left right union

        任一边有值就会显示。

        //select e.*, d.*

        from emp e

        full outer join dept d        

        on e.deptno=d.deptno

        -- 也可以省略outer关键字

mysql> select e.*,d.* from emp e left join dept d on (e.deptno=d.deptno) union select e.*,d.* from emp e right join dept d on (e.deptno=d.deptno)

         交叉连接

        叉集,就是笛卡尔积

        select e.*, d.*

        from emp e

        cross join dept d

        -- 没有连接条件

====================================================

 

eg:查询员工信息,员工号,姓名,月薪,部门名称

    select e.empno, e.ename, e.sal, d.dname

    from emp e, dept d

    where e.deptno=d.deptno

 

    select e.empno, e.ename, e.sal, d.dname

    from emp e inner join dept d -- 逗号join

    on e.deptno=d.deptno -- where on

 

//显示所有部门信息

//显示各个部门的部门人数

    select d.deptno 部门号, d.dname 部门名称,count(e.empno) 人数

    from emp e, dept d

    where e.deptno(+)=d.deptno

    group by d.deptno, d.dname

 

    select d.deptno 部门号, d.dname 部门名称,count(e.empno) 人数

    from emp e right outer join dept d

    on e.deptno=d.deptno

    group by d.deptno, d.dname

 

自连接

-- 查询员工信息 ,老板信息

    显示: ****的老板是****

select e.ename , b.ename

    from emp e, emp b

    where e.mgr=b.empno

 

select concat ( concat(e.ename, ‘的老板是‘), b.ename)

    from emp e, emp b

    where e.mgr=b.empno

 

 

select e.ename, ifnull(b.ename,‘他自己‘)

    from emp e left outer join emp b

    on e.mgr=b.empno

 

 

select concat ( concat(e.ename, ‘的老板是‘), ifnull(b.ename,‘他自己‘))

    from emp e left outer join emp b

    on e.mgr=b.empno

+------------------------------------------------------------------------+

| concat ( concat(e.ename, ‘的老板是‘), ifnull(b.ename,‘他自己‘)) |

+------------------------------------------------------------------------+

| SMITH的老板是FORD |

| ALLEN的老板是BLAKE |

| WARD的老板是BLAKE |

| JONES的老板是KING |

| MARTIN的老板是BLAKE |

| BLAKE的老板是KING |

| CLARK的老板是KING |

| SCOTT的老板是JONES |

| KING的老板是他自己 |

| TURNER的老板是BLAKE |

| ADAMS的老板是SCOTT |

| JAMES的老板是BLAKE |

| FORD的老板是JONES |

| MILLER的老板是CLARK |

+------------------------------------------------------------------------+

 

 

aaaaddd ccccbbbbbb

aaaaddd ccccbbbbbb

aaaaddd ccccbbbbbb

aaaaddd ccccbbbbbb

 

方法:按住alt键以后,鼠标拖动,选中一个矩形区域

      

 

 

 

 

      

 

                

mysql的常用命令

mysql安装完之后,登陆后发现只有两个数据库:mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| test |

+--------------------+

,mysql> use mysql

ERROR 1044 (42000): Access denied for user ‘‘@‘localhost‘ to database ‘mysql‘

 

访问被拒绝,原因就是在删除数据库时(rpm -e mysql*)没有删除干净,需要把/var/lib/mysql的目录全部删除干净,然后再重新安装即可。

 

顺便记一下一些常用的命令:

 

 

连接MYSQL

格式: mysql -h主机地址 -u用户名 -p用户密码

 

1、连接到本机上的MYSQL。

# mysql -u root -p

回车后提示你输密码,注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。

如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

 

2、连接到远程主机上的MYSQL。假设远程主机的IP为:192.168.2.2,用户名为root,密码为123456。则键入以下命令:

# mysql -h192.168.2.2 -uroot -p123456

 

3、退出MYSQL命令:

# exit (回车)

 

修改密码

格式:mysqladmin -u用户名 -p旧密码 password 新密码

 

1、给root加个密码123456。键入以下命令:

# mysqladmin -u root -password 123456

 

2、再将root的密码改为56789。

# mysqladmin -u root -p123456 password 56789

 

增加新用户

格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"

 

1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:

mysql>grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";

mysql>flush privileges; 使之生效

 

2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。

mysql>grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";

mysql>flush privileges; 使之生效

 

如果你不想test2有密码,可以再打一个命令将密码消掉。

mysql>grant select,insert,update,delete on mydb.* to test2@localhost identified by "";

mysql>flush privileges; 使之生效

 

 

 

操作技巧

1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

2、你可以使用光标上下键调出以前的命令。

 

查询、创建、删除、更新命令

 

1、显示当前数据库服务器中的数据库列表:

mysql>show databases;

注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

 

2、显示数据库中的数据表:

mysql>use 库名;

mysql>show tables;

 

3、显示数据表的结构:

mysql>describe 表名;

 

4、建立数据库:

mysql>create database 库名;

 

5、建立数据表:

mysql>use 库名;

mysql>create table 表名 (字段名 varchar(20), 字段名 char(1));

 

6、删除数据库:

mysql>drop database 库名;

 

7、删除数据表:

mysql>drop table 表名;

 

8、将表中记录清空:

mysql>delete from 表名;

 

9、显示表中的记录:

mysql>select * from 表名;

 

10、往表中插入记录:

mysql>insert into 表名 values ("123","b");

 

11、更新表中数据:

mysql>update 表名 set 字段名1=‘a‘,字段名2=‘b‘ where 字段名3=‘c‘;

 

12、用文本方式将数据装入数据表中:

mysql>load data local infile "/root/mysql.txt" into table 表名;

 

13、导入.sql文件命令:

mysql>use 数据库名;

mysql>source /root/mysql.sql;

 

14、命令行修改root密码:

mysql>update mysql.user set password=PASSWORD(‘新密码‘) where user=‘root‘;

mysql>flush privileges;

 

15、显示use的数据库名:

mysql>select database();

 

16、显示当前的user:

mysql>select user();

 

备份数据库

 

1.导出整个数据库,导出文件默认是存在当前操作目录下

# mysqldump -u 用户名 -p 数据库名 > 导出的文件名

# mysqldump -u user_name -p123456 database_name > outfile_name.sql

 

2.导出一个表

# mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

# mysqldump -u user_name -p database_name table_name > outfile_name.sql

 

3.导出一个数据库结构

# mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

 

4.带语言参数导出

# mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql

 

 

 

 

 

 

connect mysql error

查看不到mysql数据库的解决办法:

1.去/var/lib/mysql目录下去查看,发现mysql以及mysql.sock目录都在,还好还好,应该还有希望恢复;

2.停掉mysqld服务——"service mysqld stop"

3.查看mysqld进程是否还在跑——"ps -aux | grep mysqld",如果还有在跑得进程,可以直接杀之"killall -TERM mysqld"

4.安全模式启动mysql;"mysqld_safe --user=mysql --skip-grant-tables --skip-networking &"

5.另起终端,输入"mysql -u root -p",进入mysql数据库

6.show databases;看到mysql库又出现了

7.更改root用户密码:use mysql;update user set password=PASSWORD("new-passwd")where user=‘root‘;

8.FLUSH PRIVILEGES;

 

mysql基本使用

标签:文件   超级用户   内置函数   sel   hda   大小写   建立   集群   ring   

原文地址:https://www.cnblogs.com/XiaoGuanYu/p/8734792.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!