我的数据库第三节

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 (值列表);

  1. 修改
    更新表中的数据:语法: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 更新数量];

  2. 删除
    语法: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语句仅删除记录,不删除表本身。

  3. select [distinct] *{column1, column2,…} from tb1_name;
    *号表示查询所有列(星号效率很低,用哪些字段就取哪些字段)
    distinct 如果结果中有完全相同的行,就去除重复行。
    在select语句中可以使用表达式对查询的列进行运算。
    select语句中可以使用as起别名。
    语法:select column as 别名 from 表

  4. 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语句的结尾

  5. count(列名)返回某一列,行的总数
    语法:select count(*)|count(列名) from tb1_name where condition
    指定列名会将空过滤掉,若使用*则将空的也算进去。

  6. sum
    sum 函数返回满足where 条件的行的和
    语法:select sum(列名) {,sum(列名)…} from tb1_name [where condition]
    注意sum仅对数值起作用,否则结果无意义。

    7.avg函数返回满足where条件的一列的平均值

  7. max/min:该函数返回满足where条件的一列的最大/最小值
    select max(列名)from tbl_name [where condition]

    9.group by
    group by子句对列进行分组
    语法: select column1,column2,..from table group by column

  8. 函数
    常用日期函数
    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的天数,因此可以是负数。

  9. 字符串函数
    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) 去除前空格或后空格。

  10. 数学函数
    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) 余数

  11. 其他常用函数
    user()查询当前用户

  12. 自连接
    自连接是指在同一张表连接查询

  13. 子查询
    子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

  14. 合并查询:在我们实际应用中,为了合并多个select的执行结果,可以使用集合操作符union,union all
    union :该操作符用于取得两个结果集的并集,当使用该操作符时,会自动去掉结果集中的重复行
    union all:该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

    15.外键:外键用于定义主表和从表之间的关系,外键约束主要定义在从表上,主表则必须是有主键约束或unique约束,当定义外键后,要求外键列数据必须在主表列存在或为null。
    语法:foreign key (字段名)references 主表 (列)

  15. 表的内联和外联
    表的连接分为内连和外联
    内连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选。
    语法:select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;

  16. 外连接:分为左外联接和右外连接
    左外连接:如果联合查询,左侧的表完全显示我们就说是左外连接
    语法:select 字段名 from 表名1 left join 表名2 on 连接条件
    右外连接:如果联合查询,右侧的表完全显示我们就说是右外连接
    语法:select 字段 from 表名1 right join 表名2 on 连接条件

  17. 索引:提高数据库的性能,索引是物美价廉的东西了。不用加内存,不用该程序,不用调sql,只要执行正确的create index,查询速度就可能提高成百上千倍,但是天下没有免费的午餐,查询速度的提高是以插入,更新,删除的速度为代价的,这些写操作,增加了大量的IO。所以他的价值,在于提高一个海量数据的检索速度。
    常见索引分为:主键索引,唯一索引,普通索引,全文索引,解决中子文索引问题。

  18. 创建主键索引
    第一种方式: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,等价于主键索引。

  19. 普通索引的创建
    语法:(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));
    特点:一个表中可以有多个普通索引,普通索引在实际开发中用的比较多。
    如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引。

  20. 全文索引的创建
    当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。mysql提供全文索引机制,但是有要求,要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。

  21. 查询索引
    语法:show keys from 表名,show index from 表名,desc 表名//但是信息比较简略,以上这三条语句都可以查询索引。

  22. 删除主键:alter table 表名 drop primary;
    其他索引的删除:alter table 表名 drop index 索引名,drop index 索引名 on 表名。
    创建索引的原则:
    比较平凡作为查询条件的字段应该创建索引。
    唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件。
    更新非常频繁的字段不适合作创建索引。
    不会出现在wher子句中的字段不该创建索引。

猜你喜欢

转载自blog.csdn.net/weixin_40797414/article/details/81272058