Java之MySql语法

1.mysql的安装

注意:1.安装位置和生成的数据库位置

2.用户名和密码

3.字符集问题

2.sql使用:

创建新连接,-->连接名称,用户,密码,可选择连接的数据库;

3.dos窗口操作数据库:

设置环境变量:path添加数据库bin目录

dos中使用 mysql -u用户名 -p密码 进入数据库,显示mysql> _

连接成功以后:show databases;-->显示当前所有的数据库

use xxx(数据库名);使用某个数据库,对其进行操作

show tables; -->显示某数据库当中的所有数据表--->前提是,已经进行了上面这一步?use--->才可以对我们的某个数据库进行增删改查,创建表

4.操作数据库:

创建:

create database if not exists 数据库名;

删除:

drop database if exists 数据库表名

查看所有数据库:

show databases;

使用数据库:--->进行后续的创建表操作

use database 数据库名:

5.结构化语言

DDL DML DQL DCL

6.创建表:

create table if not exists 表名 (

列名 列的类型 (列的长度) 约束条件

id int(4) not null,

name char(10)

);

desc xxx(表名)--->查看表结构--->就是我们的创建表的属性+类型+约束内容

列的数据类型:

数值: 主要-->int double

字符串: char(m) 不可变长度 varchar 可变长度 text 文本

日期和时间类型:date 年月日 time 时分秒 datetime 一块的

null类型:

列的数据属性:

unsigned:无符号,正数

zerofill:用0填充未使用的数位 int(4) 给1 -->0001;

auto_increment :自动增长,多用在序号,比上一个值多1

null 和 not null:--->默认为空 不允许为空

default:默认值,在没有输入值得时候,自动生成一个值

列的注释:

关键字:comment:

comment + '注释内容'

表类型:engine:数据表类型--->MyISAM,InnoDB,-->HEAP,BOB,CSV......

字符集:utf-8,gbk....关键字:charset = 字符集.

7.修改表:

关键字:alter

修改表名:alter table 旧表名 rename as 新表名;

添加表列:alter table 表名 add 新列名+数据类型+约束条件;

修改:

只修改列的约束条件

alter talbe 表名 modify 列名 + 新的约束条件;

修改列名字并且修改列条件:

alter table 表名 change 旧字段名 新字段名 + 条件;

删除列:

alter table 表名 drop 列名

删除表:

drop table 表名;

8.对表数据的操作

插入:

.insert into 表名(列1,列2......) values (值1,值2....);--->值得内容要和列的内容一致,对应.数量一致.但,列的数量不一定跟表中所有的列顺序和数量保持一致.

.insert into 表名 values (值1,值2.....);-->

值得数量和顺序要按照表中的数量和顺序保持一致.

.insert into 表名 values(值1,值2.....),(值1,值2),(值1,值2)......;-->依次插入多条数据.

注:1.插入自增长数据:例如:aa 表中有两个字段 id ,name -->id为 primary key auto_increment.

三种插入方法:1.insert into aa value (0,'内容');

2.insert into aa value (null,'内容');

3.insert into aa (name) values ('内容');

2.设置默认值:sex varchar(2) not null default '男'; -->设置默认值的时候,要求列长度和输入的字符相符长度 -->列长一般指字节长度

修改:

:update 表名 set 列 = 新值,列2 = 新值..... where 限制条件;

where 的限制条件:=,!=,>,=,

and,or.

id between 2 and 5---> id>=2 and id id>=2 && id

删除:

:delete from 表名 where 固定条件-->如果清空表的话,自增长计数器依然保存,表结构,索引保存

:truncate 表-->清空表数据 --->保存表结构,索引等等,,,auto_increment 计数器重置

:drop table ___>彻底删除表包含表结构等内容

9.mysql事务

mysql 事务是自动提交的,所以需要手动关闭

set autocommit = 0;//关闭

set autocommit = 1;//开启

使用事务的步骤:

0.关闭事务自动提交.

1.开启:start transaction;

2.进行数据操作;

3.如果出现错误,rollback回滚到事务开启点.

4.如果操作正确,commit进行提交.更新事务备份点.

5.最终完成之后,开启事务自动提交.

10.数据库的导入/导出

导出,备份:-->从数据库把数据保存到磁盘文件当中

mysqldump -h(主机名字) -u(用户名) -p(密码不用-->不安全) 数据库名字

>(path路径)+文件.sql 不需要加分号

导入,还原:-->从磁盘文件当中把数据导入到数据库当中

mysql -h(主机名字) -u(用户名) -p 目的数据库名字

(不提倡的导入方式)在mysql命令中:

source (路径)文件名.sql---->出现一大堆导入成功的提示..时间比较长,比较繁琐

11.DQL查询语句

select ....from .....

.as的用法,可以设置新列名,,,可以设置表别名,,,可以设置结果新列

.distinct -->去掉重复--->一条记录所有的列数据都相同的,只显示一条

.where条件 -->需要用到逻辑表达式或者条件表达式

>,=,!=, between,and,&&,||等待

like->模糊查询 %匹配0~多个字符,,,,_匹配一个任意字符

in-->选择字符 匹配()内的值-->效率高于普通的逻辑运算

.连接查询

内连接:等之内连接 非等值内连接

外连接:左外链接, 右外链接

自连接

:order by 列名 -->排序 desc 降序 asc 升序

:limit 分页显示 [m,]n n:每页显示记录数,m:偏移量

:子查询:在当前查询结果的基础上,在进行查询

第二次查询的条件就是第一次查询的结果

:group by 分组,按照某一列的数据,进行分组

select name,sum(sco) from score group by name;//显示每个人的名字和他的所有成绩的和

:having 对分组数据进行约束

12.索引的使用

直接在创建的列属性后面加 ++ 是约束(约束集成索引)

创建索引:primary key主键索引 unique 唯一索引

alter table 表名 add 索引类型 (列名)

删除索引:

drop index 索引名 on 表名

alter table b drop primary key;//特殊的删除方式

alter table b drop index name;//-->通用

查看索引:

show index;/keys

13.部分常用约束

primary key主键,unqiue非空,foreign key外键

CONSTRAINT `student_ibfk_1` FOREIGN KEY (`SubjectNo`) REFERENCES `subject` (`subjectNo`)

约束名当前表列外键表外键表列

14.

SELECT Sid AS '编号' FROM scores;

SELECT s.Sid AS '编号',s.Sname AS '姓名' FROM scores AS s;

SELECT * ,s.Sid + 1 AS '新编号'FROM scores AS s;

SELECT VERSION(),3;

SELECT VERSION() AS 'mysql_v',100*0.32 AS 'newdat','*****' AS 'lll';

SELECT * FROM SUBJECT WHERE subjectNo IN (1,2,3,4);

SELECT * FROM SUBJECT INNER JOIN student ON subject.`subjectNo` = student.`SubjectNo`;

SELECT * FROM student,SUBJECT WHERE student.`SubjectNo` = subject.`subjectNo`;

SELECT * FROM SUBJECT RIGHT JOIN student ON subject.`subjectNo` = student.`SubjectNo`;

SELECT * FROM student s1,student s2 WHERE s1.`SubjectNo` = s2.`SubjectNo`;

SELECT * FROM SUBJECT ORDER BY subject.`SubjectHour`ASC LIMIT 4,2;

SELECT * FROM student WHERE student.`SubjectNo` IN (SELECT subjectNo FROM SUBJECT) ORDER BY student.`StduentScore` DESC LIMIT 2;

SELECT SUM(score) FROM math GROUP BY NAME HAVING SUM(score)

SELECT s1.`StudentNo`,s1.`StudentName`,s1.`StduentScore`,s2.`subjectNo`,s2.`SubjectName` FROM student AS s1 INNER JOIN SUBJECT AS s2 ON s1.`SubjectNo` = s2.`subjectNo`;

SELECT * FROM SUBJECT s1,student s2;

SELECT * FROM student s1,SUBJECT s2 WHERE s1.`SubjectNo` = s2.`subjectNo`;

SELECT s1.`StudentNo`,s1.`StudentName`,s1.`StduentScore`,s2.`subjectNo`,s2.`SubjectName` FROM student s1 LEFT JOIN SUBJECT s2 ON s1.`SubjectNo` = s2.`subjectNo`;

SELECT * FROM math s1,math s2 WHERE s1.`id` = s2.`xuehao`;

SELECT * FROM scores ORDER BY Schinese DESC;

SELECT * FROM scores LIMIT 2*(页数-1),2;/*前面的值代表偏移量,后面的值代表显示条数*/

SELECT * FROM math WHERE id IN (SELECT id FROM math WHERE id >2)

SELECT COUNT(*) FROM math;

SELECT SUM(score) FROM math WHERE id IN(1,2);

SELECT MAX(id) FROM math;

SELECT NAME ,SUM(score)AS '成绩' FROM math GROUP BY NAME HAVING SUM(score) >150;

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180926A0XVCS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券