假如想要的数据库名为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 首先尝试插入数据到表中,
- 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据;
- 否则,直接插入新数据。
要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,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索引、查询等操作
个人整理请勿照搬,转载请注明本文链接