目录
前言
一.用户管理
二.DDL语法和DML操作
1.数据库的创建,删除,表的创建
2.插入,查询,更新
3.like子句,order by
4.UNION
5.排序order by
6.分组GROUP BY
7.连接
8.正则表达
9.alter命令
10.临时表
11.复制表
12.过滤重复数据
13.导出数据
14.导入数据
参考文献
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。本文MySQL使用版本为8.0.11,安装在window10下。
-----window10下本地登入mysql
mysql -u root -p
------远程登入mysql,需要mysql修改远程登入权限设置,192.168.1.*为MySQL安装的ip地址
mysql -h 192.168.1.* -u root -p
添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可。 MySQL 8.0.11 版本之后创建用户方法如下:
/*创建用户,'lu'为要创建的用户名,'123456'为密码*/
create user 'lu'@'localhost' identified by '123456';
/*用户的授权,*.*表示对所有数据库均授予这些权力*/
grant select,insert,update,delete,create,drop on *.* to 'lu'@'localhost';
/*用户的授权,demo.*表示对demo数据库授予这些权力*/
grant select,insert,update,delete,create,drop on demo.* to 'lu'@'localhost';
/*授予所有权限*/
grant all privileges on *.* to 'lu'@'localhost';
/*查看用户权限*/
show grants for 'lu'@'localhost';
/*创建数据库,mydb为创建的数据库名*/
create database if not exists mydb;
/*删除数据库,mydb为删除的数据库名*/
drop database if exists mydb;
/*选择数据库*/
use mydb;
/*创建表*/
create table if not exists Student(
`id` int UNSIGNED AUTO_INCREMENT, #AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
`s_name` varchar(20) not null default '',
`s_brith` varchar(20) not null default '',
`s_sex` varchar(20) not null default '',
primary key(`id`) #PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
)ENGINE=InnoDB DEFAULT CHARSET=utf8;#ENGINE 设置存储引擎,CHARSET 设置编码。
#插入数据
insert into Student(id,s_name,s_brith,s_sex) values(01,'赵雷','1990-01-01','男');
insert into Student values(02,'钱电','1990-12-21','男');
insert into Student values(03,'孙风','1990-05-20','男');
insert into Student values(04,'李云','1990-08-06','男');
insert into Student values(05,'周梅','1990-12-01','女');
insert into Student values(06,'吴兰','1990-03-01','女');
insert into Student values(07,'郑竹','1990-07-01','女');
insert into Student values(08,'王菊','1990-01-20','女');
#查询数据
#select * from Student where s_sex='男';
#update修改和更新mysq数据
#更新表中某字段值UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
update Student set s_sex='男女' where id=3;
#修改表中某字段值
update Student set s_sex=replace(s_sex,'女','女女') where id=7;
#delete删除数据
#DELETE FROM table_name [WHERE Clause]
delete from Student where id=1;#不指定where将删除所有记录
#like子句,order by:通过某个列进行排序,asc:升序,desc:降序
select * from Student where s_sex like '%女' order by s_sex desc;#%字符来表示任意字符,类似于UNIX或正则表达式中的星号 *
UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
select s_name as name_score_80 from student where s_name like '赵%'
union
select s_score from score where s_score > 80;
--先根据c_id进行排序,再跟s_score排序
select * from score order by c_id,s_score;
select c_id,sum(s_score) as sum_score from score group by c_id;
INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)来连接以上两张表来读取score表中所有id字段在student表对应的id字段值。
select * from score a
inner join
student b on a.s_id=b.s_id;
left join:读取左边数据表的全部数据,即便右边边表无对应数据。
right join:读取右边数据表的全部数据,即便左边边表无对应数据。
MySQL中使用 REGEXP 操作符来进行正则表达式匹配。
-- 查找s_brith字段中以'1990-01'为开头的所有数据:
select s_brith from student where s_brith regexp '^1990-01';
-- 查找s_brith字段中以'01'为结尾的所有数据:
select s_brith from student where s_brith regexp '01$';
-- 查找s_brith字段中'12'的所有数据:
select s_brith from student where s_brith regexp '12';
--删除表中name字段,如果数据表中只剩余一个字段则无法使用DROP来删除字段。
alter table student drop s_name;
--ADD 子句来向数据表中添加列
alter table student add s_name char;
--指定新增字段的位置
alter table student add s_name string first; --第一个字段
alter table student add s_name string after id; --id字段后
--修改字段类型及名称
alter table student modify s_name CHAR(10);
--或
alter table student change old_name new_name CHAR(10);
--修改表名
alter table student rename to new_student;
临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。
--创建临时表
create temporary table temp_table(name varchar not null);
--删除临死表
drop table temp_table;
--只复制表结构到新表
create table new_table like old_table;
--复制表结构及数据到新表
create table new_table select * from old_table;
select distinct name from student;
--或者
select name from student group by name;
select * from student into outfile'/tmp/table.txt'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
load data local infile 'tmp.txt' into table mytable;
https://www.runoob.com/mysql/mysql-operator.html