数据库(database)
创建新的数据库:
create database [if not exists] db_name;
删除数据库:
drop database db_name;
使用数据库:
use db_name;
显示所有数据库:
show databases;
表(table)
创建表:
Create table table_name(列名 数据类型...);
删除表:
Drop table table_name;
查看表:
Describe(desc) table_name;
查看表的建表语句:
Show create table table_name;
显示当前数据库中已经创建的表:
Show tables;
修改表名:
Alter table 原表名 rename 新表名;
修改列名(字段名):
Alter table 表名 change 列名 新列名 类型;
修改列(字段)类型:
Alter table 表名 modify 要修改类型的列名 新类型;
修改列(字段)顺序:
Alter table 表名 modify 要修改的列 类型 after 已有的列A;(把要修改的列放在已有的A列后面)
Alter table 表名 modify 要修改的列 类型 first;把要修改的列放在第一列;
添加一个新列:
Alter table 要添加列的表名 add 列名 类型 after 已有的列;
Alter table 要添加列的表名 add 列名 类型 first;
删除一列:
Alter table 要删除列的表名 drop 要删除的列名;
向表中插入数据:
Insert into 要添加数据的表名 values(列1,列2,列3...);插入一行数据
Insert into 要添加数据的表名 values(列1,列2,列3...),(列1,列2,列3...),(列1,列2,列3...)......;插入多行数据
Insert into 要添加数据的表名(列1,列2,列3...) values (列1,列2,列3...).....;有选择性的向表中插入数据;
根据条件删除表中数据:
Delete from 表名 where 条件;
删除表中所有数据:
Delete from 表名;
更新表中指定列的所有数据:
Update 表名 set 列名1=值1,列名2=值2... ;
根据条件更新表中指定列的数据:
Update 表名 set 列名1=值1,列名2=值2... Where 条件;
查询:
单表查询:
查询所有:
Select * from 表名;
查询指定列:
Select 列名1,列名2... from 表名;
根据条件查询:
Select * from table_name where 条件;
in 操作符:
select * from 表名 where (列名1,列名2...) in ((列1值1,列2值1...),(列1值2,列2值2)...);
between and :
select * from 表名 where 列名 between 值1 and 值2;
等同于
select * from 表名 where 列名 >= 值1 and 列名 <= 值2;
Or:
select * from 表名 where 列1=值1 or 列1=值2;
And:
select * from 表名 where 列名=值1 and 列名=值2;
Like(模糊查询):
Select * from 表名 where 列名 like ‘值%’/’值_’/’%值%’;
其中一个“_”(下划线)匹配一个字符,“%”匹配任意长度的字符
空值查询(非空查询):
select * from 表名 where 列名 {is null/is not null};
查询不重复
select distinct 列名1,列名2... from 表名;
对查询结果排序
select * from 表名 order by 列名1,列名2,列名3...;
默认按升序排列
降序 desc;
分组查询
select * from 表名 group by 列名 [having count(*)>值];
limit查询
select * from 表名 limit 值1,值2;
值1类似于数组的下标
值2表示查询的长度
多表查询:
1、left join 左连接
2、right join 右连接
3、inner join 内连接
左连接,以左边表为准,左表的数据全部显示
右连接,以右边表为准,右表的数据全部显示
内连接,两个表中满足条件的数据才能显示
子查询:
按部门分组,查询到每个部门的最高工资
select max(e_salary) from employee group by dept_no;
查询每个部门最高工资的信息
select * from employee where e_salary in (select max(e_salary) from employee group by dept_no);
函数:
查询表中有多少记录
select count(*) from 表名;
查询表中某一列有多少记录
select count(列名) from 表名;
求和 sum()
select sum(列名) from 表名
求平均 avg()
select avg(列名) from 表名
求最大/最小 max()/min()
select max(列名)/min(列名) from 表名
将两个列的内容连接起来:
Select concat(a,b);
计算时间差:
Timestampdiff(datepare,date1,date2);
Now();现在的时间
Date_add(date,interval 10 day/year/month...)
算数运算符
+、-、*、/、%
逻辑运算符
and与 or或 not非 xor异或
比较运算符
>、<、=、<=、>=、!=、in、between and、is null、like等
位运算符
与& 或| 异或^ 左移<< 右移>>
优先等级
算数>比较>逻辑
正则查询:
select * from 表名 where regexp 正则表达式;
重复元字符
+ 前导字符在目标对象中出现一次或多次
* 前导字符在目标对象中出现零次或多次
?前导字符在目标对象中出现零次或一次
{n} 前导字符指定数目匹配
{n,} 前导字符不少于指定数目匹配
{n,m} 前导字符出现次数在n-m之间,但m不大于255
定位元字符
^ 文本的开头 列如:"^a"
$ 文本的结尾 列如:'a$'
关键元素符
\s 单个空格符,包括tab键和换行符
\S 除了空格符之外的所有字符
\d 用于匹配0-9的数字
\w 用于匹配字母、数字或下划线字符
\W 用于匹配\w不匹配的字符
. 用于匹配除换行符以外的所有字符
约束:
主键约束(非空+唯一):primary key
主键自增:auto_increment
非空约束:not null
唯一性约束:unique
默认值:default
外键约束:foreign key(列名) references 参照表/主表(对应列名);
如果主表用了联合主键,从表必须用联合外键:
联合主键:primary key(列1,列2....)
foreign key(列名1,列名2...) references 主表(对应列名1,对应列名2...);
其中只有当联合外键中的列的数据完全等于联合主键中的列的数据时,约束才会生效,比如:列名1=对应列名1 &&列名2=对应列名2,否则数据可以插入。
当表已经建成而忘了设外键时:
Alert table 表名 add constraint fk(自定义的外键名字) foreign key(列名1..) references 主表/对应表(对应列1...)
--列级别约束(列名 数据类型 约束)(check约束、外键约束中的列级约束是失效的
)
create table teacher(
-> tid int primary key auto_increment,
-> tname varchar(5) not null,
-> tcid bigint unique
-> );
--表级别约束
create table student3(
-> id int,
-> sanme varchar(5),
-> sage int,
-> address varchar(50),
-> primary key(id),
-> unique(sage)
-> );