1、插入数据
向表中插入一条数据的 SQL 语法如下:
INSERT INTO [TABLE_NAME] (column1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN);
那好,我们具体来看一个例子吧。
先创建这么一张 person 表,使用如下 SQL:
create table person( id int primary key, name varchar(16) not null, age int, phone varchar(11), address varchar(256) );
接着,我们插入一条数据:
insert into person(id,name,age,phone,address) values (1,'yang',22,'123232323','中国上海');
于是你查询 person 表,会看到
+----+------+------+-----------+--------------+ | id | name | age | phone | address | +----+------+------+-----------+--------------+ | 1 | yang | 22 | 123232323 | 中国上海 | +----+------+------+-----------+--------------+
当然,如果你在插入数据时有些字段的值暂时不想传入,或是该字段有默认值,insert 语句是允许你部分数据插入的,前提是不能违反一些非空、唯一、类型不匹配约束。
例如我只想插入一条数据,而我只知道这个人的名字,于是我也可以插入一条记录,但只赋值 name 字段。
insert into person(id,name) values (2,'cao');
再次查询 person 表:
+----+------+------+-----------+--------------+ | id | name | age | phone | address | +----+------+------+-----------+--------------+ | 1 | yang | 22 | 123232323 | 中国上海 | | 2 | cao | NULL | NULL | NULL | +----+------+------+-----------+--------------+
关系型数据库中,所有未赋值的字段都默认为 NULL,当然这个默认值是可以修改的,你可以修改为空字符串或空格等等。
再说一个细节,当你想要插入一条数据时,并且希望为该表的每一个字段都赋值,那么你可以不用在表名后列举所有字段名,例如以下两条 insert 语句是等效的。
insert into person(id,name,age,phone,address) values (1,'yang',22,'123232323','中国上海');
insert into person values (1,'yang',22,'123232323','中国上海');
关于 insert,我们暂时先说到这,后面介绍子查询的时候还会提到它,接着我们来看修改数据 update。
2、修改数据
SQL UPDATE 语句用于修改表中现有的记录。基本格式如下:
UPDATE [table_name] SET column1 = value1, column2 = value2...., columnN = valueN
举个例子,这是 person 表现在的数据情况:
+----+------+------+-----------+--------------+ | id | name | age | phone | address | +----+------+------+-----------+--------------+ | 1 | yang | 22 | 123232323 | 中国上海 | | 2 | cao | NULL | NULL | NULL | +----+------+------+-----------+--------------+
我们执行:
update person set address='浙江杭州';
再来看 person 表:
+----+------+------+-----------+--------------+ | id | name | age | phone | address | +----+------+------+-----------+--------------+ | 1 | yang | 22 | 123232323 | 浙江杭州 | | 2 | cao | NULL | NULL | 浙江杭州 | +----+------+------+-----------+--------------+
你会发现 person 表的所有记录的 address 字段全都修改为「浙江杭州」。
所以,一般来说,我们的 update 语句都会结合 where 子句做一个数据筛选,只修改符合条件的记录的 address 字段值。
例如:
update person set address='浙江杭州' where id = 1;
3、删除数据
我们使用 DELETE 语句对标数据进行删除,基本格式语法如下:
DELETE FROM [table_name] WHERE [condition];
同样,不追加 where 子句做条件筛选会导致整张表的数据丢失。例如我们删除 id 为 1 的那条数据记录。
delete from person where id = 1;
如何通过优化sql语句提高数据库查询效率?
!
通过SQL调优提高查询性能最重要的就是对索引的使用,下面是对索引使用的一些总结,希望对你有所帮助。
MySQL索引对数据检索的性能至关重要,盲目的增加索引不仅不能带来性能的提升,反而会消耗更多的额外资源。
索引是用于快速查找记录的一种数据结构。索引就像是数据库中数据的目录,数据库在查询时,首先在索引中找到匹配的值,然后根据这个匹配值找到对应的数据行。
聚簇索引的顺序就是数据的物理存储顺序,索引中数据域存储的就是实际的数据,一个表最多只能有一个聚簇索引,适用于查询多行数据,不适用于频繁修改的列,一般在主键上创建。
非聚簇索引顺序与数据物理排列顺序无关,索引中存储的内容为实际数据的地址,适应于查询单行数据。
普通索引,即平时创建的普通索引。
唯一索引,索引所在的列或列组合的值是全表唯一的。
全文索引,MySQL从3.23.23版开始支持全文索引,它查找的是文中的关键词,而不是直接比较索引中的值。
单列索引,在单列上创建的索引。
组合索引,在多个列上创建的索引。
最左前缀查找:where子句中有a、b、c三个查询条件,创建一个组合索引abc(a,b,c),最左前缀的概念是说以组合索引最左边的列a组合成的查询条件,如(a,b,c)、(a,b)、(a,c),这三种情况的查询条件都会使用abc索引,和where子句中a、b、c出现的顺序没关系,可以是where c=? and b=? and a=?,但(b,c)组合不会使用索引,即where c=? and b=?。
哪些列适合创建索引:
1.经常作为查询条件的列;
2.经常作为排序条件的列;
3.经常作为join条件的列;
4.经常被查询的列。
哪些列不适合创建索引:
1.数据频繁被修改的列,数据被修改,索引需要做相应的修改,消耗资源; 2.区分度不是很高的列,如性别,列值重复性太大,索引效果不是很明显; 3.不是经常被作为查询条件、排序条件、连接条件的列。
经验总结:
1.列上进行函数计算将不会使用索引;
2.对于创建索引的列,避免存储NULL,NULL会使索引更加复杂、效率变低,可以使用NOT NULL进行约束;
3.对于模糊查询like '%abc%',将不会使用索引,而like 'abc%'将会使用索引;
4.对于not in、not exists、!=等负向查询将不会使用索引;
5.每次查询只使用一个索引,如果where条件使用了索引,order by将不再使用索引;
6.对于where子句中有多个查询条件的,单列索引的效率不如复合索引,因为查询每次只能使用一个索引;
7.MySQL只对以下操作符才使用索引:<、、>=、between、in,但是需要注意in的范围值不要太多;
8.union all可以使用索引,但本身效率不是很高,不建议使用;
9.列上进行类型转换的将不会使用索引;
10.老版本MySQL对OR条件不使用索引,新版本才支持,不建议使用OR。
关于索引的实战经验总结后续还会不断更新,可以关注我的号!
sql更新一条数据很慢,怎么办?
对于数据库而言,只要做好数据存储工作就行了,但对于SQL而言,执行效率是很重要的指标。目前主流的关系型数据库都自带了查询分析器和优化器,能自动对我们编写的SQL进行最优处理,即便如此,SQL执行慢的现象还是不可避免的。虽说SQL语句执行慢是大家经常遇到的,但背后原因并不简单。
SQL执行是偶尔慢还是一直慢?
这一点很重要,SQL语句执行速度偶尔慢和一直慢的背后因素是不同的,自然要分场景来分析问题。
SQL执行偶尔慢的原因分析
如果一条SQL语句绝大多数情况下都是正常的,偶尔出现慢的情况,那一般来说此SQL语句问题不大,可能是其它因素影响了它的执行效率,比如:
1、服务器内存不足
若查询量大,而查询的数据页又不在内存中时,就需要申请内存,此时一旦内存不足就会淘汰一些内存数据,这些操作就会影响SQL执行速度。
2、日志文件过大
数据库在同步日志及数据到磁盘上时,也会影响SQL执行效率。
3、无法获取锁
当我们在操作数据时,若别人也在用这张表而且加锁了,我们无法获取到锁,只能等待他人释放锁,这个很影响SQL效率。
SQL执行一直慢的原因分析
如果数据量级不变,而某条SQL执行时一直都很慢,那就需要看看SQL语句写法是否存在问题了,另外数据库的一些配置是否存在问题,比如:
1、相关字段是否建有合适的索引?
比如更新操作,如果加了where条件,而条件列字段没有索引,那就意味着要全表扫描,这样一来SQL慢也就是正常现象了。
2、字段有索引,但SQL并没有用到此索引
并不是说我们对字段创建了索引,索引就一定会生效。在某些情况下,一些SQL写法会导致索引失效,比如在索引列上使用了函数。
3、系统采样统计失误导致系统没有使用索引而是全表扫描,此时需要强制使用索引
SQL执行时,数据库系统会进行一个预测:看是走索引扫描的行数少,还是全表扫描的行数少。索引基数是通过采样来统计的,存在一定误差,如果误差过大那可能会使系统错误的决定使用全表扫描,此时我们可以在SQL中声明强制走索引查询。
4、硬件限制
如果服务器CPU及磁盘读写速度低、内存小,那同样会影响整个数据库性能。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!