一、访问数据库
1、本地访问
mysql -u用户名 -p密码 方便但有泄露密码的风险
mysql -u用户名 -p 回车 隐藏密码的输入,建议使用此方法
2、远程登录
先使用 telnet ip 或者 ssh user@ip 登录到安装Mysql的服务器。
然后在使用mysql -u用户名 -p登陆。
3、客户端登录
参考数据库环境搭建
4、使用编程语言链接
使用libmysqlclient -dev库+MySQL C API,后续讲解
注意:登陆后要选择数据库
二、数据控制语句
grant <权限> on <对象> to <用户>;
revoke <权限> on <对象> from <用户>;
flush privileges; 当权限发生改变后,要进行刷新
三、数据定义语句
1、创建表
create table 表名(字段名 数据类型,...);
create table Student(
name char(20),
sex char,
id int);
show tables; 可以查看数据中所有的表
desc 表名; 可以查看表中的结构
2、修改表
a、修改表名
rename table 旧表名 to 新表名;
rename table Student to student;
b、增加列
alter table 表名 add(字段名 数据类型);
alter table Student add(id int);
c、删除列
alter table 表名 drop 字段名;
alter table Student drop addr;
注意:删除列时,数据也会随之删除
d、修改列类型
alter table 表名 modify 字段名 新类型;
alter table Student modify name char(30);
e、修改列名
alter table Student change 旧字段名 新字段名 新类型;
alter table Student change id stu_id char(10);
3、删除表
a、删除表数据,保留表结构
truncate 表名;
b、删除表数据和表结构
四、操作表数据
drop table 表名;
1、插入表数据
a、按顺序插入
insert into 表名 values(数据1,数据2,...);
insert into Student values("hehe",'m',10014);
b、指定字段插入
insert into 表名(字段1,字段2,...) values(数据1,数据2,...);
insert into Student(name,id) values("xixi",10086);
练习1、给教师表添加若干条记录
2、修改表数据
update 表名 set 字段名=数据,... where 条件;
update Student set sex='w',id=12306 where id=10086;
注意:如果没有条件,那么表中的每个数据都会改变
练习2、只修改教师表中的一条数据
3、删除表数据
delete from 表名 where 条件;
注意:如果没有条件,则相当于 truncate 表名 的功能,所有的数据都会被删除。
五、数据查询语言
select 字段1,字段2,... from 表名 where 条件;
注意:*代表所有字段
六、事务控制
1、commit 提交
数据操作语言对于其他用户而言,不会立即生效,也就不能及时查询到数据的变化,需要commit语句确认后,其他用户才能看到。
2、自动提交
在某些MySQL数据库中默认开启了autocommit,也就是自动提交(目的为了方便用户使用)。
查看当前连接是否开启自动提交
show variables like 'autocommit';
设置当前连接关闭或者开启自动提交
set session autocommit=0|1;
设置所有连接关闭或者开启自动提交(需要root)
set global autocommit=0|1;
3、rollback 回滚
当数据操作语言对数据进行更改后,如果没有使用commit提交,那么就可以回滚撤销,把数据还原成更改前的样子(上一次commit之前)。
4、savepoint 保存点
savepoint 保存点名;
insert into Student values("dd1",'m',10077);
savepoint p1;
insert into Student values("dd2",'m',10078);
savepoint p2;
insert into Student values("dd3",'m',10079);
savepoint p3;
rollback to savepoint 保存点名;
保存点配合rollback可以撤销到指定位置
七、数据查询
1、排重查询 distinct
在表中可能有多个重复的数据,查询数据是带上distinct关键字可以排除重复数据。
注意:查询多个字段时,所有字段都相同时才会被认定为重复。
select distinct 字段 from 表名;
select distinct name from Student;
2、算数运算符号
select 字段+、-、*、/、% from 表名;
可以对查询到的结果进行算术运算,如果想改变运算符的优先级,可以使用小括号。
3、排序
select 字段 from 表名 order by 字段1,字段2,... [asc|desc];
可以对多个字段进行排序,ASX升序(从小到大,默认),desc(从大到小);
select * from Student order by id asc;
4、where 子句按条件查询
配合关系运算符:> < >= <= = !=
为什么SQL语句中判断相等只使用一个等号?
因为SQL语句中无法定义变量,也就不需要赋值,所以=只有一个作用,就是用来判断是否相等。
select * from 表名 where 字段 关系运算符 数据;
配合逻辑运算符:and(&&) or(||) not(!)
select * from 表名 where 条件1 and 条件2
特殊条件1:between and
select * from 表名 where 字段 between A and B;
字段 between A and B <=> 字段>=A and 字段<=B;
特殊条件2:in
select * from 表名 where 字段 in (A,B,C,...);
select * from Student where id in (10011,10013);
特殊条件3:is null,is not null
注意:在数据表中null是一种状态,而不是一个值,所以无法用=和!=直接判断,而是需要使用is null和is not null 来判断数据是否为null
select * from 表名 where 字段 is null;
select * from 表名 where 字段 is not null;
特殊条件4:like
在SQL语句中也支持模糊查询,但需要配合通配符使用,但只针对字符型数据使用。
select 字段 from 表名 where 字段 like "%str_";
% 替换0个或多个字符,相当于命令行中的*
_代表一个字符