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的正则:
http://www.yiibai.com/mysql/mysql_regexps.html#mysql_regexps
<4>.分页:如下面是每页显示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;
<5>排序:默认的是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按降序)
<6>.is null的使用
(1.)比如查无地址信息的用户:
select * from t_user where address is null;
(2.)相反查询有地址信息的用户:
select * from t_user where address is not null;
<7>.说明性信息:
(1.)and的优先级比or高;
(2.)in操作符与or功能相同;
(3.)当使用长的合法选项清单时,in操作符语法更直观;
(4.)in操作符比or操作符执行速度更快;
(5.)★in操作符的最大优点:可以包含其他的select语句。
<8>.in的相反方向是:★not in 而不是in not ;★
比如:查询age不包括21和22的用户;
select * from t_user where age not in (21,22);
8.like查询:
<1>.like通配符: _ 下划线通配符 → 匹配一个字符 ; % 通配符 → 匹配一个或任意多个字符;
<2>.注意事项:
(1.) 不要过度使用LIKE通配符,如果其他的操作符可以完成就使用其他的操作符;
(2.) 通配符搜索使用的时间比其他搜索的时间要长
(3.) ★如果确实需要使用通配符,除非绝对有必要,否则不要把通配符放到where子句的开始处;
(把通配符放到搜索模式的开始处,搜索起来是最慢的!!!!!)
<3>.
eg1:搜索名字以韩开头的用户
select * from t_user where username like '韩%';
eg2: 查找名称为:韩 X风的用户:
select * from t_user where username like '韩_风';