MySQL数据库基础

一.启动和关闭MySQL服务器

1.启动MySQL服务器

启动wamp即可

2.链接和断开MySQL服务器

链接:服务器启动后,MySQL提供了MySQL console命令窗口客户端实现与MySQL服务器之间的交互,单击Wamp图标,选择MySQL,单击MySQL console,打开MySQL命令窗口,输入服务器root账户并且按enter键

断开:链接MySQL服务器后,可以通过提示符输入exit或者quit命令并且按enter键来断开MySQL链接。

二.操作MySQL数据库

1.创建数据库

应用create database语句创建数据库,格式如下

create database 数据库名;

命名规则;

1)不能与其他数据库重名

2)名称可以是任意的字母,阿拉伯数字,下划线或者.$组成,可以使用上述的任意字符开头,但不能使用单独的数字,那样会造成它与数值相混淆。

3)名称最长可以为64个字符组成(还包括表、列表和索引的命名),而别名最多可长达256个字符。

4)不能使用MySQL关键字作为数据库、表名。

5)默认情况下,windows下数据库名,表名的字母大小写是不敏感的,而在Linux下数据库名,表名的字母大写写是敏感的,为了便于数据库在平台间进行移植,建议采用小写字母来定义数据库名和表名。

创建数据库时首先链接mysql服务器,然后编写“create database db_user;"SQL语句,数据库创建成功。

创建db_user数据库后,MySQL管理系统会自动在wamp\bin\mysql\mysql版本\data目录下创建db_user数据库文件夹及相关文件实现对该数据库的文件管理。

说明:用户可以通过修改配置选项datadir的值来对数据库文件的存储目录进行重新设置。

2.选择数据库

use语句用于选择一个数据库,使其成为当前默认数据库。语法如下

use 数据库名;

例如要选择名称为db_use的数据库:use db_user;

选择了数据库之后,才可以操作该数据库中的所有对象。

3.查看数据库

数据库创建完成后,可以使用show databases 命令查看MySQL数据库中所有已经存在的数据库,语法如下:

show databases;

4.删除数据库

删除数据库使用的是电容屏database语句,语法如下:

drop database 数据库名;

注意删除数据库的操作应该谨慎使用,一旦执行这项操作,数据库的所有结构和数据都会被删除,没有恢复的可能,除非数据库有备份。

三.MySQL数据类型

在数据库中,每一条数据都有其数据类型,MySQL支持的数据类型主要分成三类;数字类型、字符串(字符)类型、日期、和时间类型。

1.数字类型

整数数据类型

TINYINI        最小整数        一个字节

BIT        最小整数        一个字节

BOOL        最小整数        一个字节

SMALLINT        小型整数        两个字节

MEDIUMINT        中型整数        3个字节

INT        标准整数        4个字节

BIGINT        大整数        8个字节

浮点数据类型

FLOAT        单精度浮点数        8个字节或者4个字节

DOUBLE        双精度浮点数        8个字节

DECIMAL        一般整数        自定义长度

说明:创建表时,使用哪种数字类型应遵循以下原则:

(1)选择最小的可用类型,如果值永远不超过127,则使用TINYINT要比使用INT好。

(2)对于完全都是数字的,可以选择整数类型。

(3)浮点类型用于可能具有小数部分的数,例如,货物单价,网上购物交付金额等。

2.字符串类型

字符串类型可以分为三类:

(1)普通的文本字符串类型,即CHAR和VARCHAR。CHAR列的长度在创建表时指定,VARCHAR列的值是变长的字符串,取值和CHAR一样。

(2)可变类型,即TEXT和BLOB类型,它们的大小可变,TEXT适合存储长文本,而BLOB类型适合存储二进制数据,支持任何数据,如文本,声音和图像等

(3)特殊类型,即SET和ENUM类型。

说明:创建表时,使用字符串类型时应遵循以下原则:

(1)从速度方面考虑,要选择固定的列,可以使用CHAR类型

(2)要节省空间,使用动态的列,可以使用VARCHAR类型

(3)要将列中的内容限制在一种选择,可以使用ENUM类型

(4)允许在一个列中有多于一个的条目,可以使用SET

(5)如果要搜索的内容不区分大小写,可以使用TEXT类型

(6)如果要搜索的内容区分大小写,可以使用BLOB类型

3.日期和时间类型

包括:DATETIME、DATA、TIMESTAMP、TIME和YEAR。其中的每种类型都有其取值范围,比如给一个不合法的值,将会被0取代。

DATE:日期,格式为YYYY-MM-DD

TIME:时间,格式为HH:MM:SS

DATETIME:日期和时间,格式为YYYY-MM-DD HH:MM:SS

TIMESTAMP:时间标签,在处理报告时使用的显示格式取决于M的值

YEAR:年份可指定两位数字和四位数字的格式

四.操作数据表

1.创建数据表

在MySQL数据库中可以使用create table命令创建数据表。语法格式如下

create[TEMPORARY]table[IF NOT EXISTS] 数据表名

[(create_definition,....)][table_options][select_statement]

TEMPORARY:如果使用该关键字,表示创建一个临时表

IF NOT EXISTS:该关键字用于避免表存在时MySQL报告的错误

create_difinition:这是表的列属性部分。MySQL要求在创建表时,表至少包含一列

table_options:表的一些特性参数

select_statement:SELECT语句描述部分,用它可以快速地创建表

create_definition的使用方法,每一列的具体定义格式如下:

col_name type[NOT NULL |NULL][DEFAULT default_value][AUTO_INCREMENT]

[PRIMARY KEY][reference_definition]

colname:字段名

type:字段类型

NOT NULL|NULL:指出该列是否允许为空值,,但是数据0和空格都不是空值,系统一般默认允许为空值,所有当不允许空值时,必须使用NOT NULL

DEFAULT default_value:表示默认值

AUTO_INCREMENT:表示是否为自动编号,每个表只能有一个AUTO_INCREMENT列,并且必须被索引

PRIMARY KEY:表示是否为主键。一个表只能有一个PRIMARY KEY。如表中没有一个PRIMARY KEY,而某些应用程序要求 PRIMARY KEY,MySQL将返回第一个没有任何NULL列的UNIQUE键,作为PRIMARY KEY

reference_definition:为字段添加注释

在实际应用中,使用create table命令创建数据表的时候,只需指定最基本的属性即可,格式如下:

create table_name(列名1 属性,列名2 属性...);

例如,在命令提示符下应用create table命令,在数据库db_user中创建一个名为tb_user的数据表,表中包括id、user、pwd和createtime等字段。

如:在数据库aaa创建一个tb7表,包括id、user、pwd、createtime等字段。

create table tb7(
    id int,
    user varchar(20) not null,
    pwd varchar(10) not null);

MySQL数据库基础_第1张图片

2.查看表结构

成功创建数据表后,可以使用show columns命令或describe命令查看指定数据表的表结构。

(1)show cloumns命令

show[full] columns from 数据表名 [from 数据库名];

show [full] columns FROM 数据库名.数据表名;

(2)describe命令

describe命令的语法格式如下:

describe 数据表名;

其中,describe 命令可以简写为desc。在查看表结构时,也可以只列出某一列的信息,语法格式如下:

describe 数据表名 列名;

3.修改表结构

修改表结构采用alter table 命令。修改表结构指增加或者删除字段,修改字段名称或者字段类型、设置取消主键外键、设置取消索引以及修改表的注释等。

语法格式如下:

alter table 数据表名 表名 修改选项

{ ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名>
| CHARACTER SET <字符集名>
| COLLATE <校对规则名> }

alter table 语句允许指定多个动作,动作间使用逗号分隔,每个动作表示对表的一个修改。

(1)修改表名

AKTER TABLE 旧表名 RENAME 新表名

如把aaa数据库的user表改为user01:

use aaa        //选择数据库aaa

alter table user rename user01;        //把user表改为user01

(2)修改表字符集

ALTER TABLE 表名 CHARACTER SET 字符集名 COLLATE 校对规则名;

如:

use aaa

alter table user01 charset=utf8mb4 collate=utf8mb4_general_ci;

(3)修改字段名称

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

其中:

旧字段名:指修改前的字段名;

新字段名:指修改后的字段名;

新数据类型:指修改后的数据类型,如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样,但数据类型不能为空。

如:在user01表中把phone字段名改成iphone,同时将数据类型变成CHAR(30)

alter table user01 change phone iphone char(30);

(4)修改字段类型

修改字段的数据类型就是把字段的数据类型转换成另一种类型。

ALTER TABLE 表名 MODIFY 字段名 数据类型

表名:指要修改数据类型的字段所在表的名称。

字段名:指需要修改的字符、

数据类型:指修改后指端的新数据类型。

如:把user01表中的iphone类型从char(30)改成int

alter table user01 modify iphone int;

4.删除

(5)删除字段

删除字段是将数据表中某个字段从表中移除,语法格式如下:

ALTER TABLE 表名 DROP 字段名;

如:移除user01表的iphone字段:

alter table user01 drop iphone;

(6)删除数据表

在删除表的同时,表结构和表中所有的数据都会被删除,格式如下:

DROP TABBLE 表名;

如:删除aaa数据库里的user02数据表:

drop table user02;

(7)mysql删除被其它表关联的主表

数据表之间经常存在外键关联的情况,这时如果直接删除父表,会破坏数据表的完整性,也会删除失败。

删除父表的方法:一个是先删除于它关联的子表,再删除父表,但这样会同时删除两个表中的数据。另一个是将关联的外键约束取消,再删除父表,适用于需要保留子表的数据,只删除父表的情况。

先在数据库中创建两个关联表,先创建tb1表

 create table tb1
     (
     id int(11) primary key,
     name varchar(22),
     location varchar(50)
     );

接下来创建tb2表

mysql> create table tb2
     (
     id int(10) primary key,
     name varchar(20),
     deptId int(11),
     salary float,
     constraint fk_tb1_tb2 foreign key (deptId) references tb1(id)
     );

tb2表为子表,具有名称为fk_tb1_tb2的外键约束;tb1为父表,其主键被子表tb2所关联。

主表存在外键约束时,不能被直接删除

然后删除tb2的外键约束,

alter table tb2 drop foreign key fk_tb1_tb2;

语句成功执行后,会取消tb1表和tb2表之间的关联关系。

解除关联关系后,可以使用drop  table 语句直接删除父表tb1:drop table tb1;

最后通过show tables 命令查看数据表列表,可以发现数据库列表已经不存在名称为tb1的表。

5.重命名数据表

rename table 数据表名1 to 数据表名2;

该语句可以对多个数据表进行重命名,多表之间用‘,’相隔

6.添加/创建一个数据表

use aaa        //选择数据库

create table user02(age int)        //创建一个user02表 必须有一列可见项(不能为空表)

7.添加表字段

在末尾添加字段

ALTER TABLE 表名 ADD 新字段名 类型 约束条件;

表名:为数据表的名字

新字段名:为所要添加的字段的名字

数据类型:为所要添加的字段能存储数据的数据类型

约束条件:可选的,用来对添加的字段进行约束。

默认在表的最后位置(最后一列的后面)添加新字段。

如:在user01表中添加一个phone字段 类型为varchar(20)

alter  table user01 add phone varchar(20);

在开头添加字段

MySQL默认在表的最后位置添加新字段,如果希望在开头位置(第一列的前面)添加新字段,那么可以使用first关键字。语法格式如下

alter table 表名 add 新字段名 数据类型 约束条件 frist;

frist 关键字一般放在语句末尾。

如在tb1表,添加一个字段tb3,使tb3在数据库的开头:

alter table tb1 add tb3 int first;

在中间位置添加字段

除了在开头结尾,还允许在中间位置(指定字段后)添加字段,此时需要使用AFTER关键字,语法格式如下:

alter table 表名 add 新字段名 数据类型 约束条件 after 已经存在的字段名;

after:将新字段添加到某个已有字段后面。

如,添加一个tb5字段到tb1的name字段后面:

alter table tb1 add tb5 after name;

8.MySQL查看表结构命令

创建完数据表之后,经常需要查看表结构,可以用describe和show create table命令来查看数据表结构。语法如下:

describe 表名;

或简写为desc 表名

如:

desc tb1 //结果如下

MySQL数据库基础_第2张图片

 Null:表示该列是否可以存储NULL值。

Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分,UNI表示该列是UNIQUE索引的一部分,表示在列中某个给定值允许出现多次。

Default:表示该列是否有默认值,如果有,值是多少。

Extra:表示可以获取的与给定列有关的附加信息,如AUTO_INCREMENT等。

9.如何将sql语句映射为文件操作

(1)查询数据表

在MySQL中无论哪种存储引擎的表都会有一个.fm文件来保存数据表的结构定义,所以,执行show tables语句相当于列出数据库目录中所以.fm文件的基本名,所得到的结果是相同的。

MySQL数据目录的层次结构已经把数据表隐藏在其中。

(2)创建数据表

创建数据表时,需要执行 CREATE TABLE 语句定义数据表的结构。无论是哪一种存储引擎,MySQL 服务器都将创建一个 .frm 文件来保存数据表的结构定义的内部编码。L 服务器还会根据指定数据表的具体类型创建出其他必要的文件。

(3)更新数据表

当执行 ALTER TABLE 语句时,MySQL 服务器将对相对应数据表的 .frm 文件重新进行编码,来表明数据表的结构性变化,还要对有关的数据文件和索引文件的内容进行相应的修改。

(4)删除数据表

DROP TABLE 语句是通过删除该相应数据表的各种有关文件而实现的。

对于某些数据表类型,可以通过在相应的数据库目录里删除与数据表有关的各个文件的办法来手动删除这个数据表。

五.数据表记录的更新操作

(1)数据表记录的添加

建立一个空的数据库和数据表时,首先要想到的就是如何向数据表中添加数据。这项操作可以通过insert命令来实现。语法格式:

insert into 数据表名 (name1,name2,......) values (value1,value2,......);

在MySQL中,一次可以同时插入多行记录,各行记录的值在values关键字后以逗号分隔,在标准SQL语句一次只能插入一行。

说明:值列表中的值应与字段列表中字段的个数和顺序相对应,值列表中的数据类型必须与相应字段的数据类型保持一致。

注意:数据要用 ‘ ’ 包住,null不用。

如;向user01表中插入一条数据信息,(id = 1,name = cxy ,age =18)

user数据表:

MySQL数据库基础_第3张图片

插入数据:insert into user01 values('1','lzh','18');

插入完成后查看数据表,注意使用desc是查看不了的,因为describe命令用于查看特定表的详细设计信息,只能看到上图的数据。

用  select*from user01; 查看数据(没有设置密码的话)

(2)数据表记录的修改

要执行修改操作可以使用update命令,语法格式如下:

update 数据表名 set 列名1= 新值1,列名2 = 新值2,....where condition;

其中set子句指出要修改的列及其给定的值;where子句是可选的,如果给出该子句指定记录中哪行应该被更新,否则,所有的记录都将被更新。

例如,将用户信息表tb_中用户名为mr的管理员密码111改为222,语句如下:

update tb_user set pwd='222' where user='mr';

(3)数据表记录的删除

在数据表中有些数据已经失去意义或者是错误的,这时就需要将它们删除,此时可以使用delete命令的语法格式如下:

delete from 数据表名 where condition;

注意:该语句在执行过程中,如果没有指定where条件,将删除所有的记录;如果指定where条件,将按照指定的条件进行删除。

说明:使用delete命令删除整个表的效率并不高,还可以用truncate(截断)命令,利用它可以快速删除表中所有的内容。 truncate table 表名;

例如.删除用户信息表tb_user中用户名为mr的记录信息,语句如下:

delete from tb_user where user='mr';

六.数据表记录的查询操作

要从数据库中把数据查询除了,就要用到数据查询命令select,select命令是最常用的查询命令,语法格式如下:

select selection_list        //要查询的内容,选哪些列

from table_list        //指定数据表

where primary_constraint        //查询时需要满足的条件,行必须满足的条件

group by grouping_columns        //如何对结果进行分组

order by sorting_cloumns        //如何对结果进行排序

having secondary_constraint        //查询时满足的第二个条件

limit count        //限定输出的查询结果

(1)selection_list

设置查询内容。如果要查询表中所有列,可以将其设置为‘*’;如果要查询表中某一个列或多列,则直接输入列名,并以‘,’为分隔符。

如:select * from user01;        // 查询user01表中的所有列

select id,name from user01;//查询数据表中的id和name列的数据

(2)table_list

指定查询的数据表。即可以从一个数据表中查询,也可以从多个数据表中进行查询,多个数据表之间用‘,’进行分隔,并且通过where子句使用链接运算来确定表之间的联系。

例如从tb1和tb2的数据表中查询bookname=‘PHP’的id编号、书名、作者和价格,代码如下;

select tb1.id,tb1.bookname,

author,price from tb1,tb2

where tb1.bookname = tb2.bookname and

tb2.bookname ='PHP';

在上面的sql语句中,因为两个表都有id字段和bookname字段,为了告诉服务要显示的是哪个表中的信息,要加上前缀。语法如下:

表名.字段名

tb1.bookname = tb2.bookname将表tb1和tb2链接起立,叫作等同链接,如果不使用tb1.bookname = tb2.bookname那么产生的结果将是两个表的笛卡儿积,叫作全链接。

3.where条件语句

在使用查询语句时,如果要从很多记录中查询想要的记录,就要一个查询条件,只有设定了查询条件,查询才有实际意义,设定查询条件应用的是where之句。

where子句功能非常强大,通过它可以实现很多复杂的条件查询。

where子句采用的比较运算符

MySQL数据库基础_第4张图片

 例如应用where子句,查询tb1表,条件是type类为PHP所有的图书,

select * from tb1 where type=‘PHP’;

(4)distinct

该关键字可以去除结果中重复的行

如:去掉表tb1结果类型字段type重复的数据

select distinct type from tb1;

(5)order by

使用该关键字可以对查询结果进行升序和降序(desc)排列,在默认情况下,order by按升序输出结果,如果要降序排列,可以使用desc来实现。

对含有NULL值的列进行排序时,如果是按升序排列,NULL值将出现在最前面,如果是按降序排列,NULL值将出现在最后。

例如:查询tb1表中的所有消息,按id进行降序排列,并且只显示五条记录,其代码如下:

select * from tb1 order by id desc limit5 ;        //降序

(6)like

like属于较常用的比较运算符,通过它可以实现模糊查询。它有两种通配符:%和_。

%:可以匹配一个或多个字符.

_:只能匹配一个字符。

例如,查找所有书名bookname字段包含PHP的图书,代码如下:

select * from tb1 where bookname like(%PHP%);

说明:无论是一个英文字符还是中文字符,在这一点上英文字母和中文没有什么区别。

7.concat()函数

使用concat()函数联合多个字符,构成一个总的字符串。

select concat (bookname,price) as别名 from表名

concat_ws(separator ,str1,str2,...)

例如把:tb1表中的书名bookname和价格price合并到一起,一起构成一个新的字符串。

代码如下

第一个参数是指定分隔符,不能为null。

select id concat(bookname,':'price) as info , type from tb1;

其中,合并后的字段名为concat()函数形成的表达式bookname.price,看上去很复杂,通过as关键字给结合字段取一个别名,看上去就清晰了。

(8)limit

limit还可以对查询结果的记录条数进行限定,控制输出行数。

select * from tb1 order by price asc limit 10;        //限制显示10行

使用limit还可以从查询结果的中间部分取值,首先要定义两个参数,参数1是从开始读取的第一条记录的编号(在查询结果中,第一结果的记录编号是0,而不是1):参数2是要查询记录的个数。

例如,查询tb1表,从第三条记录开始,查询第6条,代码如下:

select * from tb1 limit 2,6;

(9)使用函数和表达式

在MySQL中,还可以使用表达式来计算各列的值,作为输出结果,表达式还可以包含一些函数。例如:计算tb1表中各类图书的总价格,代码如下:

select sum(price) as totalprice,type from tb1 group by type;

MySQL中常用的统计函数

MySQL数据库基础_第5张图片

 除了使用函数之外,还可以使用算数表达式、字符串运算符以及逻辑运算符来构成表达式。

例如,可以计算图书打九折之后的价格,代码如下:

select *,(price * 0.9) as '90%' from tb1;

(10)

通过group by子句可以将数据划分到不同的组中,实现对记录进行分组查询,所查询的列必须包含在分组的列中,目的是使查询到的数据没有矛盾,在与avg()函数或sum()函数一起使用时,group by子句能发挥最大作用。

例如,查询tb1表,按type进行分组,求每类图书的平均价格,代码如下:

select ave(price,type from) tb1 group by type;

(1)使用having子句设定第二个查询条件

having 子句通常和group by子句一起使用,对数据结果进行分组查询和统计之后,还可以使用having子句来对查询结果进行进一步的筛选,having和where子句都用于指定查询条件,不同的是where子句在分组查询之前使用,havingg在分组之后使用,而且having子句还可以包含统计函数。

例如;计算tb1表中各类图书的平均价格,筛选出图书平均价格大于60的记录,代码如下:

select avg(price),type from tb1 group by type having avg(price)>60;

你可能感兴趣的:(PHP,MySQL数据库,mysql,数据库,服务器,php)