第三种语法表示:查看某个数据库表中的索引;例如
- show index from yang_tableTwo from yang;
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最简单的形式是从一张表中检索每样东西
基本语法:
- select columns from tb_name;
columns是列名称,可以写成*号,表示查询所有列;也可以指定某个列。tb_name是你的目标数据库表。
看两个例子:
- select <em> from test01_01;//查询当前表里所有的列的数据
- select name,age from test01_01;//查询当前表里name列和age列的所有数据
- select (2+3</em>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;
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的数据
te table yang1_three (id int not null auto_increment primary key,weigh