[关闭]
@Belinda 2015-05-15T02:27:54.000000Z 字数 6982 阅读 1604

mysql(一) 笔记

学习笔记


简介

MySQL 是一个真正的多用户、多线程SQL 数据库服务器。SQL (结构化查询语言) 是世界上最流行的和标准化的数据库语言。

MySQL 是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld 和很多不同的客户程序和库组成。MySQL在windows上不区分大小写,Linux上表名区分大小写

MySQL主要目标是快速、健壮和易用

MySQL 具有运行速度很快、容易使用、支持查询语言、多个用户可同时连接客户机和服务器、可以运行在各种版本的UNIX以及非UNIX的系统上等优点。

编者认为 如果你在寻找一种免费的或者不昂贵的,性能优越,速度很好的数据库管理系统,那么MySQL将是首选!

创建数据库

我们先创建一个属于自己的数据库,如下:

    create database test;

创建数据库表

创建了数据库,接下来我们创建一个表,我们的数据操作都是针对表来的,例如:

    create table test01_01(
    name nvarchar(40),
    age int(5));

添加数据

既然已经了解了MySQL的基本信息,那么我们赶紧来上手练练吧

我们先做一些简单的实例,体验一下MySQL,我们先添加一条数据到数据库表中, 至于添加数据的语法,我们后面会讲到,不要着急。先看例子,写代码锻炼一下。

    insert into m_table values('wangwu','21','北京');

查询数据

上一节我们添加了一条数据,那么接下来就要查看这条数据了

这里我们只做最简单的查询数据,以后会深入讲解各种查询语句,今天我们讲的只是基础

好了,让我们看下面的这个例子

    select * from m_table;

修改数据

现在我们可以添加和查询数据了,那么接下来我们要修改数据了

修改我们上次添加的那条数据,这里的修改只是修改数据的内容

看下面的这个例子

    update m_table set name= 'zhangsan',age=10 where name='wangwu';

删除数据

现在为止,我们进行了表中数据的添加,查询,修改操作,那么接下来,我们不需要这条数据了,就可以删除这条数据了。

删除数据也很简单,我们来对之前的数据进行删除吧

观察下面的实例,动手写代码,自己体验一下吧

    delete from m_table where name= 'zhangsan'; 

创建数据库

创建一个属于自己的数据库,看下面的语法

    create database [if not exists] db_name;

前面一部分是固定关键字,db_name是你要创建的数据库的名字,例如:

    create database test04;

这样我们就创建了属于自己的数据库,如果数据库已经存在,使用if not exists可以避免创建已经存在的数据库的错误,很简单吧。

显示数据库

假如你不知道服务器主机上有多少数据库存在,可以用show databases语法来显示服务器主机上的数据库,从而找到你想要的那个数据库。

我们看下它的语法

    show databases [like wild];

显示全部数据库

    show databases;

但是有时候你知道数据库名字部分名称,这个时候我们可以用like关键字来显示,例如:

    show databases like 'te%';

上述实例我们只记得te开头的数据库,如果关键字在中间呢,我们使用'%st%'形式来查找; 如果关键字在最后,我们使用'%st01'来查找。

选用数据库

当前服务器有很多数据库,我们怎样才能使用我们需要的那个呢。看下面

    use db_name;

use是固定关键字,db_name是你要使用的那个数据库的名称,这样我们就把db_name这个数据库变成正在使用的数据库了。也就是说,当你使用上述命令选用数据库之后,之后的任何数据库操作,都是针对你选用的数据库的。例如:

    use test04;

删除数据库

我们已经学会创建,查看和选用数据库,那么如果我们不需要这个数据库了,该怎么办呢,置之不理是不好的,数据库是会占据空间的。所以当我们完全不用的时候,最好删除掉。

我们看下删除数据库的语法

    drop database [if exists] db_name;

此命令会删除当前数据库和当前数据库中的所有数据表,所以务必确认该数据库是否完全不用!在MySQL 3.22或以后版本中,你可以使用关键词 if exists 阻止一个错误的发生, 如果数据库不存在,例如:

    drop database if exists test04;

如果数据库存在则删除,不存在也不会报错。

create创建数据库表

创建数据库表太常用了,只要用到数据库,我们就会用到创建数据库表,我们用create 语句来创建,看下面语法:

create table tbl_name(create_definition,...) [type =table_type] 
create_definition:col_name type [not null | null][default default_value]
[auto_increment][primary_key] 

create table是固定的关键字,后面紧跟要创建的表的名称,括号里面是字段的内容,内容可选有:是否为空,是否有默认值,是否为主键,是否自增长等等,例如:

    create table test01_02(id varchar(50) not null auto_increment primary key,
    name nvarchar(40) null default "002",
    age int(5)null default 444);

select创建数据库表

创建数据库表有多种方式,上面讲了一种,我们再看另外一种常用的,用select 语句来创建,看下面语法:

    create table tb_new_name select * from tb_old_name;

上述语句表示,从后者的表中复制一份,添加到新的数据库表中,前面是新的数据库表,之前是不存在的。例如:

    create table test01_03 select * from test01_01;

显示数据库表信息

有时候我们需要查看某个数据库表的相关信息,比如结构,列名等等;那么我们就需要用到show/describe 语句来查看,看下面语法:

    show tables [from db_name] [like wild] 
    show columns from tbl_name [from db_name] [like wild] 
    show index from tbl_name [from db_name] 
    show table status [from db_name] [like  wild] 
    {describe| desc} tbl_name {col_name | wild} 

第一种语法表示:查看某个数据库下的所有数据库表,或者根据like模糊查看某个数据库表;例如

    show tables from  test01;
    show tables from  test01 like "%a%"; 

第二种语法表示:查看某个数据库表中的列属性,like后面跟的是列的名称的某个关键字;例如

    show columns from test01_01;
    show columns from test01_01 from test01 like "%n%";

第三种语法表示:查看某个数据库表中的索引;例如

    show index from test01_01 from test01;

第四种语法表示:查看数据库中全部表或者某个表的状态信息,信息提供的更多;例如

    show table status from test01;
    show table status from test01 like "%t%";

第五种语法表示:查看数据库表的信息,是show的另外一种方式;例如

    desc test01_01;
    describe test01_01 "%n%";

alter修改表结构

有时你可能需要改变一下现有表的结构,那么alter table语句将是你的合适选择。

增加列

    alter table tbl_name add col_name type

例如增加一个weight列:

    alter table test01_01 add weight int;

修改列

    alter table test01_01 modify weight varchar(50);

删除列

    alter table test01_01 drop weight;

另外一种常用方式,例如:

给列更名

    alter table test01_01 change weight wei int;

给表更名

    alter table test01_01 rename test01_04; 

drop删除数据库表

drop table删除一个或多个数据库表。所有表中的数据和表定义均被删除,故小心 使用这个命令! 在MySQL 3.22或以后版本,你可以使用关键词 if exists 类避免不存在表的一个错 误发生。语法如下:

    drop table [if exists] tbl_name [, tbl_name,...] 

例如删除test01_04这个表,要删除多个表,在后面用逗号隔开即可。例句:

    drop table if exists test01_04; 

insert添加数据

前面我们学习了数据库,数据库表,接下来我们学习一下操作表中的数据。

让我们开始利用 insert 语句来增加记录,这是一个 SQL 语句,需要为它指定希望插入数据行的表或将值按行放入的表。如果你设置了主键并且自动增长,添加的时候需要把对应的主键值设置为null或者数字“0”。

基本语法:

    insert [into] tbl_name [(col_name,...)] VALUES (pression,...)
    insert [into] tbl_name SET col_name=expression

“into”一词自 MySQL 3.22.5 以来是可选的。(这一点对其他形式的insert 语句也成立。)values表必须包含表中每列的值,并且按表中列的存放次序给出。(一般, 这就是创建表时列的定义次序。如果不能肯定的话,可使用describe tbl_name来查看这个次序。)。 看一下实例:

可指定所有列的值:

    insert test01_01 values(null,'jack','23','beij');

使用多个值表,可以一次提供多行数据:

    insert test01_01 values('jack','23','beij'),('grey','34','ah');

可以给出要赋值的那个列,然后再列出值。这对于希望建立只有几个列需要初始设置 的记录是很有用的:

    insert test01_01(name) values('gery');
    insert test01_01(name) values('mack'),('rose');
    insert test01_01 set name='sara';//使用这种形式的 insert 语句不能插入多行

insert...select添加数据

当我们在上一节学习创建表时,知道可以使用select从其它表来直接创建表,甚至可以同时复制数据记录。如果你已经拥有了一个表,你同样可以从select语句的配合中获益。

基本语法:

    insert into tb_name select * from tb_name1;//表结构完全一致
    insert into tb_name(col1) select col1 from tb_name1;//取某个值添加

insert into ... select语句满足下列条件:

1:查询不能包含一个order by子句

2:insert语句的目的表不能出现在select查询部分的from子句,因为这在ANSI SQL中被禁止让从你正在插入的表中select.问题是select将可能发 现在同一个运行期间内先前被插入的记录。当使用子选择子句时,情况能很容易混淆

看下面实例:

    insert into test01_03 select * from test01_01;
    insert into test01_03(name) select name from test01_01;

select查询

除非最终检索它们并利用它们来做点事情,否则将记录放入数据库没什么好处。这就 是select语句的用途,即帮助取出数据。select大概是SQL语言中最常用的语句,而且怎样使用它也最为讲究;用它来选择记录可能相当复杂,可能会涉及许多表中列之间 的比较。本节介绍select语句关于查询的最基本功能。 select语句的语法如下:

    select selection_list  //选择哪些列 
    from table_list  //从何处选择行 
    where primary_constraint  //行必须满足什么条件 
    group by grouping_columns // 怎样对结果分组 
    having secondary_constraint  //行必须满足的第二条件 
    order by sorting_columns //怎样对结果排序 
    limit count  //结果限定

注意:所有使用的关键词必须精确地以上面的顺序给出。例如,一个having子句必 须跟在group by子句之后和order by子句之前

上述语法中除了select关键字之外,其他每样东西都是可选的。有些数据库需要用from关键字,但是MySQL允许对表达式求值而不引用任何表

普通查询

select最简单的形式是从一张表中检索每样东西

基本语法:

    select columns from tb_name;

columns是列名称,可以写成*号,表示查询所有列;也可以指定某个列。tb_name是你的目标数据库表。

看两个例子:

    select * from test01_01;//查询当前表里所有的列的数据
    select name,age from test01_01;//查询当前表里name列和age列的所有数据
    select (2+3*4.5)/2.5;//表达式求值而不引用任何表

条件查询

不必每次查询都返回所有的行记录,你能从你的表中只选择特定的行。你可以使用where或者having,这里我们只讲where语句,因为where能实现having绝大部分功能

基本语法:

    select columns from tb_name where expression..;

expression的表现形式很多,例如name='jack',age>=20,name='jack' or name ='tom'等等,都可以写在where表达式后面。

看一个例子:

    select * from test01_01 where name ="tom";//筛选出当前表中name的值是tom的所有数据#

查询排序

使用order by子句对查询返回的结果按一列或多列排序。order by子句的语法 格式为:

    order by column_name [asc|desc] [,…] 

其中asc表示升序,为默认值,desc为降序。order by不能按text、text和image数据类型进行排序。另外,可以根据表达式进行排序

看下面实例:

    select * from test01_01 order by age asc;//按照年龄升序输出

注意desc/asc关键词仅适用于紧跟在它之前的列名字

分组和行计数

group by从句根据所给的列名返回分组的查询结果,可用于查询具有相同值的列

基本语法:

    group by col_name,….

单独使用group by没有任何意义,它的真正作用在于与各种组合函数配合,用于行计数

看下面实例:

    select name,count(*) from test01_01 group by name;//按name分组,并且统计数量

如果你除了计数还返回一个列的值,那么必须使用group by语句,否则无法计算记录,产生错误。

多表查询

查询多个表,from子句列出表名,并用逗号分隔,因为查询需要从他们两个拉出信息

基本语法:

    select t1.name,t2.name from tb_name1 as t1,tb_name2 as t2 where t1.name=t2.name;

上述代码表示,从t1和t2中取出两张表name相同的值。as表示为这个表取别名。

实例如下:

    select t1.name as t1name,t1.age as t1age,t2.name as t2name,t2.age as t2age
     from test01_01 as t1,test01_03 as t2 where t1.name=t2.name;

选用test01数据库,查询出test01_01表中与test01_02表中地址相同的数据

update更新数据

修改数据我们用update更新,这是最常用的更新数据语句,我们看下语法

    update tbl_name SET 要更改的列 
    where 要更新的记录

这里的 where 子句是可选的,因此如果不指定的话,表中的每个记录都被更新。

实例如下:

    update test01_03 set name='tom' where age= '20';

delete删除数据

删除一条语句,我们常用delete关键字。语法定义:

    delete from tbl_name where 要删除的记录 

where子句指定哪些记录应该删除。它是可选的,但是如果不选的话,将会删除所有的记录。这意味着最简单的delete语句也是最危险的

实例如下:

    delete from test01_01 where age=10;//删除年龄为10的数据#
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注