MySQL入门集锦(一)

最近在学习MySQL,看了一个的视频,以下是一点点笔记,希望对大家的学习有帮助。

1、建表语句

create table 表名(

列名1 列类型 列参数,

列名2 列类型 列参数,

....

列名n 列类型 列参数

)engine myisam charset utf8;

如上,除最后一行外,每行以逗号结尾,engine为引擎,charse为编码。

具体例子:

 create table category (

 cat_id smallint unsigned auto_increment primary key,

 cat_name varchar(90) not null default '',

 parent_id smallint unsigned

 )engine myisam charset utf8;

 

2、修改表的语句:

  • 添加列(添加在最后一列)

alter table 表名 add 列名 列类型 列参数;

具体例子:

alter table category add login_date datetime not null default '0000-00-00 00:00:00';

  •  添加列(添加在指定列后面)

alter table 表名 add 列名 列类型 列声明 after 指定列名;

具体列子:

alter table category add login_date datetime not null default '0000-00-00 00:00:00' after cat_name;

  •  添加列(添加在表的第一列)

alter table 表名 add 列名 列类型 列声明 first;

具体列子:

alter table category add login_date datetime not null default '0000-00-00 00:00:00' first;

  •  删除列

alter table 表名 drop 列名;

具体例子:

alter table category drop login_date;

  •  修改列(只修改列类型和列参数)

alter table 表名 modify 列名 新类型 新参数;

具体例子:

alter table category modify parent_id typeint not null default 0;

  •  修改列(可同时修改列名)

alter table 表名 change 旧列名 新列名 新类型 新参数;

具体例子:

alter table category change parent_id father_id typeint not null default 0;

3、查询语句

查询语句有五种句子:

where 条件查询,

group by 分组,

having 筛选,

order by 排序 ,

limit 限制结果条数。 

  • where:直接对表进行操作(最基本操作)。

例如:

select * from category where parent_id = 2;

  • group by:对表进行分组,对where后的结果操作,或直接对表进行操作。

例如:

select * from category group by parent_id;

  • having:对得到的结果集进行再一次查询(即不是直接对原始表操作,一般是生成的结果集中存在新的列)
  • order by:对得到的结果集进行排序
  • limit:限制结果条数,同样数对结果集操作,limit offset num; offset表示偏移量,即跳过几条,num表示结果数目。

以上五种select语句必须严格按照上述顺序才能正常操作。

MySQL入门集锦(一)

4、统计函数,得到的结果就是一个标量值。

max()、min()、avg()、count()、sum()

注意:count()函数知识计算非Null的个数,与参数字段无关。

5、关于null

在我们的建表语句中通常为加上not null default 值;

至于这么做的原因是null是一个空集,无法与其他值进行比较,例如:select * form 表名 where id != null;这样的查询语句是无法查询出结果的,要查询出非空的结果应该用 select * form 表名 where id is not null;这样的语句,使用起来十分费力,所以我们在建表时默认不为null有助于对表的操作。

6、子查询

子查询指的是把一个查询嵌套在另一个查询当中。

  • where型子查询,也可以理解为标量子查询,返回的值是标量。

具体例子::找出商品列表中最新的商品(默认为id最大时商品最新)

select * from goods

where goods_id = (

select max(goods_id) 

from goods

);

  • from型子查询,将子查询视为一张临时表,然后对临时表进行外部查询(需要给临时表一个别名)。

具体例子:取出商品表中每一个栏目下的最新商品。

select * from

(select goods_id, cat_id, goods_name, shop_price

from goods

order by cat_id asc, goods_id desc) as temp

group by cat_id;

  • exist型子查询,是指把外层sql的结果,拿到内层sql去测试,如果内层sql成立,则改行取出。

具体例子:

select * from A 

where exists

(select * from B where B.id = A.id);

未完待续......