天天看点

mysql总结3→单表查询1

CRUD :增删改查。create(增加)、retrieve(查询)、update(更新)、delete(删除) 

1.插入一行:比如对t_user表插入一行数据,我们可以这样写:

insert into t_user(username,password,age,address) values('tom','123',12,'北京');

注意事项:

<1>.MySQL中的字符串必须以”单引号“修饰。

<2>.每次必须插入一行数据,不能插入半行或者某几列数据。

<3>.每个数据值的数据类型、精度和小数位数必须与相应的列匹配。

<4>.如果在设计表时指定某列为not null,那么该列必须插入值!!

<5>.对于缺省的列,可以使用关键字default来插入缺省值。

比如:我们不想修改t_user表中的地址默认值(河南),我们可以这样写。

insert into t_user(username,password,age,address) values('tom','123',12,default);

<6>.可以对添加值都加单引号,这样就不用考虑数据类型了!!,如下面:就不用考虑年龄是int型的数据了

insert into t_user(username,password,age,address) values('tom','123','12','北京');

2.插入多行数据:如对t_user表插入多行数据(注意:每条数据之间是用”逗号“分开的!!)

insert into t_user(username,password,age,address)

values('alex','123',24,default),

 ('jack','123','45','America'),

 ('张三','12','2',default);

3.数据的更新:update

<1>.对整列数据更新:

update t_user set 'password'='123456' ,age='123';

<2>更新某行:比如修改id=1的记录。

update t_user set 'password'='123',age=123 where id=1;

<3>更新某几行:(有以下几种写法:)

(1.) update t_user set 'password'='123456',age=21 where id=5 or id=6 or id=7;

(2.) update t_user set 'password'='123456',age=21 where id in(5,6,7); (此方法速度较快!!)

(3.) update t_user set 'password'='123456',age=21 where id between 5 and 7; 

(4.) update t_user set 'password'='123456',age=21 where id>=5 and id<=7;

4.where子句操作符:

《1》逻辑运算符:

= : 等于;                        <> : 不等于 ; (或者是 != )

< : 小于;                         > : 大于;

<= : 小于等于;              >= : 大于等于;

between : 在指定的两个值之间。

《2》关系运算符: and : 与;                or : 或;              not : 非;

5.数据的删除:

delete from t_user where id=1;  (注意事项:如果不跟where条件会清空数据库,这是非常危险的!!)

说明:

<1>.如果某条数据有外键引用,则不能删除。若要删除则需要删除外键引用的行,再删掉原行!

6.删除表中的所有的记录:

<1>.truncate table  表名;(不能包含where子句,运行速度比下面的快!!!)

<2>.delete from 表名;

7.数据库的查询:

<1>.查询表中的所有的记录:

select * from t_user; (说明:实际用时不允许写*的,而是把所有的列名写出来;原因:写*降低性能!!)

[select id,username,password,age,address from t_user;]

<2>.获得刚插入行的id:

select last_insert_id();

<3>.去除重复行:如去除password中重复的行:

select distinct password from t_user;  (注意distinct后面只能跟一个列!!写多列,则不能去除重复的行!!)

我们可以看下mysql的正则:

<a href="http://www.yiibai.com/mysql/mysql_regexps.html#mysql_regexps" target="_blank">http://www.yiibai.com/mysql/mysql_regexps.html#mysql_regexps</a>

&lt;4&gt;.分页:如下面是每页显示3条记录:

select * from t_user limit 0,3; 

select * from t_user limit 3,3;

select * from t_user limit 6,3;

select * from t_user limit 9,3;

&lt;5&gt;排序:默认的是asc(升序),desc表示降序

select * from t_user order by id desc; (按id降序)

select * from t_user order by id asc; (按id升序)

select * from t_user order by id asc, age desc;(表示多列排序:id按升序,age按降序) 

&lt;6&gt;.is null的使用

(1.)比如查无地址信息的用户:

select * from t_user where address is null; 

(2.)相反查询有地址信息的用户:

select * from t_user where address is not null;

&lt;7&gt;.说明性信息:

(1.)and的优先级比or高;

(2.)in操作符与or功能相同;

(3.)当使用长的合法选项清单时,in操作符语法更直观;

(4.)in操作符比or操作符执行速度更快;

(5.)in操作符的最大优点:可以包含其他的select语句。

&lt;8&gt;.in的相反方向是:not  in 而不是in not ;

比如:查询age不包括21和22的用户;

select * from t_user where age not in (21,22);

8.like查询:

&lt;1&gt;.like通配符:       _ 下划线通配符 &amp;rarr; 匹配一个字符 ;  % 通配符   &amp;rarr; 匹配一个或任意多个字符;

&lt;2&gt;.注意事项:

(1.) 不要过度使用LIKE通配符,如果其他的操作符可以完成就使用其他的操作符;

(2.) 通配符搜索使用的时间比其他搜索的时间要长

(3.) 如果确实需要使用通配符,除非绝对有必要,否则不要把通配符放到where子句的开始处;

     (把通配符放到搜索模式的开始处,搜索起来是最慢的!!!!!)

&lt;3&gt;.

eg1:搜索名字以韩开头的用户

select * from t_user where username like '韩%';

eg2: 查找名称为:韩 X风的用户:

select * from t_user where username like '韩_风';

     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/924086,如需转载请自行联系原作者