1.向表中增加字段的语法:insert into table_name[(column[,coumln…])] values (value [,value…]);
使用该语句注意的细节:插入的数据应于字段的数据类型相同。
数据的大小应在规定的范围内。
在values中列出的数据位置必须与被加入的列位置相对应。
字符和日期类型应该包含在单引号中。
插入空值,不指定或insert into table values(null)
如果给表中的所有字段添加数据,可以不写前面的字段名称。
如果你只给表中的某几个字段赋值,则需要指定字段名。
在数据插入的时候,假设主键对应的值已经存在则插入失败。
当主键存在冲突的时候,可以选择性的进行处理:
可以更新操作:insert into 表名(字段列表values(值列表)on duplicate key update 字段=新值
可以替换操作:主键如果没有冲突,就直接插入
replace into 表名(包含字段) values (值列表);
修改
更新表中的数据:语法:update tbl_name set col_name1=expr1, [,col_name2=expr2…] [where condition]
update的使用细节:
update语法可以用新值更新原有表中的各列
set子句指示要修改哪些列和要给于哪些值
where子句指定应更新哪些行,如果没有where子句,则更新所有行
如果需要更新多个字段可以通过set 字段1=值1,字段2=值2…
更新还可以限制更新数量:update 表名 set 字段=值 [where 条件] [limit 更新数量];删除
语法:delete from tbl_name [where condition]
如delete from goods where id=101。
在练习删除时,避免数据删没了,我们可以复制一份表。
语句:create table goods2 like goods;
将goods表的数据复制到goods2
语句:insert into goods2 select*from goods;
删除表中的所有记录
delete from goods;//删除整个表的数据,但是表的结构还存在
使用truncate删除表中的记录
truncate table goods;//该指令也把整个表记录删除
以上两种删除整表的区别:
效果一样,但truncate速度快
delete可以带where条件,删除更加灵活
delete可以返回被删除的记录数,而truncate返回0
推荐使用delete
delete使用细节:
如果不使用where子句将删除整个表中所有数据
delete语句不能删除某一列的值(可以用update置空)
使用delete语句仅删除记录,不删除表本身。select [distinct] *{column1, column2,…} from tb1_name;
*号表示查询所有列(星号效率很低,用哪些字段就取哪些字段)
distinct 如果结果中有完全相同的行,就去除重复行。
在select语句中可以使用表达式对查询的列进行运算。
select语句中可以使用as起别名。
语法:select column as 别名 from 表select 的where 子句
通过where子句,进行查询过滤
在where子句中经常使用的运算符:in() 显示在in列表中的值,如: in(100,200)
like ” 模糊查询
is null 判断是否为空
and 多个条件同时成立
or 多个条件任一成立
not 不成立 ,例:where not (math>90);
5.select 的order by子句
语法:select column1,column2,…from table order by column asc|desc,…
order by指定排序的列,排序的列可以让表中的列名,也可以是select语句后指定的别名
asc升序(默认),desc降序,若没有指定升序还是降序,默认是升序
order by 子句应该位于select语句的结尾count(列名)返回某一列,行的总数
语法:select count(*)|count(列名) from tb1_name where condition
指定列名会将空过滤掉,若使用*则将空的也算进去。sum
sum 函数返回满足where 条件的行的和
语法:select sum(列名) {,sum(列名)…} from tb1_name [where condition]
注意sum仅对数值起作用,否则结果无意义。7.avg函数返回满足where条件的一列的平均值
max/min:该函数返回满足where条件的一列的最大/最小值
select max(列名)from tbl_name [where condition]9.group by
group by子句对列进行分组
语法: select column1,column2,..from table group by column函数
常用日期函数
current_date() 当前 日期
current_time() 当前时间
current_timestamp() 当前时间戳
date(datetime) 返回datetime的日期部分
date_add(date2,interval d_value_d_type)在date2中加上日期或时间
date_sub(date,interval d_vale_d_type) 在date2上减去一个事件
datedeff(date1,date2) 两个日期差(结果是天)
now() 当前时间
日期函数使用细节:date_add()和date_sub()中的interval后面可以使year minute second day
datediff(date1,date2)得到的是天数,二期是date1-date2的天数,因此可以是负数。字符串函数
charset(str)返回字符串字符集
concat(string2 [,…]连接字符串
instr(string,substring)返回substring在string中出现的位置,没有返回0
ucase(string2) 转换成大写
lcase(string2) 转换成小写
left(string2,length) 从string2中的左边起取length个字符
length(string) string的长度
replace(str,search_str,replace_str) 在str中用replace_str替换search_str
strcmp(string1,string2)逐字符比较两字符串大小
substring(str,position [,length] 从str的position开始,取length个字符
ltrim(string) rtrim(string) trim(string) 去除前空格或后空格。数学函数
abs(number2) 绝对值
bin(decimal_num) 十进制转二进制
ceiling(number2) 向上取整
conv(number2,from_base,to_base) 进制转换
flooer(number2) 向下取整
format(number,decimal_places) 保留小数位数
hex(decimalNumber)转换成16进制
rand()返回随机浮点值,范围0~1.0
mod(numerator,denominator) 余数其他常用函数
user()查询当前用户自连接
自连接是指在同一张表连接查询子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询合并查询:在我们实际应用中,为了合并多个select的执行结果,可以使用集合操作符union,union all
union :该操作符用于取得两个结果集的并集,当使用该操作符时,会自动去掉结果集中的重复行
union all:该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。15.外键:外键用于定义主表和从表之间的关系,外键约束主要定义在从表上,主表则必须是有主键约束或unique约束,当定义外键后,要求外键列数据必须在主表列存在或为null。
语法:foreign key (字段名)references 主表 (列)表的内联和外联
表的连接分为内连和外联
内连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选。
语法:select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;外连接:分为左外联接和右外连接
左外连接:如果联合查询,左侧的表完全显示我们就说是左外连接
语法:select 字段名 from 表名1 left join 表名2 on 连接条件
右外连接:如果联合查询,右侧的表完全显示我们就说是右外连接
语法:select 字段 from 表名1 right join 表名2 on 连接条件索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用该程序,不用调sql,只要执行正确的
create index
,查询速度就可能提高成百上千倍,但是天下没有免费的午餐,查询速度的提高是以插入,更新,删除的速度为代价的,这些写操作,增加了大量的IO。所以他的价值,在于提高一个海量数据的检索速度。
常见索引分为:主键索引,唯一索引,普通索引,全文索引,解决中子文索引问题。创建主键索引
第一种方式:create table user1(id int primary key, name varchar(30));
在创建表的时候,直接在字段名后指定primary key
第二种方式:
create table user2(id int, name varchar(30),primary key(id));
在创建表的最后,指定某列或某几列为主键索引
create table user3(id int, name varchar(30));
alter table user3 add primary key (id);创建表以后再添加主键。
主键索引的特点:
一个表中,最多有一个主键索引,当然可以使符合主键
主键索引的效率高(主键不可重复)
创建主键索引的列,它的值不能为null,且不能重复。
主键索引的列基本上是int
唯一索引的创建:
第一种方式:create table user4(id int primary key, name varchar(30) unique);
在表定义时,在某列后直接指定unique唯
第二种方式:create table user5(id int primary key, name varchar(30),unique(name));创建表时,在表的后面指定某列或某几列为unique
第三种方式:create table user6(id int primary key,name varchar(30));
alter table user6 add unique(name);
唯一索引的特点:
一个表中,可以有多个唯一索引
查询效率高
如果在某一列建立唯一索引,必须保证这列不能有重复数据
如果一个唯一索引上指定not null,等价于主键索引。普通索引的创建
语法:(1)create table user8(id int primary key, name varchar(20),email varchar(30), index(name) 在表的定义最后,指定某列为索引);
(2)create table user9(id int primary key, name varchar(20), email varchar(30));
特点:一个表中可以有多个普通索引,普通索引在实际开发中用的比较多。
如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引。全文索引的创建
当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。mysql提供全文索引机制,但是有要求,要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。查询索引
语法:show keys from 表名,show index from 表名,desc 表名//但是信息比较简略,以上这三条语句都可以查询索引。- 删除主键:alter table 表名 drop primary;
其他索引的删除:alter table 表名 drop index 索引名,drop index 索引名 on 表名。
创建索引的原则:
比较平凡作为查询条件的字段应该创建索引。
唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件。
更新非常频繁的字段不适合作创建索引。
不会出现在wher子句中的字段不该创建索引。