CREATE TABLE [IF NOT EXISTS] `表名`( `字段名` 列类型 [属性][索引][注释], `字段名` 列类型 [属性][索引][注释], `字段名` 列类型 [属性][索引][注释], `字段名` 列类型 [属性][索引][注释], ... )[表类型][字符集设置][注释]
修改表名 ALTER TABLE 旧表名 RENAME AS 新表名 增加表字段 ALTER TABLE 表名 ADD 字段名 列属性 修改表字段 ALTER TABLE 表名 MODIFY 字段名 列属性 ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性 删除表字段 ALTER TABLE 表名 DROP 字段名 删除表 DROP TABLE IF EXISTS 表名
insert into 表名(字段1,字段2,...)values ('值一')('值二')('值三')
update 表名 set colnum _name = value,[colnum _name = value...] where [条件]
delete from 表名 [where 条件]
查询字段:
select 字段 from 表
起别名:
select 字段 as 别名 from 表
去重 distinct:
select distinct 字段 from 表
联表查询(重点):
join(连接的表)on(判断的条件)连接查询 inner join.....on(等值条件)交叉连接 left join 左联 right join 右联
where 等值查询
自连接:
自己的表和自己的表连接 一张表拆为两张一样的表即可
我要查询哪些数据 select ...
从哪几个表中查from表 (左表或者右表)xxxJoin 连接的表 on 交叉的条件
假设存在多张表查询 先查询两张表再慢慢增加
SELECT [ALL | DISTINCT] {*l table.* l [table,field1[as alias1][,table.field2[as alias2]][,...]]} FROM table_name [as table_alias] [left | right | inner join table_name2] --联合查询 [WHERE ...]--指定结果需满足的条件 [GROUP BY ...]-- 指定结果按照哪几个字段来分组 [HAVING] -- 过滤分组的记录必须满足的次要条件 [ORDER BY ...]--指定查询记录按一个或多个条件排序 [LIMIT {[offset,]row_count l row_countOFFSET offset]];--指定查询的记录从哪条至哪条
放在最后
语法:limit 起始值,页面大小
【pagesize:页面大小】
【(n-1)*pagesize:起始值】
【n:当前页】
【数据总数/页面大小=总页数】
放在where后
升序 ASC
降序 DESC
语法:order by 字段 ASC/DESC
在where语句中嵌套一个子查询语句
数据函数
SELECT ABS(-8); /*绝对值*/ SELECT CEILING(9.4); /*向上取整*/ SELECT FLOOR(9.4); /*向下取整*/ SELECT RAND(); /*随机数,返回一个0-1之间的随机数*/ SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/ 12345
字符串函数
SELECT CHAR_LENGTH('狂神说坚持就能成功'); /*返回字符串包含的字符数*/ SELECT CONCAT('我','爱','程序'); /*合并字符串,参数可以有多个*/ SELECT INSERT('我爱编程helloworld',1,2,'超级热爱'); /*替换字符串,从某个位置开始替换某个长度*/ SELECT LOWER('KuangShen'); /*小写*/ SELECT UPPER('KuangShen'); /*大写*/ SELECT LEFT('hello,world',5); /*从左边截取*/ SELECT RIGHT('hello,world',5); /*从右边截取*/ SELECT REPLACE('狂神说坚持就能成功','坚持','努力'); /*替换字符串*/ SELECT SUBSTR('狂神说坚持就能成功',4,6); /*截取字符串,开始和长度*/ SELECT REVERSE('狂神说坚持就能成功'); /*反转 -- 查询姓周的同学,改成邹 SELECT REPLACE(studentname,'周','邹') AS 新名字 FROM student WHERE studentname LIKE '周%'; 1234567891011121314
日期和时间函数
SELECT CURRENT_DATE(); /*获取当前日期*/ SELECT CURDATE(); /*获取当前日期*/ SELECT NOW(); /*获取当前日期和时间*/ SELECT LOCALTIME(); /*获取当前日期和时间*/ SELECT SYSDATE(); /*获取当前日期和时间*/ -- 获取年月日,时分秒 SELECT YEAR(NOW()); SELECT MONTH(NOW()); SELECT DAY(NOW()); SELECT HOUR(NOW()); SELECT MINUTE(NOW()); SELECT SECOND(NOW()); 12345678910111213
系统信息函数
SELECT VERSION(); /*版本*/ SELECT USER(); /*用户*/
函数名称 | 描述 |
---|---|
COUNT()【重点】 | 计数 |
SUM() | 求和 |
AVG() | 平均值 |
MAX() | 最大值 |
MIN() | 最小值 |
... | ...官网找 |
## 事务
ACID原则 :
原子性:要么都成功 要么都失败
一致性:事务前后的数据完整性保证一致
隔离性: 不被其他事务所干扰 事务之间相互隔离
持久性:事务一旦提交则不可逆 被持久化到数据库中
关闭自动提交 set autocommit = 0
事务开启 start transaction
提交 commit(成功) 或 回滚 rollback(失败)
事务结束 set autocommit = 1 (开启自动提交)
唯一标识 主键不可重复
避免重复的列 唯一索引可以重复
默认的 index key关键字设置
特定数据库引擎下有
快速定位数据
原子性:保证每一列不可再分
每张表只描述一件事情
保证数据表中的每一列数据都与主键相关 而不能间接相关
1 加载驱动
2 连接数据库DriverManager
3 获取执行sql对象 Statement
4 获取返回的结果集
5 释放连接
DriverManager
//DriverManager.registerDriver(new com.mysql.jdbc.Driver()); Class.forName("com.mysql.jdbc.Driver");//固定写法 Connection connection= DriverManager.getConnection(url,name,password); //connection代表数据库 //数据库设置自动提交 //事务提交 //事务回滚 connection.rollback(); connection.commit(); connection.setAutoCommit();
URL
jdbc:mysql://主机地址:端口号/数据库名?参数1&参数2&参数3
statement执行sql对象
String sql="SELECT * FROM users";//编写Sql statement.executeQuery(); statement.execute(); statement.executeUpdate();//更新,插入,删除,返回一个受影响的行数 123456
ResultSet查询结果集
ResultSet resultSet = statement.executeQuery(sql);//返回的结果集,结果集中封装了我们全部查询的结果 resultSet.getObject();//在不知道列类型下使用 resultSet.getString();//如果知道则指定使用 resultSet.getInt(); 1234567
释放内存
//6. 释放连接 resultSet.close(); statement.close(); connection.close();//耗资源