SQL语句增删改操作(适用于MySQL)

假如想要的数据库名为students

数据表名为userinfo,字段格式为

id(主键自增),name(varchar),sex(varchar),age(int),birthday(datetime),des(varchar)

除主键外皆可为空,则有以下代码:

创建数据库和表

细节剖析:

  • 自增ID:AUTO_INCREMENT;
  • 设置主键:PRIMARY KEY;
  • 唯一性约束:UNIQUE
  • 非空约束:NOT NULL
  • 设置默认值:DEFAULT 0
  • 当前时间戳:CURRENT_TIMESTAMP
  • 评论/注释:COMMENT
  • 如果该表已创建过,正常返回:IF NOT EXISTS
  • 1.1 直接创建表:
create database students
go
use students
go
[IF NOT EXISTS] userinfo-- 不存在才创建,存在就跳过
create table userinfo( id primary key identity(1001,1), name varchar(20), sex varchar(2), age int, birthday datetime DEFAULT CURRENT_TIMESTAMP COMMENT,--默认生日为当前时间戳 des varchar(200) )
  • 1.2 从另一张表复制表结构创建表: CREATE TABLE tb_name LIKE tb_name_old

  • 1.3 从另一张表的查询结果创建表: CREATE TABLE tb_name AS SELECT * FROM tb_name_old WHERE options

修改数据表

ALTER TABLE 表名

{ ADD COLUMN <列名> <类型> -- 增加列
| CHANGE COLUMN <旧列名> <新列名> <新列类型> -- 修改列名或类型
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT } -- 修改/删除 列的默认值
| MODIFY COLUMN <列名> <类型> -- 修改列类型
| DROP COLUMN <列名> -- 删除列
| RENAME TO <新表名> -- 修改表名
| CHARACTER SET <字符集名> -- 修改字符集
| COLLATE <校对规则名> } -- 修改校对规则(比较和排序时用到)

例如给表加一个注册时间字段

ALTER TABLE userinfo ADD COLUMN  registertime datetime;

删除数据表

DROP TABLE [IF EXISTS] 表名;

插入记录

插入记录的方式汇总:

  • 普通插入(全字段):INSERT INTO table_name VALUES (value1, value2, ...)
  • 普通插入(限定字段):INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)
  • 多条一次性插入:INSERT INTO table_name (column1, column2, ...) VALUES (value1_1, value1_2, ...), (value2_1, value2_2, ...), ...
  • 从另一个表导入:INSERT INTO table_name SELECT * FROM table_name2 [WHERE key=value]

插入单条数据

INSERT INTO userinfo VALUES('张三','',22,'2000-1-1 0:0:0','插入单条记录')

插入多条数据

INSERT INTO userinfo VALUES('张三','',22,'2000-1-1 0:0:0','插入多条记录'),('李四','',22,'2000-1-1 0:0:0','插入多条记录'),('王二','',22,'2000-1-1 0:0:0','插入多条记录'),

根据字段名插入部分数据

INSERT INTO userinfo (name,age) VALUES('张三',22)

从另一个表导入数据

INSERT INTO userinfo SELECT * FROM table_name2 [WHERE key=value]

使用replace代替insert插入

replace into 跟 insert into功能类似,不同点在于:replace into 首先尝试插入数据到表中,

  1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据;
  2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

REPLACE INTO userinfo VALUES('张三','',22,'2000-1-1 0:0:0','插入单条记录')

更新记录

把名字张三改为李四 

设置为新值

UPDATE userinfo SET name='李四' WHERE name='张三'

根据已有值替换

UPDATE userinfo SET name=replace(name, '张三', '李四') [WHERE name='张三']

replace与update的区别 replace对一整条记录的值做修改 update可以只修改某个或者某些记录的值

删除记录

删除记录的方式汇总:

  • 根据条件删除:DELETE FROM tb_name [WHERE options] [ [ ORDER BY fields ] LIMIT n ]
  • 全部删除(表清空,包含自增计数器重置):TRUNCATE tb_name

时间差:

  • TIMESTAMPDIFF(interval, time_start, time_end)可计算time_start-time_end的时间差,单位以指定的interval为准,常用可选:
    • SECOND 秒
    • MINUTE 分钟(返回秒数差除以60的整数部分)
    • HOUR 小时(返回秒数差除以3600的整数部分)
    • DAY 天数(返回秒数差除以3600*24的整数部分)
    • MONTH 月数
    • YEAR 年数

删除年龄大于22岁的用户

DELETE FROM userinfo WHERE TIMESTAMPDIFF(YEAR, start_time, submit_time) > 22;

下一篇接SQL索引、查询等操作

个人整理请勿照搬,转载请注明本文链接

 

posted @ 2022-05-23 10:39  给自己个晚安  阅读(84)  评论(0编辑  收藏  举报