目录
前言:
一.插入记录
1.1普通插入(全字段):
1.2普通插入(限定字段):
1.3多条一次性插入:
1.4从另一个表导入:
1.5 replace
二.更新记录
2.1设置为新值:
图 2-1 2.2根据已有值替换:
2.3 更新满足某些条件的行:
三.删除记录
3.1根据条件删除:
3.2全部删除(表清空,包含自增计数器重置):
3.3TIMESTAMPDIFF
四.创建一张新表
4.1 直接创建表:
4.2 从另一张表复制表结构创建表:
4.3 从另一张表的查询结果创建表:
五.修改表
5.1 修改表:ALTER TABLE 表名 修改选项
5.2删除表:
致谢:
前言:
牛客网是一个提供IT技术学习、实践和交流的平台,其中包括了各种编程语言和技术的学习和挑战。MYSQL是其中的一个重要部分,对于想要深入学习MYSQL的人来说,牛客网提供了一系列的挑战题目。希望大家也可以通过本博客学习到自己需要的知识。
一.插入记录
1.1普通插入(全字段):
INSERT INTO table_name VALUES (value1, value2, ...)
如图 1-1 所示
图1-1
注:此处 describe是查询该表中数据类型的命令
如图 1-2 所示
图 1-2
1.2普通插入(限定字段):
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)
如图 1-3 所示
图 1-3
1.3多条一次性插入:
INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...), ...
如图 1-4 所示
图 1-4
1.4从另一个表导入:
INSERT INTO table_name SELECT * FROM table_name2 [WHERE key=value]
如图 1-5 所示
图 1-5
1.5 replace
replace into 跟 insert into功能类似,不同点在于:replace into 首先尝试插入数据到表中,
1.5.1如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据;
1.5.2否则,直接插入新数据。
注意:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。
如图 1-6 所示
图 1-6
注意如果插入的字段是自增字段的话 则可以选择以下几种方法
方法一: 可以指定插入的列名,避开自增的列 ,让自增的列自增
方法二 :把自增的值设置为NULL或0,这样MySQL会自己处理这个自增的i列
方法三:直接填入id值,不过仅针对插入数据不多的时候使用
二.更新记录
2.1设置为新值:
UPDATE table_name SET column_name=new_value [, column_name2=new_value2] [WHERE column_name3=value3]
如图 2-1 所示
图 2-1
2.2根据已有值替换:
UPDATE table_name SET key1=replace(key1, '查找内容', '替换成内容') [WHERE column_name3=value3]
如图 2-2 所示
图 2-2
2.3 更新满足某些条件的行:
如果想仅更新满足某些条件的行,可以在语句末尾使用 WHERE 子句来指定条件。例如,如果只想更新地址中包含 "Street" 的行,可以添加以下条件:
如图 2-3 所示
图 2-3
三.删除记录
3.1根据条件删除:
DELETE FROM tb_name [WHERE options] [ [ ORDER BY fields ] LIMIT n ]
如图 3-1 所示
图 3-1
3.2全部删除(表清空,包含自增计数器重置):
TRUNCATE tb_name
如图 3-2 所示
图 3-2
3.3TIMESTAMPDIFF
TIMESTAMPDIFF(interval, time_start, time_end)可计算time_start-time_end的时间差,单位以指定的interval为准,常用可选:
SECOND 秒
MINUTE 分钟(返回秒数差除以60的整数部分)
HOUR 小时(返回秒数差除以3600的整数部分)
DAY 天数(返回秒数差除以3600*24的整数部分)
MONTH 月数
YEAR 年数
如图· 3-3 所示
图 3-3
四.创建一张新表
4.1 直接创建表:
CREATE TABLE
[IF NOT EXISTS] tb_name -- 不存在才创建,存在就跳过
(column_name1 data_type1 -- 列名和类型必选
[ PRIMARY KEY -- 可选的约束,主键
| FOREIGN KEY -- 外键,引用其他表的键值
| AUTO_INCREMENT -- 自增ID
| COMMENT comment -- 列注释(评论)
| DEFAULT default_value -- 默认值
| UNIQUE -- 唯一性约束,不允许两条记录该列值相同
| NOT NULL -- 该列非空
], ...
) [CHARACTER SET charset] -- 字符集编码
[COLLATE collate_value] -- 列排序和比较时的规则(是否区分大小写等)
如图 4-1 所示
图 4-1
注:register_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
(这是一个 MySQL 中创建表时的列定义语句,它表示创建一个名为 register_time
的列,数据类型为 DATETIME)
4.2 从另一张表复制表结构创建表:
CREATE TABLE tb_name LIKE tb_name_old
如图 4-2 所示
图 4-2
4.3 从另一张表的查询结果创建表:
CREATE TABLE tb_name AS SELECT * FROM tb_name_old WHERE options
如图 4-3 所示
图 4-3
五.修改表
5.1 修改表:ALTER TABLE 表名 修改选项
{ ADD COLUMN <列名> <类型> -- 增加列
| CHANGE COLUMN <旧列名> <新列名> <新列类型> -- 修改列名或类型
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT } -- 修改/删除 列的默认值
| MODIFY COLUMN <列名> <类型> -- 修改列类型
| DROP COLUMN <列名> -- 删除列
| RENAME TO <新表名> -- 修改表名
| CHARACTER SET <字符集名> -- 修改字符集
| COLLATE <校对规则名> } -- 修改校对规则(比较和排序时用到)
如图 5-1 所示
图 5-1
5.2删除表:
DROP TABLE [IF EXISTS] 表名1 [ ,表名2]。
如图 5-2 所示
图 5-2
致谢:
感谢您阅读本篇文章,希望我所提供的 SQL 知识总结能对您有所帮助。如果您对 SQL 面试还有其他疑问或需要进一步了解,欢迎随时与我联系。祝您在未来的 SQL 面试和学习中取得优异的成绩!