基本语法
创建数据库
create database database-name
删除数据库
drop database database-name
创建新表
create table tablename(col1 type1 [not nul] [primary key],col2 type2 [not null] ...)
根据已有的表创建新的表:
使用旧表创建新表,只有表结构,不会同步数据:
create table table_new like tab_old
-- 这个语法测试没通过
create table table_new as select col1,col2...from tab_old definition only
删除表
drop table tablename
增加一列
alter table tablename add column col type
--eg
alter table demo_event add column client_ip VARCHAR(50)
添加主键
alter table tablename add primary key(col)
--eg
alter table demo_event add primary key(id)
创建索引
create [unique] index inxname on tablename(col...)
--eg
create unique index id_index on demo_event(id)
删除索引
drop index idxname on tablename
--eg
drop index id_index on demo_event
创建视图
create view viewname as select statement
--eg
create view id_view as select id ,name from demo_event where id <2
删除视图
drop view viewname
--eg
drop view id_view
几个简单的sql语句
条件查询:
select * from tablename where condition
--eg
select * from demo_event where id <2
插入数据
insert into tablename(col1,col2...) values(vaue1,vaule2...)
--eg
insert into demo_event(`id`, `name`, `limit`, `status`, `address`, `start_time`, `create_time`,`client_ip`) values(2,"zhu",200, 1, '广州天河', '2022-07-04 14:36:43', '2022-07-04 14:36:45', '192.168.1.1')
删除数据
delete from tablename where condition
--eg
delete from demo_event where id =3
更新数据
update tablename set col1=value1 , col2=value2... where condition
--eg
update demo_event set `address`='深圳' ,`name` = '一加发布会' where id = 2
模糊查询
select * from tablename where col like '%value%'
--eg
select * from demo_event where address like '%深圳%'
排序
select * from tablename order by col [DESC]
--eg
select * from demo_event where address like '%深圳%' order by id desc
总数
select count(totalcount) from tablename
--eg
select count(`status`) from demo_event where `status`=1
求和
select sum(col) as sumvalue from tablename
--eg
select sum(`limit`) as sumvalue from demo_event where `limit` > 1
平均
select avg(col) as avgvalue from tablename
--eg
select avg(`limit`) as avgvalue from demo_event where `limit` > 1
最大值
select max(col) as maxvalue from tablename
--eg
select max(`limit`) as max_limit from demo_event where `limit` > 1
最小值
select min(col) as minvalue from tablename
--eg
select min(`limit`) as min_limit from demo_event where `limit` > 1
高级查询运算词
左连接、右连接和内连接
左连接(left join):以左表为主表,展示所有满足条件的左表数据,如果右表为空,则展示null
-- eg
select * table_A A left join table_B B on B.no = A.id
where A.stauts = 2
右连接(right join):以右表为主表,展示所有满足条件的右表数据,如果左表的数据为空,则展示null
-- eg
select * table_A right join table_B on B.no = A.id
where A.status =2
内连接(inner join):只有左右两表都满足条件才展示。
-- eg
select * table_A inner join table_B on B.no = A.id
where A.status =2
分组查询:group by:使用group by 之后,需要过滤数据,只能使用having语句(在group by分组之后过滤),where语句(在分组前过滤)对分组不生效;注:使用group by之后,select 展示的列必须是聚合函数或者是在group by分组的列
-- eg
select * from table_A A where A.status=2
group by A.class having A.sex ="男"
排序:order by 升序:asc 降序:desc
-- eg
select * from table_A
order by id desc
限制数量:limit
---- 取一千条数据
select * from table_A
where class = "一班" limit 1000
---- 综合使用:取总分超过200分的前100名
select sno,sum(score) from sc
group by sno
having sum(score) >200
order by sno desc
limit 100
事务的四大特性(ACID)
原子性:
整个事务是一体的,完成动作看成一个整体,没有部分完成的动作。全部动作完成事务才结束,否则事务回滚,已完成的部分动作失效,数据不发生改变。
一致性:
执行结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此数据库只包含成功事务提交的结果时,就说数据库处于一个一直的状态。也就是说事务前后的数据的状态是只有初始和整个事务成功后的状态,不存在部分数据状态不一致
隔离性:
一个事务的执行不能被其他事务干扰, 即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间互相干扰。
持久性:
指一个事务一旦提交,对数据的改变是永久的。