增删改 查
写操作 读操作
创建
CREATE DATABASE test;
CREATE TABLE users1(...);
打开数据库
USE sql_name;
查看SELECT
SELECT DATABASE; //查看当前数据库
SELECT LENGTH(md5('123')); //查看md5加密后的位数
查看SHOW
SHOW TABLES;
SHOW TABLES FROM mysql;
SHOW COLUMNS FROM user1;
SHOW INDEXES FROM provinces\G; //显示数据表的索引 查看唯一约束
SHOW CREATE TABLE tbl_name; //查看数据表的创建命令
插入
INSERT tbl VALUES('Tom', 25, 7863.25);
INSERT tbl(username,salary) VALUES('John',4500.69);
查找
SELECT * FROM tbl; //查找全部列字段
添加删除列
ALTER TABLE users1 DROP password, DROP age, ADD truename VARCHAR(20) NOT NULL FIRST;// 操作用逗号分开
例:
CREATE TABLE users(
->id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
->username VARCHAR(20) NOT NULL,
->password VARCHAR(20) NOT NULL,
->age TINYINT UNSIGNED NOT NULL DEFAULT 10,
->sex BOOLEAN
->);
INSERT users VALUES(NULL, 'Tom', '123', 25, 1); //id=1
INSERT users VALUES(DEFAULT, 'Tom', '123', 25, 1);// id=2
书写表达式
INSERT users VALUES(DEFAULT, 'Tom', '123', 3*7-5, 1);
有默认值的列可赋值DEFAULT
INSERT users VALUES(NULL, 'Tom', '123', DEFAULT, 1);
一次性写入多条记录
INSERT users VALUES(NULL, 'Tom', '123', 25, 1), (NULL, 'Rose', md5('123'), DEFAULT,0); //md5哈希值32位,注意password要位数设置够
SELECT LENGTH(md5('123')); // 32位
ALTER TABLE users MODIFY password VARCHAR(40) NOT NULL;
INSERT users SET username='Ben', password = '123'; // age=10, sex=NULL
省略条件则更新全部记录:
更新一列
UPDATE users SET age = age+5; //表中所有age记录+5
更新多列
UPDATE users SET age = age-id, sex = 0;
加入更新条件:
UPDATE users SET age = age + 10 WHERE id %2 = 0; // id为偶数则更新
SELECT id, username FROM users; //字段顺序影响结果顺序
SELECT * FROM users; // *表示所有的列
SELECT users.id, users.username FROM users; //便于分析字段属于哪个数据表
SELECT id AS userId, username AS uname FROM users; // 字段别名影响结果别名
ASC 升序
DESC降序
多个分组条件中间逗号分割
SELECT sex FROM users GROUP BY sex; // 指定列名按sex分组
SELECT sex FROM users GROUP BY 1; // 指定位置按sex分组,一般不用。(1表示select语句中出现的第一个字段名称)
SELECT sex FROM users GROUP BY 1 HAVING age > 35; // error age没出现在语句中
SELECT sex,age FROM users GROUP BY 1 HAVING age > 35; // empty
SELECT sex FROM users GROUP BY 1 HAVING count(id) >=2; //count计数函数
DESC降序
SELECT * FROM users;
SELECT * FROM users ORDER BY id DESC; //按id降序排序
SELECT * FROM users ORDER BY age, id DESC;// 按age升序,相同则按id降序排序
offset分页时偏移量: (当前页码-1)*每页显示记录数
SELECT * FROM users LIMIT 2; //只返回前两条记录
SELECT * FROM users LIMIT 3, 2; // 从结果集第四个位置开始返回两条,索引从0开始 [0,1,2,3,...]
SELECT * FROM users ORDER BY id DESC LIMIT 2, 2; //id降序的3、4条记录
CREATE TABLE test(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(40)
->);
写操作 读操作
创建
CREATE DATABASE test;
CREATE TABLE users1(...);
打开数据库
USE sql_name;
查看SELECT
SELECT DATABASE; //查看当前数据库
SELECT LENGTH(md5('123')); //查看md5加密后的位数
查看SHOW
SHOW TABLES;
SHOW TABLES FROM mysql;
SHOW COLUMNS FROM user1;
SHOW INDEXES FROM provinces\G; //显示数据表的索引 查看唯一约束
SHOW CREATE TABLE tbl_name; //查看数据表的创建命令
插入
INSERT tbl VALUES('Tom', 25, 7863.25);
INSERT tbl(username,salary) VALUES('John',4500.69);
查找
SELECT * FROM tbl; //查找全部列字段
添加删除列
ALTER TABLE users1 DROP password, DROP age, ADD truename VARCHAR(20) NOT NULL FIRST;// 操作用逗号分开
例:
CREATE TABLE users(
->id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
->username VARCHAR(20) NOT NULL,
->password VARCHAR(20) NOT NULL,
->age TINYINT UNSIGNED NOT NULL DEFAULT 10,
->sex BOOLEAN
->);
【插入INSERT】
【插入记录1 INSERT 】INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT}), (), ...
省略列名,所有列必须都有赋值,为自动编号的字段id赋值时,可填写NULL or DEFAULTINSERT users VALUES(NULL, 'Tom', '123', 25, 1); //id=1
INSERT users VALUES(DEFAULT, 'Tom', '123', 25, 1);// id=2
书写表达式
INSERT users VALUES(DEFAULT, 'Tom', '123', 3*7-5, 1);
有默认值的列可赋值DEFAULT
INSERT users VALUES(NULL, 'Tom', '123', DEFAULT, 1);
一次性写入多条记录
INSERT users VALUES(NULL, 'Tom', '123', 25, 1), (NULL, 'Rose', md5('123'), DEFAULT,0); //md5哈希值32位,注意password要位数设置够
SELECT LENGTH(md5('123')); // 32位
ALTER TABLE users MODIFY password VARCHAR(40) NOT NULL;
【插入记录2 INSERT SET=】INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...
区别:可以使用子查询(SubQuery),一次性只能插入一条记录,可为空或者有默认值的列可不赋值。INSERT users SET username='Ben', password = '123'; // age=10, sex=NULL
【插入记录3 INSERT SELECT】INSERT [INTO] tbl_name [(col_name,..)] SELECT ...
此方法将查询结果插入到指定数据表【更新UPDATE】
【多表更新】略
【单表更新】UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT}[, col_name2 = {expr|DEFAULT}]...[WHERE where_condition]
省略条件则更新全部记录:
更新一列
UPDATE users SET age = age+5; //表中所有age记录+5
更新多列
UPDATE users SET age = age-id, sex = 0;
加入更新条件:
UPDATE users SET age = age + 10 WHERE id %2 = 0; // id为偶数则更新
【删除DELETE】
【多表删除】略
【单表删除】DELETE FROM tbl_name [WHERE where_condition];
DELETE FROM users WHERE id=6; //继续插入 id仍为已有的最大id号+1而不是刚删除的id号【查找SELECT】
SELECT 3+5;SELECT id, username FROM users; //字段顺序影响结果顺序
SELECT * FROM users; // *表示所有的列
SELECT users.id, users.username FROM users; //便于分析字段属于哪个数据表
SELECT id AS userId, username AS uname FROM users; // 字段别名影响结果别名
【WHERE】
【分组GROUP BY】
查询结果分组:[GROUP BY {col_name | position} [ASC | DESC], ... ]ASC 升序
DESC降序
多个分组条件中间逗号分割
SELECT sex FROM users GROUP BY sex; // 指定列名按sex分组
SELECT sex FROM users GROUP BY 1; // 指定位置按sex分组,一般不用。(1表示select语句中出现的第一个字段名称)
【分组条件 HAVING】全部或某一部分记录分组
[HAVING where_condition] 分组条件要么为聚合函数(max, min, avg,count...只有一个返回值),要么出现当前select语句中,否则出错SELECT sex FROM users GROUP BY 1 HAVING age > 35; // error age没出现在语句中
SELECT sex,age FROM users GROUP BY 1 HAVING age > 35; // empty
SELECT sex FROM users GROUP BY 1 HAVING count(id) >=2; //count计数函数
【分组结果排序 ORDER BY 字段/位置】
ASC 升序DESC降序
SELECT * FROM users;
SELECT * FROM users ORDER BY id DESC; //按id降序排序
SELECT * FROM users ORDER BY age, id DESC;// 按age升序,相同则按id降序排序
【限制查询结果返回的数量LIMIT】
[LIMIT {[offset,] row_count | row_count OFFSET offset}] // LIMIT 位置1,返回条数offset分页时偏移量: (当前页码-1)*每页显示记录数
SELECT * FROM users LIMIT 2; //只返回前两条记录
SELECT * FROM users LIMIT 3, 2; // 从结果集第四个位置开始返回两条,索引从0开始 [0,1,2,3,...]
SELECT * FROM users ORDER BY id DESC LIMIT 2, 2; //id降序的3、4条记录
CREATE TABLE test(
-> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(40)
->);