MySql基本使用命令记录
- [2. 数据库操作](#2. 数据库操作)
- 3.数据库下表操作
-
- [4. 数据库表中数据操作](#4. 数据库表中数据操作)
- [5. 建表约束](#5. 建表约束)
- 6.java程序如何与数据库交互,
- [7. 连接查询](#7. 连接查询)
-. mysql --version
1.链接sql服务:
mysql -uroot -p123456 //-u:root用户; -p:密码
2. 数据库操作
. 查看服务包含的所有数据库: show DATABASES; #注意要在末尾添加分号
-. 添加一个数据库: create DATABASE name;
-. 删除一个数据库: drop DATABASE [IF EXISTs] name; #IF EXISTS 是一个可选的子句,表示如果数据库存在才执行删除操作
-. 选择要使用的数据库: use name;
-. 推出数据库服务:exit;
3.数据库下表操作
. 查看当前数据库中的所有数据表: show TABLES;
-. 创建一个数据表: create TABLE name(列名 类型, 列名 类型,...);
例如:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, #id: int类型、自增长、主键
username VARCHAR(50) NOT NULL, #username:变长字符串、不允许为空
email VARCHAR(100) NOT NULL,
birthdate DATE, # 日期类型
is_active BOOLEAN DEFAULT TRUE # 布尔类型、默认值为true
);
--删除数据表: drop TABLE[IF EXISTs] name; #IF EXISTS 是一个可选的子句,表示如果数据库存在才执行删除操作
--查看数据表结构: describe 表名;
4. 数据库表中数据操作
-插入数据: insert into 表名 values (a,b,c,Null),(...); #一行数据用一个括号包含,数据之间用逗号分隔,字符串要用单引号
-删除数据: delete from 表名 where ...; where是查询条件,如果没有这一部分则会将表内所有记录清楚
-修改数据: UPDATE 表名 SET column1 = value1, column2 = value2, ... WHERE condition;
-查询查询查询查询【重点】 ********
--SELECT 字段 from 表名 ( where id=1); #字段为*是表示全部, 括号内是限制条件,可以不要
-查询字段时重复项只显示一次: 使用distinct关键字:select distinct 字段 from 表名
-查询区间用between...and...:
例如:查询score表中成绩degree值在60-80之间的数据: select * from score where degree between 60 and 80;
-查询【同一个字段】匹配a或者b或者c这样的用:in关键字。例如:select * from score where degree in(60,62,63);
-查询【不同字段】或的关系用or关键字。例如:select * from score where degree=60 or name='小明';
- 升序(默认): order by 字段 asc; 降序: order by 字段 desc 。 例如:select * from score order by id asc, degree desc;
-分组:group by .
例如:查询每一门学科的平均分。 select avg(degree) from score group by cno;
-group by 字段名 having count():计算每个分组的行个数。
例如: 查询学生表中至少含有两名男生的班级号码。 select class from student where ssex='男' group by class having count()>1;
-多表查询: 通过将多个表中相同的字段关联起来。
例如: select sname, score, degree from student, score where student.sid=score.id;
-any(...): 集合中的任何一个; all(...): 集合中的所有
-(selsect...) union (select...) : 将多个select的结果通过union关键字合并到一起并去除重复行。要求:多个select语句的列数以及对应位置的数据类型必须一致
-模糊查询:字段名 like(...%); 取反 not like. 通配符: '%':任意一个或多个字符; '_':任意一个字符
例如: 查询班级中不姓王的学生: select sname from student where sname not like('王%');
-时间函数: now():当前时间; year():年份。
例如计算学生的年龄用当前年份-出生年份:year(now())-year(birthday);
-最大函数:max(字段名); 最小:min(字段名)
5. 建表约束
-主键约束: primary key; 指定某一个字段为主键,内容不能为空、不能重复;
--联合主键:create table users2( id int ,name varchar(20), primary key(id,name)); #primary key(a,b) a和b是联合主键,两个合在一起不重复就可以
-自增约束: auto_increment; 通常是放在primary key的后面,自动管控主键、进行自增,可以不用手动填写该字段的值
-唯一约束: unique; 指定有一个字段内容不能重复
-非空约束: not_null;
-默认约束: default a; 设置默认值
-外键约束: 涉及主表和子表,
将主表的一个字段设置为子表的一个字段的外键,则子表这个字段的值必须取在主表外键字段中存在的值
主表中的值被子表引用,则主表中的这个内容不能被删除或者修改
例如: CREATE table2 (
id int,
name varchar(20),
classid int,
foreign key(classid) references table(id) #foreign key(要添加主键约束的字段名)references 主表名(字段名)
);
6.java程序如何与数据库交互,
通过odbc, 步骤:链接数据库、发送sql语句、处理结果、关闭连接。c++也有同样逻辑的mysql第三方库可以使用
发送给数据库的增删改查语句就是sql语句,以字符串的方式传输
接受的查询结果是一个表格并配有一个行指针的封装类型,通过next向下一行遍历,结果接受完毕之后就失效,不能后退
7. 连接查询
可以在 SELECT, UPDATE 和 DELETE 语句中使用 MySQL 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
全连接(full join): 将left join 和right join用union组合起来