数据库
创建数据库
1 | create database db; |
删除数据库
1 | drop database db; |
查看数据库
1 | show databases; |
使用数据库
1 | use db; |
表
创建表
1 | CREATE TABLE db.tb ( |
删除表
1 | drop table tb |
修改表名
1 | RENAME TABLE tb TO new_tbname; |
初始化表(清空)
1 | TRUNCATE TABLE tb |
复制表:
1 | CREATE TABLE tb_name2 SELECT * FROM tb_name; |
或者部分复制:1
CREATE TABLE tb_name2 SELECT id,name FROM tb_name;
查看数据库中可用的表:
1 | SHOW TABLES; |
查看表的结构:
1 | DESCRIBE tb_name; |
列/约束
ALTER TABLE tb ADD[CHANGE,RENAME,DROP]
增加列/约束
1 | alter table tb add column name VARCHAR(45) not null after id,add primary key(id); |
删除列/约束
1 | alter table tb drop col2 drop primary key(id); |
修改列/约束
ALTER TABLE tb MODIFY col2 int NOT NULL DEFAULT 100 add col1 int identity(1,1);
ALTER TABLE tb ALTER col2 SET DEFAULT 1000;
ALTER TABLE tb ALTER col2 DROP DEFAULT;
约束
primary key,not null,unique,asc/desc/default 0/AUTO_INCREMENT/zerofill
单表操作
插入
1 | insert into tb(col1,col2) values(value1,value2) |
删除
1 | delete from tb [WHERE Clause] |
更新
1 | update tb set col1=value1 [WHERE Clause] |
使用MySQL执行update的时候报错:1
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.
解决方法:
执行命令 SET SQL_SAFE_UPDATES = 0; //修改下数据库模式
如果想要提高数据库安全等级,可以在恢复回原有的设置,执行命令:SET SQL_SAFE_UPDATES = 1;
查找
1 | select * from tb [WHERE Clause] |
where
- =、>、<、<> and/not and or is null/is not null
分组查询:order by/group by/having
1
select * from tb order by col1,col2 asc/desc
like
1
2
3SELECT field1, field2,...fieldN
FROM tb
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'in/not in
1
select * from tb1 where a [not] in (value1,value2,value3)
between/not between
exists/not exists
全选/全不选
where 1=1 表示选择全部
where 1=2 表示全部不选,分页
1
2
3
4declare @start int,@end int
@sql nvarchar(600)
set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’
exec sp_executesql @sql删除重复记录
1
2
3
41),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
2),select distinct * into temp from tablename
delete from tablename
insert into tablename select * from temp列出数据库里所有的表名
1
select name from sysobjects where type='U' // U代表用户
列出表里的所有的列名
1
2
3select name from syscolumns where id=object_id('TableName')
select column_name,data_type from information_schema.columns
where table_name = '表名' //查询某一个表的字段和数据类型获取当前数据库中的所有用户表
1
select Name from sysobjects where xtype='u' and status>=0
多表操作
union
通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。1
2
3
4
5
6
7
8
9
10SELECT expression1, expression2, ... expression_n
FROM tb1
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tb2
[WHERE conditions];
DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
ALL: 可选,返回所有结果集,包含重复数据。
EXCEPT
通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
INTERSECT
通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
分组:group by
count,sum,max,min,avg
连接:join
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
1
2
3
4
5SELECT a.col1, a.col2, b.col3 FROM tb1 a INNER JOIN tb2 b
ON a.col1 = b.col1;
等价于
SELECT a.col1, a.col2, b.col3 FROM tb1 a, tb2 b
WHERE a.col1 = b.col1;LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
1
2SELECT a.col1, a.col2, b.col3 FROM tb1 a LEFT JOIN tb2 b
ON a.col1 = b.col1;RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
1
2SELECT a.col1, a.col2, b.col3 FROM tb1 a RIGHT JOIN tb2 b
ON a.col1 = b.col1;