基础学习:Mysql数据库安全、表创建和常见基础语句学习

(一)安装

搜索:mysql-5.6.17-winx64.zip 下载安装

类型MySQL,5.6绿色版

安装参考这个博客:mysql5.6.16绿色版配置、运行 - zhuxw技术博客 - 博客频道 - CSDN.NET

注意:

①不要删除已有的内容。

②需要修改路径,路径使用自己解压缩后(文件)的路径

③如果是修改路径的话,请删除原本.ini文件路径之前的 #

④命令用mysqld --install mysql --defaults-file="D:\Tool\mysql-5.6.16-win32\my.ini"

即——不要空格,不要用中文的双引号

(二)启动

我是直接启动:D:\python\MySQL Server5.6\bin\mysql.exe

就可以的(进入了正常使用的页面)。

D:\python\MySQL Server 5.6是我的数据库安装目录。

以下是我的启动页面。如果无法正常启动的话,请评论说明,我再重新研究一下。

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 5

Server version: 5.6.17 MySQL Community Server (GPL)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

(三)显示数据库

我启动时自动进入页面,当时页面为:

mysql>

在这个后面输入命令,以分号为结尾

输入

show databases;

显示:

mysql> show databases;

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

| Database |

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

| information_schema |

| test |

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

2 rows in set (0.00 sec)

(四)进入某个数据库

以上面的为例,进入test的命令为:

use test;

显示:

mysql> use test;

Database changed

(五)显示该数据库内的表

输入:

show tables;

显示:

mysql> show tables;

Empty set (0.00 sec)

原因是是一个新数据库,所以里面没有表。

(六)创建一个表

输入:(可以多行输入,只要连续,且中间不写分号就行)

create table sales_rep(

employee_number int,

surname varchar(40),

first_name varchar(30),

commission tinyint);

显示:(这里没换行)

mysql> create table sales_rep(

-> employee_number int,

-> surname varchar(40),

-> first_name varchar(30),

-> commission tinyint);

Query OK, 0 rows affected (0.23 sec)

效果:

创建一个标明为users的表,

第一项:employee_number,类型为int

第二项:surname,类型为varchar(40)

第三项:first_name,类型为varchar(30)

第四项:comisision,类型为tinyint

(七)检查表结构

输入:

describe sales_rep;

显示:

mysql> describe sales_rep;

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

| Field | Type | Null | Key |Default | Extra |

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

| employee_number | int(11) | YES | | NULL | |

| surname | varchar(40) | YES | | NULL | |

| first_name | varchar(30) | YES | | NULL | |

| commission | tinyint(4) | YES | | NULL | |

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

4 rows in set (0.00 sec)

(八)类型说明

int范围-2 147 483 648 到 2 147 483 647(包括负号所以11个字符)

varchar(40)表示可变长字符,40表示字符串的最大长度是40

tinvint表示小整数范围是-128~127之间(所以是4个字符)。

(九)更改表内某一项的名字和类型

如上面所见:第一项实际应该是employes_num,我错写为了employee_number

可以通过命令修改,使其名字变更为正确的名字。

原型:

>alter table 表名称 change字段原名称字段新名称字段类型 [是否允许非空];

输入:

alter table sales_rep change employee_numberemployes_number int;

显示:

mysql> alter table sales_rep change employee_number employes_numberint

-> ;

Query OK, 0 rows affected (0.13 sec)

Records: 0 Duplicates: 0 Warnings: 0

这时再查询表结构describesales_rep;,则正确了(结果略)

(十)向表单内插入

注:这个不能用中文(可能是没设置),varchar的值可以用双引号

方法一:(按自定义顺序插入)

输入:

insert intosales_rep(employes_number, surname, first_name, commission) values(3,'Jop','Peter',12);

显示:

mysql> insert into sales_rep(employes_number, surname, first_name,commission)

values(3,'Jop','Peter',12);

Query OK, 1 row affected (0.04 sec)

效果:

插入一个值,前面4个参数分别对应values后面的4个值。后面值的对应是参数的类型。

方法二:(按默认顺序插入)

输入:

insert intosales_rep values(4,"dong", "wang", 20);

显示:

mysql> insert into sales_rep values(4,"dong","wang", 20);

Query OK, 1 row affected (0.03 sec)

效果:插入一个值,值的顺序是默认的(按照之前表的预设)

方法三:(一次插入多个)

输入:

insert intosales_rep values(5,"aaa","AAA",1),

(6,"bbb","BB",2),

(7,"ccc","CC",3);

显示:

mysql> insert into sales_repvalues(5,"aaa","AAA",1),

->(6,"bbb","BB",2),

->(7,"ccc","CC",3);

Query OK, 3 rows affected (0.15 sec)

Records: 3 Duplicates: 0 Warnings: 0

效果:按默认顺序插入3个值。

方法四:(用load data读取文本插入大量数据)

输入:

load datalocal infile "eee.txt" into table sales_rep;

显示:

mysql> load data local infile "eee.txt" into tablesales_rep;

Query OK, 4 rows affected, 4 warnings (0.04 sec)

Records: 4 Deleted: 0 Skipped: 0 Warnings: 4

效果:

将eee.txt文件内的3项读取进去

问题:

为什么会有4个warnings?并没有读取失败啊?

问题注:后面可能是因为这个读取问题,加入了一些值为null的项,不过也可能是因为另外一次我读取的问题

注:显示(十一),删除(二十一),修改(二十二)

(十一)使用select显示

输入:

select * fromsales_rep where commission>1;

显示:

mysql>select * from sales_rep where commission>1;

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

|employes_number | surname | first_name | commission |

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

| 1 | Rive | Sol | 10 |

| 2 | John | char | 11 |

| 3 | Jop | Peter | 12 |

| 4 | dong | wang | 20 |

| 6 | bbb | BB | 2 |

| 7 | ccc | CC | 3 |

| 8 | ddd | DDD | 4 |

| 9 | ee | EEEE | 5 |

| 10 | ff | FFF | 6 |

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

9rows in set (0.00 sec)

解释:

①select:表示使用select语句

②*:表示通配符(显示所有的)。可以用某一项替换,如surname,则只显示surname这一项;

③from sales_rep:指从表名为sales_rep的这一张表读取内容;

④where commission>1:指的是,读取表内commission这一个属性大于1的所有项;

也可以改为:where first_name='cc' :那么就只显示first_name的值是cc的项了(注意需要加引号)(并且不区分大小写,注意,mysql几乎是不区分大小写的)

⑤;:以分号为结尾。

(十二)where从句

基于(十一)

输入:

select * fromsales_rep where first_name!='cc' or first_name="cc";

显示:

mysql>select * from sales_rep where first_name!='cc' or first_name="cc";

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

|employes_number | surname | first_name | commission |

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

| 1 | Rive | Sol | 10 |

| 2 | John | char | 11 |

| 3 | Jop | Peter | 12 |

| 4 | dong | wang | 20 |

| 5 | aaa | AAA | 1 |

| 6 | bbb | BB | 2 |

| 7 | ccc | CC | 3 |

| 8 | ddd | DDD | 4 |

| 9 | ee | EEEE | 5 |

| 10 | ff | FFF | 6 |

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

10rows in set (0.00 sec)

解释:

①or:前后各有一条语句first_name!='cc'first_name="cc"

②or的效果是两条语句只要有一条成立,便符合条件。由于一个内容要么是cc,要么不是cc(必然的),所以每一项都会成立(因此相当于显示除了null的)。

③and:也可以用and来连接,表示两条语句都符合的才行。(有一条不符合就不成立)。

④多个or和and联用:支持联用。

or的联用:mysql> select * fromsales_rep wherefirst_name='bb'orfirst_name="cc"orfirst_name="aaa"; 三者符合一个的就可以。

and联用:由此可推,可以多个and联用。

也可以or和and混合使用,但为了避免理解出错,请使用括号来区分层级。

(十三)通配符%

%是一个通配符,类似*,表示0个或者多个字符。

输入:

select * fromsales_rep where first_name like "%c%";

显示:

mysql>select * from sales_rep where first_name like "%c%";

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

|employes_number | surname | first_name | commission |

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

| 2 | John | char | 11 |

| 7 | ccc | CC | 3 |

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

2rows in set (0.00 sec)

效果:

first_name属性里有c字母的项,全部都是符合条件的。

(十四)分类

排序:(正序)

输入:

select * fromsales_rep order by first_name;

显示:

mysql>select * from sales_rep order by first_name;

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

|employes_number | surname | first_name | commission |

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

| 0 | NULL | NULL | NULL |

| 8 | NULL | NULL | NULL |

| 5 | aaa | AAA | 1 |

| 6 | bbb | BB | 2 |

| 7 | ccc | CC | 3 |

| 2 | John | char | 11 |

| 8 | ddd | DDD | 4 |

| 9 | ee | EEEE | 5 |

| 10 | ff | FFF | 6 |

| 3 | Jop | Peter | 12 |

| 1 | Rive | Sol | 10 |

| 4 | dong | wang | 20 |

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

15rows in set (0.00 sec)

效果:

在first_name项,以字母顺序进行排序(会显示null项);

排序:(多重排序)

输入:

select * fromsales_rep order by surname,first_name;

显示:

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

|employes_number | surname | first_name | commission |

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

| 0 | NULL | NULL | NULL |

| 8 | NULL | NULL | NULL |

| 5 | aaa | AAA | 1 |

| 5 | bbb | AAA | 5 |

| 6 | bbb | BB | 2 |

| 7 | ccc | CC | 3 |

| 8 | ddd | DDD | 4 |

| 4 | dong | wang | 20 |

| 9 | ee | EEEE | 5 |

| 10 | ff | FFF | 6 |

| 2 | John | char | 11 |

| 3 | Jop | Peter | 12 |

| 1 | Rive | Sol | 10 |

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

16 rows in set (0.00 sec)

效果说明:

①多了一个surname作为参数。效果是,先以第一个参数所在的项为顺序进行排序显示,假如第一个一样,以第二个参数进行排序;

②由此类推,可以有更多项。

排序:(倒序)

输入:

select * fromsales_rep order by first_name desc;

显示:

mysql>select * from sales_rep order by first_name desc;

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

|employes_number | surname | first_name | commission |

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

| 4 | dong | wang | 20 |

| 1 | Rive | Sol | 10 |

| 3 | Jop | Peter | 12 |

| 10 | ff | FFF | 6 |

| 9 | ee | EEEE | 5 |

| 8 | ddd | DDD | 4 |

| 2 | John | char | 11 |

| 7 | ccc | CC | 3 |

| 6 | bbb | BB | 2 |

| 5 | bbb | AAA | 5 |

| 5 | aaa | AAA | 1 |

| 0 | NULL | NULL | NULL |

| 8 | NULL | NULL | NULL |

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

16rows in set (0.00 sec)

区别:

在正序的命令后面加一个desc即可。

排序:(正序关键字)

假如需要第一个参数按正序,相同的情况下,第二个参数按反序进行排列。

输入:

select * fromsales_rep order by surname asc, employes_number desc;

显示:

mysql>select * from sales_rep order by surname asc, employes_number desc;

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

|employes_number | surname | first_name | commission |

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

| 10 | NULL | NULL | NULL |

| 9 | NULL | NULL | NULL |

| 8 | NULL | NULL | NULL |

| 0 | NULL | NULL | NULL |

| 0 | NULL | NULL | NULL |

| 5 | aaa | AAA | 1 |

| 6 | bbb | BB | 2 |

| 5 | bbb | AAA | 5 |

| 7 | ccc | CC | 3 |

| 8 | ddd | DDD | 4 |

| 4 | dong | wang | 20 |

| 9 | ee | EEEE | 5 |

| 10 | ff | FFF | 6 |

| 2 | John | char | 11 |

| 3 | Jop | Peter | 12 |

| 1 | Rive | Sol | 10 |

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

16rows in set (0.00 sec)

(十五)限制返回的项数LIMIT

输出行数限制:

输入:(在排序:(正序关键字)基础上修改)

select * from sales_rep order by surname asc, employes_number desclimit 1;

显示:

mysql>select * from sales_rep order by surname asc, employes_number desc limit

1;

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

|employes_number | surname | first_name | commission |

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

| 10 | NULL | NULL | NULL |

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

1row in set (0.00 sec)

解释:

①limit可以设置为0(虽然不显示内容,但是可以用于在大的数据库中进行测试查询);

②limit后面的数字决定了返回的行数;

输出行数限制+偏移限制:

输入:

select * fromsales_rep order by surname asc, employes_number desc limit 1,2;

显示:

mysql>select * from sales_rep order by surname asc, employes_number desc limit

1,2;

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

|employes_number | surname | first_name | commission |

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

| 9 | NULL | NULL | NULL |

| 8 | NULL | NULL | NULL |

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

2rows in set (0.00 sec)

解释:

①参数1表示从开始偏移几行(即从理论应该显示的结果的第几行开始显示);

②参数2表示显示几行。

③1,2表示从第2行(偏移1)开始显示,显示2行

(十六)返回最大值MAX()

输入:

selectmax(commission) from sales_rep;

显示:

mysql>select max(commission) from sales_rep;

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

|max(commission) |

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

| 20 |

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

1row in set (0.00 sec)

效果:

返回commission这一项中最大的值。(对字母也有效)

(十七)防止显示重复记录distinct

输入:

selectdistinct first_name from sales_rep;

显示:

mysql>select distinct first_name from sales_rep;

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

|first_name |

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

|Sol |

|char |

|Peter |

|wang |

|AAA |

|BB |

|CC |

|NULL |

|DDD |

|EEEE |

|FFF |

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

11rows in set (0.00 sec)

效果:

①原本都个NULL,这里只显示一个了;

②原本2个AAA,这里只显示一个了;

(十八)计数count()

显示有效数据的行数(不显示null):

输入:

selectcount(first_name) from sales_rep;

显示:

mysql>select count(first_name) from sales_rep;

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

|count(first_name) |

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

| 11 |

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

1row in set (0.00 sec)

效果:

①除了null都显示;

显示所有数据的行数(貌似除非都是null,否则就显示):

输入:

selectcount(*) from sales_rep;

显示:

mysql>select count(*) from sales_rep;

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

|count(*) |

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

| 16 |

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

1row in set (0.00 sec)

效果:

①即使有一项是null(其他项不是),也被计算在内;

显示行数:(重复项算一项,使用distinct)

输入:

selectcount(distinct first_name) from sales_rep;

显示:

mysql>select count(distinct first_name) from sales_rep;

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

|count(distinct first_name) |

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

| 10 |

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

1row in set (0.00 sec)

效果:

①该项(first_name)中如果有重复的,记作一项。

(十九)平均、最小、总和

平均:avg()

最小:min()

总和:sum()

输入:

selectsum(commission) from sales_rep;

显示:

mysql>select sum(commission) from sales_rep;

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

|sum(commission) |

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

| 79 |

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

1row in set (0.00 sec)

效果:

①三个方法类似,结果不同;

②对字符串无效

(二十)对计算结果修改(不影响原数据)

输入:

selectemployes_number ,surname, commission+100 from sales_rep;

显示:

mysql>select employes_number ,surname, commission+100 from sales_rep;

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

|employes_number | surname | commission+100 |

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

| 1 | Rive | 110 |

| 2 | John | 111 |

| 3 | Jop | 112 |

| 4 | dong | 120 |

| 5 | aaa | 101 |

| 6 | bbb | 102 |

| 7 | ccc | 103 |

| 8 | NULL | NULL |

| 9 | NULL | NULL |

| 10 | NULL | NULL |

| 0 | NULL | NULL |

| 8 | ddd | 104 |

| 9 | ee | 105 |

| 10 | ff | 106 |

| 0 | NULL | NULL |

| 5 | bbb | 105 |

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

16rows in set (0.00 sec)

效果:

①指定项显示结果 + 100,(commission+100);

②显示选择的项(employes_number ,surname,commission);

③不影响原数据;

(二十一)删除记录

输入:

delete fromsales_rep where surname="aaa";

显示:

mysql> delete from sales_rep where surname="aaa";

Query OK, 1 row affected (0.06 sec)

效果:

①删除值为null的项:delete fromsales_rep where surnameis null;

②删除记录将删除所有符合要求的(所以尽量使用唯一项,例如类似id的东西);

③假如输入delete from sales_rep将删除所有项

(二十二)修改记录

输入:

updatesales_rep set commission = 20 where employes_number=1;

显示:

mysql> update sales_rep set commission = 20 where employes_number=1;

Query OK, 1 row affected (0.06 sec)

Rows matched: 1 Changed: 1 Warnings: 0

效果:

① employes_number的值是1的项,其commission的值被更改为20。

更多相关内容推荐:

Mysql常用命令行大全

你可能感兴趣的:(基础学习:Mysql数据库安全、表创建和常见基础语句学习)